【随身WiFi】随身WiFi Debian系统优化教程

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 、命令安装,自己选择要安装的工具

bash 复制代码
apt update && apt install xxx0 xxx1 xxx2

2.创建swap/zram虚拟内存

2.1 创建swap

创建一个512M的swapfile并启用,充实随身wifi不到512M的可怜内存。由于没有多余的闪存空间,再分区会导致多余的麻烦,所以用创建swapfile文件的方式,而不用swap分区

swapfile文件地址任意,我选择在根目录/

bash 复制代码
dd if=/dev/zero of=/swapfile bs=1M count=512
chmod 600 /swapfile
mkswap /swapfile
swapon -p 1 /swapfile

创建之后,马上生效。下次开机生效需要在/etc/rc.local文件添加swapon命令

bash 复制代码
#nano /etc/rc.local
swapon /swapfile

至于调整swap使用积极性 vm.swappiness=100,在第9步有配置

2.2 临时创建zram

创建一个256m的zram分区,先查看内核支不支持,是否加载了zram模块,如果输出结果包含zram,则表示Zram模块已加载。

bash 复制代码
lsmod | grep zramlsmod | grep zram

加载zram内核模块,并指定设备数量为1。创建一个256MB大小的zram设备,并使用lz4算法(这算法最快)进行压缩,同时将数据分成4个流。将zram设备格式化为swap分区,启用zram设备,并设置优先级。(看不懂没关系,直接用命令就行)

bash 复制代码
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服务配置文件:

bash 复制代码
nano /etc/systemd/system/zram.service

将以下配置并粘贴到文件中:

