0.操作前必看
本教程基于Debian系統進行優化,有些操作對隨身WiFi來說可能會帶來負優化,根據需要選擇。
所有操作需要在root用戶環境下運行,否則都要加sudo
隨身wifi Debian系統,可以去某安的隨聲WiFi模塊自行搜索刷機
點贊,關注,打賞
點贊,關注,打賞
點贊,關注,打賞
1.常用工具推薦
1.1 SSH客戶端
一般系統編譯了ssh服務端,所以只需要用客戶端連接就行
客戶端推薦 Xshell,官網下載地址
XSHELL - NetSarang Website
1.2 Linux常用工具集
在玩隨身WIFI時,或多或少會使用到下面一些工具
- curl:用于在命令行中傳輸數據的工具。
- wget:用于下載文件的命令行工具。
- nano:一個簡單易用的文本編輯器。
- vim:一個強大的文本編輯器,常用于程序開發和系統配置。
- busybox:一個適用于嵌入式系統和單片機的工具集,包含了大部分基本的Linux工具。
- iptables:用于配置Linux防火墻的工具。
- iproute2:用于管理網絡連接和路由的工具。
- cpufrequtils:用于管理CPU頻率的工具。
用apt 、命令安裝,自己選擇要安裝的工具
apt update && apt install xxx0 xxx1 xxx2
2.創建swap/zram虛擬內存
2.1 創建swap
創建一個512M的swapfile并啟用,充實隨身wifi不到512M的可憐內存。由于沒有多余的閃存空間,再分區會導致多余的麻煩,所以用創建swapfile文件的方式,而不用swap分區
swapfile文件地址任意,我選擇在根目錄/
dd if=/dev/zero of=/swapfile bs=1M count=512
chmod 600 /swapfile
mkswap /swapfile
swapon -p 1 /swapfile
創建之后,馬上生效。下次開機生效需要在/etc/rc.local文件添加swapon命令
#nano /etc/rc.local
swapon /swapfile
至于調整swap使用積極性 vm.swappiness=100,在第9步有配置
2.2 臨時創建zram
創建一個256m的zram分區,先查看內核支不支持,是否加載了zram模塊,如果輸出結果包含zram
,則表示Zram模塊已加載。
lsmod | grep zramlsmod | grep zram
加載zram內核模塊,并指定設備數量為1。創建一個256MB大小的zram設備,并使用lz4算法(這算法最快)進行壓縮,同時將數據分成4個流。將zram設備格式化為swap分區,啟用zram設備,并設置優先級。(看不懂沒關系,直接用命令就行)
modprobe zram num_devices=1
zramctl --find --size 256M --algorithm lz4 --streams 4
mkswap /dev/zram1
swapon -p 0 /dev/zram1
2.3 永久創建zram分區
網上配置zram的教程挺少的。有很多種方法里,不同內核不太兼容。所以用創建配置服務方式兼容性最強
為了方便配置和管理,我們可以將 ZRAM 配置編寫成一個服務腳本,來方便隨時啟用和禁用:
使用你習慣的文本編輯器(如 vim 或 nano),創建一個zram.service
服務配置文件:
nano /etc/systemd/system/zram.service
將以下配置并粘貼到文件中:
[Unit]
Description=ZRAM Configuration
After=local-fs.target[Service]
Type=oneshot
ExecStart=/usr/sbin/modprobe zram
ExecStart=/bin/sh -c 'echo 0.2G > /sys/block/zram0/disksize'
ExecStart=/bin/sh -c 'mkswap /dev/zram0'
ExecStart=/bin/sh -c 'swapon /dev/zram0'
RemainAfterExit=yes[Install]
WantedBy=multi-user.target
根據你 Ubuntu 系統的物理內存大小,在ExecStart
行中調整需要的 ZRAM 大小,一般設置為 RAM 大小的 50%-100%。
使用以下命令啟動并啟用 ZRAM 服務:
systemctl daemon-reload # 重新載入服務配置文件
systemctl enable zram.service # 啟用 zram 服務
systemctl start zram.service # 啟動 zram 服務
2.4?常用命令補充
- swapon -a #啟用所有swap分區。
- swapoff -a #禁用所有swap分區。
- swapon --show 或 swapon -s #顯示當前系統中已啟用的swap分區。
- swapon -p 或 swapon --priority #將指定的swap分區設置為指定的優先級。優先級越高的swap分區,系統越傾向于將內存數據轉移到該分區中。
- free -m #查看當前內存使用情況
3. CPU調優
3.1 臨時調度調優
410支持的調度策略 userspace, conservative, ondemand, powersave, performance, schedutil
其中schedutil是比較優秀的調度,我們使用cpufrequtils工具設置調度策略
安裝cpufrequtils(之前已經安裝了就不管)
apt install cpufrequtils
查看cpu信息,打印所有信息(這里只展示410其中一個核心作為示例)
cpufreq-info
root@4G-wifi:~# cpufreq-info
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:driver: cpufreq-dtCPUs which run at the same hardware frequency: 0 1 2 3CPUs which need to have their frequency coordinated by software: 0 1 2 3maximum transition latency: 0.97 ms.hardware limits: 400 MHz - 2.10 GHzavailable frequency steps: 400 MHz, 800 MHz, 1000 MHz, 1.10 GHz, 1.20 GHz, 1.30 GHz, 1.40 GHz, 1.50 GHz, 1.60 GHz, 1.70 GHz, 1.80 GHz, 1.90 GHz, 2.00 GHz, 2.10 GHzavailable cpufreq governors: userspace, conservative, ondemand, powersave, performance, schedutilcurrent policy: frequency should be within 400 MHz and 2.10 GHz.The governor "schedutil" may decide which speed to usewithin this range.current CPU frequency is 1.42 GHz (asserted by call to hardware).cpufreq stats: 400 MHz:90.04%, 800 MHz:3.05%, 1000 MHz:0.54%, 1.10 GHz:0.15%, 1.20 GHz:0.12%, 1.30 GHz:0.12%, 1.40 GHz:0.34%, 1.50 GHz:0.18%, 1.60 GHz:0.29%, 1.70 GHz:0.35%, 1.80 GHz:0.35%, 1.90 GHz:0.29%, 2.00 GHz:0.52%, 2.10 GHz:3.68% (403860)
cpufreq-info -f?
查看當前CPU頻率。cpufreq-info -p?
查看當前CPU模式。cpufreq-info -g?
查看當前支持的CPU運行模式。
我用的超頻版Debian系統,cpu頻率支持 400MHz - 2.1GHz
設置cpu調度策略為schedutil
cpufreq-set -g schedutil
也可以通過cpufreq-info -p
查看當前CPU模式。
cpufreq-info -p
3.2 臨時CPU頻率調優
上面說到當前系統的cpu頻率支持 400MHz - 2.1GHz(實際得看你刷的固件)。可以自定義頻率范圍,內核會根據你選擇的調度策略控制cpu運行頻率,我的建議是保持固件默認,想省點電可以降低最高頻率。
cpufreq-set -d <最低頻率> -u <最高頻率>
#例如 cpufreq-set -d 0.5GHz -u 2GHz
?通過cpufreq-info -p
查看當前CPU模式,?
cpufreq-info -p
也可以固定頻率,那原先調度策略就會失效,自動設置為userspace,cpu當前頻率固定為設置值
cpufreq-set -f <頻率>
#例如 cpufreq-set -d 1.0GHz
?通過cpufreq-info -f
查看當前CPU頻率,?
cpufreq-info -f
這里提一嘴,-c這個參數,指定cpu序號,對410好像不生效,會變成全局設置
3.3 永久生效配置
上面兩步都可以馬上生效,重啟后失效,想要重啟后仍然生效,則需要如下配置
編輯/etc/default/cpufrequtils
文件(如果文件不存在,則創建它),設置你想要的最大和最小頻率:
nano /etc/default/cpufrequtils
添加或修改以下行:
GOVERNOR="schedutil" # 或者 "powersave", "ondemand" 等
MAX_SPEED="21000000" # 最大頻率,單位是Hz,例如3000000表示3.0 GHz
MIN_SPEED="4000000" # 最小頻率,單位是Hz,例如1000000表示1.0 GHz
保存文件后,重啟驗證配置是否生效,不驗證也可以
4. 自定義登錄信息
4.1 登錄前打印
修改/etc/issue,登錄前打印信息
nano /etc/issue
?
4.2 登錄后打印
修改/etc/motd,登錄后打印信息
nano /etc/motd
?
4.3 登錄時系統動態信息打印
修改?/etc/update-motd.d/10-uname
nano /etc/update-motd.d/10-uname
#!/bin/sh
# uname -snrvm
echo "\033[47m \033[30m-------------------------- 系統信息 --------------------------\033[37m \033[40m"
echo "操作系統: $(echo "$(sed 's/\\n//g;s/\\l//g' /etc/issue)")" || echo "操作系統: $(uname -o)"
echo "主機名稱: $(hostname)"
echo "內核版本: $(uname -r)"
echo "軟件包數量: $(dpkg --list | wc -l)"
echo "CPU架構: $(lscpu| awk '/Architecture:/ {print $NF}')"
echo "CPU核心數: $(lscpu| awk '/^CPU/ {print $2}')"
echo "核心線程數: $(lscpu| awk '/Thread per core:/ {print $NF}')"
echo "CPU溫度: $(cat /sys/class/thermal/thermal_zone0/temp 2>/dev/null | awk '{print int($1/1000)}')°C"
echo ""
if output=$(mmcli -m 0 2>&1) && [ -n "$output" ]; then
get_modem() { mmcli -m 0 2>/dev/null | grep -oiP "(?<=$1\s).*" | awk 'NR==1{print}'; };
echo ""
echo "\033[47m \033[30m-------------------------- Modem信息 --------------------------\033[37m \033[40m"
[ -n "$(get_modem "own:")" ] && echo "SIM號碼: $(get_modem "own:" | sed 's/^86//')"
[ -n "$(get_modem "operator name:")" ] && echo "運營商: $(get_modem "operator name:" | sed 's/CHN-UNICOM/中國聯通/g; s/UNICOM/中國聯通/g; s/CMCC/中國移動/g; s/CT/中國電信/g')"
[ -n "$(get_modem "state:")" ] && echo "SIM狀態: $(get_modem "state:")"
[ -n "$(get_modem "power state:")" ] && echo "數據開關: $(get_modem "power state:")"
[ -n "$(get_modem "access tech:")" ] && echo "訪問類型: $(get_modem "access tech:")"
[ -n "$(get_modem "signal quality:")" ] && echo "信號強度: $(get_modem "signal quality:")"
[ -n "$(get_modem "equipment id:")" ] && echo "設備ID: $(get_modem "equipment id:")"
fiip_address=$(ip addr show | grep -w inet | awk '{print $2}' | cut -d/ -f1)
echo ""
if [ -n "$ip_address" ]; then
echo "\033[47m \033[30m-------------------------- 網絡信息 --------------------------\033[37m \033[40m"
echo "內網IP:"
echo "$ip_address"
curl_output=$(curl -s -m 6 cip.cc 2>&1 | sed '/^$/d') && [ -n "$curl_output" ] && {
echo "公網IP:"
echo "$curl_output"; };
fiinterfaces=$(ifconfig | awk '/^[^ ]/ && !/lo/ {gsub(/:/,"");print $1}')
echo ""
if [ -n "$interfaces" ]; then
echo "\033[47m \033[30m-------------------------- 接口信息 --------------------------\033[37m \033[40m"
echo "網絡接口: "$interfaces""
convert_unit() { size=$1; awk 'BEGIN{ printf "%.2f %s", ('$size'/1024/1024), "MB" }'; }
for interface in $interfaces; do
get_bytes() { ifconfig $interface | grep -E "$1 .*bytes|$1 bytes" | sed -E "s/.*$1 bytes:([0-9]+).*/\1/;s/.*bytes ([0-9]+) .*/\1/"; }
rx=$(get_bytes RX)
tx=$(get_bytes TX)
[ $rx -gt 0 -o $tx -gt 0 ] && echo "$interface 接收: $(convert_unit $rx) 發送: $(convert_unit $tx)"
done;fi
echo ""
echo "\033[47m \033[30m-------------------------- 內存信息 --------------------------\033[37m \033[40m"
mmc_info=$(cat /sys/class/mmc_host/mmc0/mmc0\:0001/life_time)
[ -n "$mmc_info" ] && echo "內存壽命: $mmc_info"
echo "硬件內存: $(free -m | awk 'NR==2{printf "%s/%sMiB (%.2f%%)\n", $3,$2,$3*100/$2 }')"
swap_info=$(free -m | awk 'NR==3{printf "%s/%sMiB (%.2f%%)\n", $3,$2,$3*100/$2}')
[ ! -z "$swap_info" ] && echo "虛擬內存: $swap_info" && sudo swapon --show
echo ""
echo "\033[47m \033[30m-------------------------- 磁盤信息 --------------------------\033[37m \033[40m"
df -h
echo ""
echo "\033[47m \033[30m-------------------------- 運行信息 --------------------------\033[37m \033[40m"
uptime=$(uptime | sed 's/up/已運行:/g; s/mins/分鐘/g; s/min/分鐘/g; s/days/天/g; s/day/天/g; s/users/個登錄用戶/g; s/user/個登錄用戶/g; s/load average/平均負載/g')
echo "本地時間: $uptime"
echo ""
5. 清除不需要的軟件包與日志文件
5.1 清理系統中不需要的軟件包和日志文件
使用命令
apt-get autoremove && apt-get clean && apt-get autoclean && journalctl --vacuum-size=5M
- apt-get autoremove:卸載已經不再需要的軟件包。這個命令會移除已經安裝但是沒有被其他軟件所依賴的軟件包。
- apt-get clean:清理已經下載的軟件包文件。這個命令會刪除已經下載并安裝的軟件包的本地緩存文件,以釋放磁盤空間。
- apt-get autoclean:清理過期的軟件包。這個命令會刪除已經過期的軟件包,但是保留最新的軟件包版本的本地緩存文件,以便以后重新安裝。
- journalctl --vacuum-size=5M:縮減系統日志文件。這個命令會刪除舊的系統日志文件,只保留最近的5M大小的日志文件。
6.磁盤優化
6.1?TRIM優化
ssd的技術,我們的隨身wifi的閃存也支持,能讓ssd保持高速寫入性能。
TRIM優化,一般不需要手動執行,內核會一周執行一次,通過命令可查看
systemctl status fstrim.timer
可以手動執行,也可以放在/etc/rc.local文件里,讓他開機運行一次。
fstrim -v /
6.2 修復ext4文件系統只讀
有時docker守護進程跑不起來,那可能是閃存寫保護了。
mount -l
查看掛載情況,如果是/dev/mmcblk0p14 是(ro,...),不是(rw,...)就是寫保護了
嘗試重新掛載為可寫狀態,失敗的話就繼續往下看
mount -w /dev/mmcblk0p14
有的體質差的在拔插隨身wifi后,重啟后磁盤就寫保護了。特別是在有swapfile文件時,會出現這種情況,這是后就要使用e2fsck命令修復,并重啟隨身WiFi
e2fsck -y /dev/mmcblk0p14
reboot
7.自動識別并切換usbhub模式
7.1 自動識別是否外接usbhub,并切換模式
修改/etc/rc.local,如果接入usb就會切換usb主機模式,否則就是默認
nano /etc/rc.local
# usb auto otg
sleep 3
grep 0 /sys/kernel/debug/usb/ci_hdrc.0/device | grep speed
if [ $? -eq 0 ]
then
echo host > /sys/kernel/debug/usb/ci_hdrc.0/role
fisleep 25 && /etc/init.d/network restart
exit 0
8.修改LED燈配置
8.1 修改led配置
查看當前LED的行為
可以通過查看/sys/class/led/<名字>/trigger
文件來了解當前LED的行為。例如,查看綠色LED的行為,可以使用命令
cat /sys/class/leds/green:internet/trigger
當前綠燈觸發器選擇為[none],可以設置成其他的
?修改LED的行為?
通過向trigger
文件寫入新的行為來修改LED的行為。例如,將綠色LED設置為常量狀態,可以使用命令
echo default-on > /sys/class/leds/green:internet/trigger
該命令讓觸發器選擇為[default-on],綠燈常量
想要永久有效,將設置寫入/etc/rc.local讓其重啟依舊生效
#編輯 /etc/rc.local 加入,具體自己設置對應trigger
sleep 10
echo default-on > /sys/class/leds/red:os/trigger
echo phy0rx > /sys/class/leds/blue:wifi/trigger
echo cpu > /sys/class/leds/green:internet/trigger
8.2 led燈名稱與觸發器解釋
三色LED地址
- 紅燈:/sys/class/leds/red:os
- 藍燈:/sys/class/leds/blue:wifi
- 綠燈:/sys/class/leds/green:internet
觸發器行為(有些行為,你刷的系統內核不支持)
usb-gadget
:USB設備連接狀態usb-host
:USB主機連接狀態rfkill-any
:RFkill任何狀態改變rfkill-none
:RFkill無狀態改變kbd-scrolllock
:鍵盤滾動鎖定燈狀態kbd-numlock
:鍵盤數字鎖定燈狀態kbd-capslock
:鍵盤大寫鎖定燈狀態timer
:定時器事件heartbeat
:心跳事件cpu
:CPU狀態default-on
:常量開啟狀態panic
:恐慌報警狀態mmc0
:存儲卡狀態bluetooth-power
:藍牙電源狀態hci0-power
:HCI0電源狀態rfkill0
、rfkill1
等:RFkill設備狀態?netdev
:基于網絡接口的活動(如傳輸數據)觸發。- phy0rx:無線設備接收操作,表示WIFI連接狀態
- phy0tx:無線設備發送操作,表示WIFI連接狀態
9.一些配置內核參數的正or負優化
9.1 通過配置sysctl.conf,配置內核參數
使用命令
nano /etc/sysctl.conf
vm.swappiness=100
vm.vfs_cache_pressure=50
vm.panic_on_oom=0
vm.dirty_ratio=50
vm.dirty_background_ratio=30
vm.min_free_kbytes=10240
vm.max_map_count=262144
vm.dirty_expire_centisecs=3000
vm.dirty_writeback_centisecs=15000net.ipv6.conf.all.forwarding=1
net.ipv6.conf.all.proxy_ndp=1
net.ipv6.conf.all.accept_ra=2
net.ipv4.ip_forward=1
net.core.somaxconn=2048
net.ipv4.tcp_max_syn_backlog=8192
net.core.netdev_max_backlog=32768
net.ipv4.tcp_keepalive_time=600
net.ipv4.icmp_echo_ignore_all=0
net.ipv4.tcp_abort_on_overflow=0
net.ipv4.tcp_fack=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_sack=1
net.ipv4.tcp_window_scaling=1
net.ipv4.tcp_timestamps=1
net.ipv4.tcp_fastopen=3
net.ipv4.tcp_slow_start_after_idle=0
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_keepalive_intvl=30
net.ipv4.tcp_keepalive_probes=3
net.ipv4.ip_default_ttl=128
net.core.message_burst=10
net.core.busy_read=50
net.core.optmem_max=20480
net.ipv4.tcp_challenge_ack_limit=9999
net.ipv4.tcp_max_orphans=32768
net.ipv4.tcp_max_tw_buckets=32768
net.ipv4.udp_rmem_min=8192
net.ipv4.udp_wmem_min=8192
net.ipv4.ip_local_port_range=1024 65000
net.ipv4.tcp_mem=131072 262144 524288
net.ipv4.udp_mem=262144 524288 1048576
net.ipv4.tcp_wmem=8760 256960 4088000
net.ipv4.tcp_rmem=8760 256960 4088000
net.core.rmem_default=524288
net.core.rmem_max=8388608
net.core.wmem_default=524288
net.core.wmem_max=8388608
在修改 /etc/sysctl.conf 文件后,需要運行以下命令使其永久生效:
sysctl -p
如果本文對你有幫助,歡迎點鏈接打賞支持!
