树莓派4B 的根目录空间满了。一个原因是 TF 卡太小了,只有 16G ,装了个 texlive 就要用掉大概 4G 左右,可能该换个 32G 的 TF 卡了。
排查
挂载点
一开始忘记了检查 /tmp
,只看到 /usr/
,/var
占空间比较大,但是加起来也只有 8G,不至于占满空间,因此想到可能是挂载点文件夹在挂载之前就有文件?但是挂载点都在用着,不方便直接 umount
。
查看挂载点被那些进程使用有两种方法,lsof
和 fuser
,示例如下:
root@ubuntu:/mnt/root# fuser -m /data
/data: 1500 1501 1502 1503 1504 4737 4739 4740 4741 4818 7673
root@ubuntu:/mnt/root# lsof /data
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
...
nginx 1504 www-data 8w REG 0,46 21527 595 /data/log/nginx/default_error.log
smbd 4737 root 2w REG 0,46 6262 310 /data/log/samba/log.smbd
smbd 4737 root 38w REG 0,46 6262 310 /data/log/samba/log.smbd
想找到一种不用 umount
就能查看挂载点原始文件大小的方法。搜索关键词 delete file in mount point after mount
,在参考资料1 中找到答案:
mkdir /mnt/root
mount --bind / /mnt/root
This will mount your root partition in /mnt/root. Current mountpoints are not affected, so when looking in /mnt/root, you will see the original directory contents.
askubuntu.com
临时目录
按照上节中的方法操作,发现挂载点并没有占空间,然后执行 du -sh /*
才发现 /tmp
很大,这才想起来是 gs
命令生成的临时文件占了很大的磁盘空间,执行 gs
命令时忘记了加环境变量 TEMP
,即使用 TEMP=/nas/tmp gs ....
来执行 gs
命令。
以下代码可以看到 gs
临时文件是很大的。
197M /nas/tmp/gs_qT8hZ6
360K /nas/tmp/gs_qZ2IWS
103M /nas/tmp/gs_qj4ZAe
293M /nas/tmp/gs_qp7Ba7
336M /nas/tmp/gs_qtZhXz
144K /nas/tmp/gs_quxD0Q
283M /nas/tmp/gs_qvrfHF
参考资料
1. https://askubuntu.com/questions/1161537/how-to-remove-files-hidden-under-tmp-mountpoint
`dd bs=8k count=4k if=/dev/zero of=test.log conv=fdatasync`
> 加入这个参数后,dd命令执行到最后会真正执行一次“同步(sync)”操作,,这样算出来的时间才是比较符合实际使用结果的。conv=fdatasync表示只把文件的“数据”写入磁盘,fsync 与fdatasync相差不大。(重要,最有参考价值)
> https://www.iteye.com/blog/elf8848-2089055