FNOS 升级后释放系统盘空间
- 由于我的 fnos 装在 16GB 傲腾 m10 上面,导致对系统盘空间比较敏感,初次安装后发现系统占用不到 7G,但两次升级后直逼 9GB,发现不太对劲,就去查文件占用。
- 发现存在多个版本 trim 内核文件同时存在,故猜测 fnos 升级后并未清理旧内核导致磁盘空间被持续占用。写了清理旧内核的脚本运行后,占用从 9GB 掉回了 7GB,脚本分享出来供大家参考,各位可以酌情使用。
#!/bin/bash
set -e
echo "=========================================="
echo " 飞牛 NAS 旧内核安全清理脚本"
echo "=========================================="
echo ""
# ========== 自动检测当前内核 ==========
CUR=$(uname -r)
echo "当前运行内核: ${CUR}"
echo ""
# ========== 检测所有已安装的内核包 ==========
OLD_IMAGES=$(dpkg -l 'linux-image-*' 2>/dev/null | awk '/^[ih][ih]/ {print $2}' | grep -v "${CUR}" || true)
if [ -z "$OLD_IMAGES" ]; then
echo "✅ 没有旧内核需要清理,退出。"
exit 0
fi
echo "发现以下旧内核包:"
echo "${OLD_IMAGES}" | sed 's/^/ - /'
echo ""
# ========== 收集所有关联旧包 ==========
OLD_PKGS=""
for img in ${OLD_IMAGES}; do
VER=$(echo "${img}" | sed 's/^linux-image-//')
PKGS=$(dpkg -l "linux-*${VER}*" 2>/dev/null | awk '/^[ih][ih]/ {print $2}' || true)
OLD_PKGS="${OLD_PKGS} ${PKGS}"
done
OLD_PKGS=$(echo "${OLD_PKGS}" | tr ' ' '\n' | sort -u | tr '\n' ' ')
echo "将删除以下所有关联包:"
for p in ${OLD_PKGS}; do
echo " - ${p}"
done
echo ""
# ========== 用户确认 ==========
read -r -p ">>> 确认删除以上包?[y/N] " CONFIRM
echo ""
case "${CONFIRM}" in
[yY]|[yY][eE][sS])
echo "开始清理..."
;;
*)
echo "已取消,退出。"
exit 0
;;
esac
# ========== 1. 修复根目录符号链接 ==========
echo ""
echo ">>> [1/4] 修复根目录符号链接 → ${CUR}"
rm -f /vmlinuz /initrd.img
ln -s boot/vmlinuz-${CUR} /vmlinuz
ln -s boot/initrd.img-${CUR} /initrd.img
echo " 完成:"
ls -l /vmlinuz /initrd.img
echo ""
# ========== 2. 解除 hold 锁定 ==========
echo ">>> [2/4] 解除旧内核 hold 锁定"
for img in ${OLD_IMAGES}; do
apt-mark unhold "${img}" 2>/dev/null && echo " 已解锁: ${img}" || echo " ${img} 未锁定,跳过"
done
echo ""
# ========== 3. purge ==========
echo ">>> [3/4] 执行 apt purge ..."
# shellcheck disable=SC2086
apt purge -y ${OLD_PKGS}
echo ""
echo ">>> 清理孤立依赖"
apt autoremove --purge -y
echo ""
# ========== 4. 验证 ==========
echo ">>> [4/4] 验证清理结果"
echo ""
echo "--- /boot 目录 ---"
ls -lh /boot/
echo ""
echo "--- /usr/lib/modules ---"
ls /usr/lib/modules/
echo ""
echo "--- 根目录链接 ---"
ls -l /vmlinuz /initrd.img
echo ""
REMAIN=$(dpkg -l 'linux-image-*' 2>/dev/null | awk '/^[ih][ih]/ {print $2}' | grep -v "${CUR}" || true)
if [ -z "$REMAIN" ]; then
echo "✅ 旧内核已全部清除"
else
echo "⚠️ 仍有残留: ${REMAIN}"
fi
echo ""
echo "--- 磁盘空间 ---"
df -h /
echo ""
echo "=========================================="
echo " 清理完毕,建议重启: sudo reboot"
echo "=========================================="