如何删除隐藏在挂载点下的文件

树莓派4B 的根目录空间满了。一个原因是 TF 卡太小了,只有 16G ,装了个 texlive 就要用掉大概 4G 左右,可能该换个 32G 的 TF 卡了。

排查

挂载点

一开始忘记了检查 /tmp,只看到 /usr//var 占空间比较大,但是加起来也只有 8G,不至于占满空间,因此想到可能是挂载点文件夹在挂载之前就有文件?但是挂载点都在用着,不方便直接 umount

查看挂载点被那些进程使用有两种方法,lsoffuser,示例如下:

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

One thought on “如何删除隐藏在挂载点下的文件

  1. `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

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注