起因

在整理PVE的Linux小鸡时候发现有一台打包机硬盘分配了40G,但使用率已经达到了88%。

虽然这台打包机主要打包node和rust、java项目,尤其前两个是我知道的磁盘占用大户,但本身我也没有几个项目在上边打包,按理不会占用30多G的空间。

解决步骤

先执行df -h查看磁盘使用情况,确实已经占用了比较多的磁盘空间

root@build:~# df -h
Filesystem                 Size  Used Avail Use% Mounted on
/dev/loop10                 40G   35G  2.7G  93% /
none                       492K  4.0K  488K   1% /dev
tmpfs                       24G     0   24G   0% /dev/shm
tmpfs                      9.4G  164K  9.4G   1% /run
tmpfs                      5.0M     0  5.0M   0% /run/lock
tmpfs                       24G  6.5M   24G   1% /tmp
tmpfs                      1.0M     0  1.0M   0% /run/credentials/systemd-journald.service
tmpfs                      1.0M     0  1.0M   0% /run/credentials/systemd-networkd.service
tmpfs                      1.0M     0  1.0M   0% /run/credentials/container-getty@2.service
tmpfs                      1.0M     0  1.0M   0% /run/credentials/container-getty@1.service
tmpfs                      1.0M     0  1.0M   0% /run/credentials/console-getty.service
tmpfs                      4.7G   20K  4.7G   1% /run/user/0

可以看到/根目录的使用率实际已经达到了93%,而且剩余空间只有2.7G。

然后执行以下命令输出磁盘占用的具体明细

echo "===== root ====="
du -xhd1 / 2>/dev/null | sort -h

echo "===== var ====="
du -xhd1 /var 2>/dev/null | sort -h

echo "===== root home ====="
du -xhd1 /root 2>/dev/null | sort -h

echo "===== largest files ====="
find / -xdev -type f -size +500M -printf '%s %p\n' 2>/dev/null \
  | sort -nr \
  | head -30 \
  | numfmt --field=1 --to=iec

执行命令后输出的结果为:

===== root =====
4.0K    /boot
4.0K    /home
4.0K    /media
4.0K    /mnt
4.0K    /srv
16K     /lost+found
16K     /opt
4.8M    /etc
2.7G    /usr
10G     /var
22G     /root
35G     /
===== var =====
4.0K    /var/local
4.0K    /var/opt
12K     /var/tmp
44K     /var/mail
544K    /var/spool
2.4M    /var/backups
385M    /var/cache
1.2G    /var/log
8.6G    /var/lib
10G     /var
===== root home =====
4.0K    /root/.m2
8.0K    /root/rust-docker-base
8.0K    /root/.vim
8.0K    /root/wechat-jar
12K     /root/book_env_backup
28K     /root/.config
92K     /root/.ssh
152K    /root/protoc
188K    /root/upx-5.0.0-amd64_linux
460K    /root/.docker
648K    /root/.tmux
2.2M    /root/couxie-web
9.7M    /root/tshark-test
36M     /root/material
48M     /root/.local
72M     /root/exe
85M     /root/.npm
214M    /root/vitual
281M    /root/clash-test
314M    /root/reverse-tunnel-au92
346M    /root/rathole
412M    /root/jet-helper
523M    /root/mihomo-rust
589M    /root/couxie-jar
745M    /root/server-rust
887M    /root/changdu
1.3G    /root/.cargo
1.4G    /root/au92-blog
1.6G    /root/.rustup
1.7G    /root/csc_rust_service
2.2G    /root/couxie-web-axum
2.4G    /root/.cache
2.7G    /root/rust
4.7G    /root/book
22G     /root
===== largest files =====

从结果中除了几个rust项目明显占用很大空间外,/var/log目录下的日志文件也占用了1.2G的空间。

先执行journalctl --vacuum-size=200M将日志限制一下,不要超过200M(酌情),然后修改vim /etc/systemd/journald.conf,永久限制日志大小:

SystemMaxUse=200M
SystemKeepFree=1G

修改完成后执行systemctl restart systemd-journald重启日志服务

除了日志文件外/var/lib目录也占用了8.6G的空间,因为这台机器会打包docker镜像文件给k3s服务器使用,所以执行docker builder prune -a清理docker构建缓存数据进一步释放磁盘空间。

效果

简单处理后释放了大概10G的空间。