磁盘已满但找不到大文件

磁盘已满但找不到大文件

我正在运行一个 bash 脚本,它在 tmp 目录中创建了一个 14G 的文件,我删除了它,但仍然找不到很大的目录或文件。

我对 df -h 的输出


Filesystem      Size  Used Avail Use% Mounted on
udev            474M     0  474M   0% /dev
tmpfs            99M   11M   88M  11% /run
/dev/vda1        25G   25G     0 100% /
tmpfs           491M     0  491M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           491M     0  491M   0% /sys/fs/cgroup
/dev/vda15      105M  3.9M  101M   4% /boot/efi
/dev/loop0       90M   90M     0 100% /snap/core/7917
/dev/loop1       55M   55M     0 100% /snap/lxd/12211
/dev/loop2       94M   94M     0 100% /snap/core/8935
/dev/loop3       68M   68M     0 100% /snap/lxd/14194
tmpfs            99M     0   99M   0% /run/user/0
/dev/loop4       55M   55M     0 100% /snap/core18/1705
/dev/loop5       49M   49M     0 100% /snap/gtk-common-themes/1474
/dev/loop6      153M  153M     0 100% /snap/chromium/1071
tmpfs            99M     0   99M   0% /run/user/1000

我在 / 目录中的 du -sh 的输出

du: cannot access './proc/19935/task/19935/fd/4': No such file or directory
du: cannot access './proc/19935/task/19935/fdinfo/4': No such file or directory
du: cannot access './proc/19935/fd/3': No such file or directory
du: cannot access './proc/19935/fdinfo/3': No such file or directory
4.7G    .

由于磁盘已满,我无法安装 ncdu 或任何其他工具,考虑到 du -sh 之后的汇总大小,25GB 中的剩余空间在哪里

我的 lsb-release

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=19.10
DISTRIB_CODENAME=eoan
DISTRIB_DESCRIPTION="Ubuntu 19.10"

du -sh /*/ 的输出

119M    /bin/
97M /boot/
0   /dev/
5.9M    /etc/
212M    /home/
682M    /lib/
4.0K    /lib32/
4.0K    /lib64/
4.0K    /libx32/
16K /lost+found/
4.0K    /media/
4.0K    /mnt/
4.0K    /opt/
du: cannot access '/proc/20791/task/20791/fd/4': No such file or directory
du: cannot access '/proc/20791/task/20791/fdinfo/4': No such file or directory
du: cannot access '/proc/20791/fd/3': No such file or directory
du: cannot access '/proc/20791/fdinfo/3': No such file or directory
0   /proc/
72K /root/
11M /run/
30M /sbin/
1.9G    /snap/
4.0K    /srv/
0   /sys/
17M /tmp/
845M    /usr/
768M    /var/

答案1

POSIX 标准允许你在文件仍处于打开状态时删除它。只有当打开文件的所有进程都关闭时,文件才会被真正删除

解除链接()函数应删除指向文件的链接。如果路径名为符号链接,解除链接()应删除由路径命名的符号链接,并且不会影响由符号链接的内容命名的任何文件或目录。否则,解除链接()应删除路径指向的路径名命名的链接,并减少该链接引用的文件的链接数。

当文件的链接数变为 0 且没有进程打开该文件时,应释放该文件占用的空间,并且该文件将不再可访问。如果在最后一个链接被删除时有一个或多个进程打开该文件,则应在删除链接之前删除该链接解除链接()返回,但文件内容的删除将被推迟,直到对该文件的所有引用都关闭为止。

https://pubs.opengroup.org/onlinepubs/009695399/functions/unlink.html

因此,如果脚本中正在运行的进程仍在打开文件,则空间仍会被消耗,并且您无法观察到它,直到进程关闭文件或被终止

答案2

那么类似这样的情况怎么样:

du -h -t 500M -a /

用法:

-h, --human-readable
              print sizes in human readable format (e.g., 1K 234M 2G)

 -t, --threshold=SIZE
              exclude  entries  smaller  than  SIZE  if  positive,  or entries
              greater than SIZE if negative

-a, --all
              write counts for all files, not just directories

相关内容