Fork me on GitHub

根目录写满"/usr/local/bin/*.sh"文件写入报错E514: write error (file system full?)

盘满写入错误

是 Vim(或其他编辑器)在保存文件时提示:写入失败,可能是文件系统满了。

#查看/使用率
df -h

/ 或 /usr 显示 100%,那就证实是“盘满”。
image

应急解决办法

# 查看/var/log日志文件夹大小
sudo du -sh /var/log/
#一刀清理
sudo truncate -s 0 /var/log/syslog
sudo truncate -s 0 /var/log/messages
sudo journalctl --vacuum-time=3d  # 仅保留近3天日志

# 删除临时缓存文件
sudo rm -rf /var/cache/*
sudo rm -rf /tmp/*

# 查找占用空间最大目录
sudo du -ahx / | sort -rh | head -20

# 列出 / 根目录下的文件(非文件夹)
ls -lh / | grep -v "^d"

其他清理

清理 apt 或 opkg 缓存(取决于系统)

sudo apt clean       # Debian/Ubuntu
sudo opkg clean      # QNAP 常见

docker清理

能把不用的镜像、容器、网络和卷全清掉!

docker system prune -af --volumes

找找隐藏的大文件(比如临时下载、crash dump)

sudo find / -type f -size +100M -exec ls -lh {} \;

定期清理日志

vi /usr/local/bin/cleanup_logs.sh

#!/bin/sh

echo "🧼 开始清理日志..."

before=$(du -sh /var/log | awk '{print $1}')

# 清空 .log/.err/.out
find /var/log -type f \( -name "*.log" -o -name "*.err" -o -name "*.out" \) -exec sh -c ': > "$0"' {} \;

# 删除轮换和压缩日志
find /var/log -type f \( -name "*.gz" -o -name "*.1" -o -regex ".*\.[0-9]+" \) -exec rm -f {} \;

after=$(du -sh /var/log | awk '{print $1}')

echo "✅ 清理完成:"
echo "    清理前:$before"
echo "    清理后:$after"
# 赋予执行权限
chmod +x /usr/local/bin/cleanup_logs.sh
# QNAP编辑crontab文件
vi /etc/config/crontab
# 每周三(Wednesday)凌晨 3 点执行脚本
0 3 * * 3 /usr/local/bin/cleanup_logs.sh >/dev/null 2>&1

image

威联通根分区释放方案:挂载共享空间释放根目录

适用场景

根目录爆满(/ 只有几百 MB)
想快速释放空间,不想重装系统
能访问 QNAP 的终端(SSH 登录)

QNAP 默认数据存储位置通常是 /share/CACHEDEV1_DATA/,你可以这样确认:

df -h

查看/使用以及/share/CACHEDEV1_DATA空间是否充足。
查看根目录下哪些文件夹

for dir in /*; do
  mountpoint -q "$dir" && echo "$dir is a mount point" || echo "$dir is using rootfs"
done

哪些目录可以迁移出来,哪些目录只是挂载点(不占用根空间)
image

找出真正在占空间的子目录

# 只统计根分区自身使用的目录空间,不包含其他挂载上来的子分区
du -h --max-depth=1 --one-file-system / 2>/dev/null | sort -hr
#QNAP 固件/日志/配置重灾区
du -h --max-depth=1 /mnt/HDA_ROOT
#日志或服务文件删除了但仍被进程占用,导致空间没释放
lsof | grep deleted | grep -E '/(mnt|var|opt|tmp|usr|log)'

image

mkdir -p /share/CACHEDEV1_DATA/opt      # 创建目标目录
cp -a /opt/* /share/CACHEDEV1_DATA/opt/ # 拷贝内容
mv /opt /opt.bak                         # 备份原目录
ln -s /share/CACHEDEV1_DATA/opt /opt    # 创建软链接

QNAP检测根目录可迁移目录check_movable_dirs.sh

#!/bin/sh

echo "=== 根目录空间使用情况 ==="
du -h --max-depth=1 --one-file-system / 2>/dev/null | sort -hr

echo "\n=== 建议迁移的目录(>20M) ==="

check_movable() {
  path="$1"
  size=$(du -sm "$path" 2>/dev/null | awk '{print $1}')
  if [ "$size" -gt 20 ]; then
    case "$path" in
      /home|/usr/local|/var/log|/var/tmp|/var/cache|/opt|/root)
        echo "[✔] $path  - ${size}MB  ✅ 推荐迁移"
        ;;
      /lib*|/etc|/bin|/sbin|/dev|/proc|/sys|/tmp)
        echo "[✘] $path  - ${size}MB  ❌ 系统目录,建议保留"
        ;;
      *)
        echo "[?] $path  - ${size}MB  🤔 请手动判断"
        ;;
    esac
  fi
}

# 扫描一级目录
for dir in /*; do
  [ -d "$dir" ] || continue
  mountpoint -q "$dir" && continue  # 跳过挂载点
  check_movable "$dir"
done
posted @ 2025-04-22 21:26  秋夜雨巷  阅读(244)  评论(0)    收藏  举报