Ubuntu文件系统瘦身优化指南
系统分析与裁剪策略
1. 查看正在运行的服务
systemctl list-unit-files --type=service --no-pager
可以看到开机自启的服务和实际在跑的服务。比如有些蓝牙、打印、avahi、snapd 等,嵌入式设备上一般可以关掉。
2. 查看安装了哪些大软件包
dpkg -l | less
找出体积比较大的软件包,比如 firefox、libreoffice、thunderbird、snapd 之类,在 LXDE 上一般没必要,可以卸载。
单个包占用空间情况:
dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n | tail -20
能看到占用空间最大的 20 个包。
3. 查看磁盘使用情况
du -h --max-depth=1 / | sort -h
du -h --max-depth=1 /usr | sort -h
这样可以直观判断哪些目录最占空间,比如 /usr/share 往往有很多文档、locale、man 文件。
4. 典型可以裁剪的方向
- 文档/locale:
apt purge man-db manpages
rm -rf /usr/share/doc/*
rm -rf /usr/share/man/*
rm -rf /usr/share/locale/*
只保留需要的语言
- 开发工具(如果不在设备上编译) gcc、g++、make、pkg-config、linux-headers 等都能卸掉。
- 不必要的服务: cups(打印)、avahi-daemon(zeroconf)、bluetooth、whoopsie(报错上传)、snapd 等。
- 图形应用: 如果只是跑 LXDE 桌面,浏览器/文档工具 都可以去掉。
实际操作
优化前系统状态
neardi@RK3562:~$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 14G 4.4G 8.8G 34% /
tmpfs 981M 0 981M 0% /dev/shm
tmpfs 393M 2.1M 391M 1% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
/dev/mmcblk0p7 124M 296K 123M 1% /userdata
tmpfs 197M 60K 197M 1% /run/user/0
tmpfs 197M 80K 196M 1% /run/user/1000
说明
优化前根分区使用4.4GB。
批量清理命令
# 卸载系统服务和大型应用
sudo apt purge snapd apport whoopsie cups* avahi-daemon modemmanager geoclue
sudo apt purge chromium-x11 libwebkit2gtk-4.0-37 libvtk9.1
sudo apt purge ibus ibus-data
sudo apt purge gcc g++ make pkg-config
sudo apt purge man-db manpages
# 清理文档和本地化文件
sudo rm -rf /usr/share/doc/*
sudo rm -rf /usr/share/man/*
sudo rm -rf /usr/share/locale/*
# 清理包管理器缓存
sudo apt-get clean
sudo rm -rf /var/lib/apt/lists/*
sudo rm -rf /var/cache/apt/archives/*
说明
一键执行所有优化操作,包括卸载不必要组件和清理缓存文件。
优化后系统状态
neardi@RK3562:~$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 14G 3.6G 9.6G 28% /
tmpfs 981M 0 981M 0% /dev/shm
tmpfs 393M 2.1M 391M 1% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
/dev/mmcblk0p7 124M 296K 123M 1% /userdata
tmpfs 197M 60K 197M 1% /run/user/0
tmpfs 197M 80K 196M 1% /run/user/1000
说明
优化后根分区使用3.6GB,节省800MB空间。
SDK编译阶段裁剪
修改构建脚本
# 编辑rootfs构建脚本
neardi_3562_linux6.1_next_r5/ubuntu$ nano mk-rootfs.sh
说明
在编译阶段就排除不需要的组件,比运行时删除更彻底。
注释不需要的软件包安装
在./build.sh jammy执行前,注释掉mk-rootfs.sh中不必要的安装包:
#------------------rktoolkit------------
# echo -e "\033[36m Install rktoolkit.................... \033[0m"
# \${APT_INSTALL} /packages/rktoolkit/*.deb
#---------Camera---------
# echo -e "\033[36m Install camera.................... \033[0m"
# \${APT_INSTALL} /packages/neardi/libv4l/*.deb
# \${APT_INSTALL} /packages/libv4l/*.deb
# \${APT_INSTALL} /packages/rkisp/*.deb
# \${APT_INSTALL} /packages/rkaiq/camera_engine_rkaiq_rk3562_arm64.deb
#---------replace 3A configuration files---------
# mv /etc/3A/bin/* /usr/bin/
# mv etc/3A/iqfiles/* /etc/iqfiles/
# rm -rf /etc/3A
说明
根据实际需求选择性注释,如不需要摄像头功能可注释相关组件。