bash 复制代码
[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 服务:

bash 复制代码
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(之前已经安装了就不管)

bash 复制代码
apt install cpufrequtils

查看cpu信息,打印所有信息(这里只展示410其中一个核心作为示例)

bash 复制代码
cpufreq-info
bash 复制代码
root@4G-wifi:~# cpufreq-info 
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to [email protected], please.
analyzing CPU 0:
  driver: cpufreq-dt
  CPUs which run at the same hardware frequency: 0 1 2 3
  CPUs which need to have their frequency coordinated by software: 0 1 2 3
  maximum transition latency: 0.97 ms.
  hardware limits: 400 MHz - 2.10 GHz
  available 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 GHz
  available cpufreq governors: userspace, conservative, ondemand, powersave, performance, schedutil
  current policy: frequency should be within 400 MHz and 2.10 GHz.
                  The governor "schedutil" may decide which speed to use
                  within 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

bash 复制代码
cpufreq-set -g schedutil

也可以通过cpufreq-info -p查看当前CPU模式。

bash 复制代码
cpufreq-info -p

3.2 临时CPU频率调优

上面说到当前系统的cpu频率支持 400MHz - 2.1GHz(实际得看你刷的固件)。可以自定义频率范围,内核会根据你选择的调度策略控制cpu运行频率,我的建议是保持固件默认,想省点电可以降低最高频率。

bash 复制代码
cpufreq-set -d <最低频率> -u <最高频率>
#例如 cpufreq-set -d 0.5GHz -u 2GHz

通过cpufreq-info -p查看当前CPU模式,

bash 复制代码
cpufreq-info -p

也可以固定频率,那原先调度策略就会失效,自动设置为userspace,cpu当前频率固定为设置值

bash 复制代码
cpufreq-set -f <频率> 
#例如 cpufreq-set -d 1.0GHz

通过cpufreq-info -f查看当前CPU频率,

bash 复制代码
cpufreq-info -f

这里提一嘴,-c这个参数,指定cpu序号,对410好像不生效,会变成全局设置

3.3 永久生效配置

上面两步都可以马上生效,重启后失效,想要重启后仍然生效,则需要如下配置

编辑/etc/default/cpufrequtils文件(如果文件不存在,则创建它),设置你想要的最大和最小频率:

bash 复制代码
nano /etc/default/cpufrequtils

添加或修改以下行:

bash 复制代码
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,登录前打印信息

bash 复制代码
nano /etc/issue

4.2 登录后打印

修改/etc/motd,登录后打印信息

bash 复制代码
nano /etc/motd

4.3 登录时系统动态信息打印

修改 /etc/update-motd.d/10-uname

bash 复制代码
nano /etc/update-motd.d/10-uname
bash 复制代码
#!/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:")"
fi

ip_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"; };
fi

interfaces=$(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 清理系统中不需要的软件包和日志文件

使用命令

bash 复制代码
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优化,一般不需要手动执行,内核会一周执行一次,通过命令可查看

bash 复制代码
systemctl status fstrim.timer

可以手动执行,也可以放在/etc/rc.local文件里,让他开机运行一次。

bash 复制代码
fstrim -v /

6.2 修复ext4文件系统只读

有时docker守护进程跑不起来,那可能是闪存写保护了。

bash 复制代码
mount -l 

查看挂载情况,如果是/dev/mmcblk0p14 是(ro,...),不是(rw,...)就是写保护了

尝试重新挂载为可写状态,失败的话就继续往下看

bash 复制代码
mount -w /dev/mmcblk0p14

有的体质差的在拔插随身wifi后,重启后磁盘就写保护了。特别是在有swapfile文件时,会出现这种情况,这是后就要使用e2fsck命令修复,并重启随身WiFi

bash 复制代码
e2fsck -y /dev/mmcblk0p14
reboot

7.自动识别并切换usbhub模式

7.1 自动识别是否外接usbhub,并切换模式

修改/etc/rc.local,如果接入usb就会切换usb主机模式,否则就是默认

bash 复制代码
nano /etc/rc.local
bash 复制代码
# 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
fi

sleep 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设置为常量状态,可以使用命令

bash 复制代码
echo default-on > /sys/class/leds/green:internet/trigger

该命令让触发器选择为[default-on],绿灯常量

想要永久有效,将设置写入/etc/rc.local让其重启依旧生效

bash 复制代码
#编辑 /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电源状态
  • rfkill0rfkill1等:RFkill设备状态‌
  • netdev:基于网络接口的活动(如传输数据)触发。
  • phy0rx:无线设备接收操作,表示WIFI连接状态
  • phy0tx:无线设备发送操作,表示WIFI连接状态

9.一些配置内核参数的正or负优化

9.1 通过配置sysctl.conf,配置内核参数

使用命令

bash 复制代码
nano /etc/sysctl.conf
bash 复制代码
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=15000

net.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 文件后,需要运行以下命令使其永久生效:

bash 复制代码
sysctl -p

如果本文对你有帮助,欢迎点链接打赏支持!
如果图片被和谐,可以点上面链接打赏

相关推荐
邪恶的贝利亚28 分钟前
FFmpeg 硬核指南:从底层架构到播放器全链路开发实战 基础
linux·服务器·ffmpeg
涛ing1 小时前
【Linux “less“ 命令详解】
linux·运维·c语言·c++·人工智能·vscode·bash
杨浦老苏4 小时前
Docker应用端口查看器docker-port-viewer
运维·docker·群晖
临观_4 小时前
打靶日记 zico2: 1
linux·网络安全
AI大模型顾潇4 小时前
[特殊字符] AI 大模型的 Prompt Engineering 原理:从基础到源码实践
运维·人工智能·spring·自然语言处理·自动化·大模型·prompt
痆古酊旳琲伤4 小时前
Linux驱动开发1 - Platform设备
linux·驱动开发
周Echo周4 小时前
16、堆基础知识点和priority_queue的模拟实现
java·linux·c语言·开发语言·c++·后端·算法
柳如烟@4 小时前
基于GTID的主从复制
运维·mysql·gdit
谢斯5 小时前
【jenkins】首次配置jenkins
运维·jenkins