磁盘缓慢填满,但没有可见的文件大小更改

DF

Filesystem 1K-blocks Used Available Use% Mounted on /dev/vda1 30830588 22454332 6787120 77% / none 4 0 4 0% /sys/fs/cgroup udev 1014124 4 1014120 1% /dev tmpfs 204996 336 204660 1% /run none 5120 0 5120 0% /run/lock none 1024976 0 1024976 0% /run/shm none 102400 0 102400 0% /run/user 

昨天77%仅为60%,几天内将达到100%。

我一直在监视filessizes一段时间:

 sudo du -sch /* 9.6M /bin 65M /boot 224K /build 4.0K /dev 6.5M /etc 111M /home 0 /initrd.img 0 /initrd.img.old 483M /lib 4.0K /lib64 16K /lost+found 8.0K /media 4.0K /mnt 4.0K /opt du: cannot access '/proc/21705/task/21705/fd/4': No such file or directory du: cannot access '/proc/21705/task/21705/fdinfo/4': No such file or directory du: cannot access '/proc/21705/fd/4': No such file or directory du: cannot access '/proc/21705/fdinfo/4': No such file or directory 0 /proc 21M /root 336K /run 12M /sbin 8.0K /srv 4.1G /swapfile 0 /sys 4.0K /tmp 1.1G /usr 7.4G /var 0 /vmlinuz 0 /vmlinuz.old 14G total 

它每天都给我(或多或少)相同的数字。 14G总量不到磁盘大小的一半。 其余的去哪儿了?

我的Linux知识不会更深入。

文件是否可能不显示在这里? 是否可以以任何其他方式分配空间?

如果磁盘空间有无形的增长,可能的罪魁祸首就是删除文件。 在Windows中,如果您尝试删除由某个东西打开的文件,则会出现错误。 在Linux中,该文件将被标记为已删除,但数据将保留,直到应用程序离开。 在某些情况下,这可以作为一种简洁的方式来清理自己 – 应用程序崩溃不会阻止临时文件被清除。

要查看已删除的仍在使用的文件:

 lsof -b 2>/dev/null | grep deleted 

您可能有大量已删除的文件 – 这本身不是问题。 单个删除的文件变大是一个问题。

重启应修复此问题,但如果您不想重新启动,请检查所涉及的应用程序( lsof输出中的第一列)并重新启动或关闭合理的应用程序。

如果你看到类似的东西:

 zsh 1724 muru txt REG 8,17 771448 1591515 /usr/bin/zsh (deleted) 

如果应用程序和已删除的文件相同,则可能意味着应用程序已升级。 您可以忽略它们作为大磁盘使用的来源(但您仍应重新启动程序以便应用错误修复)。

/dev/shm中的文件是共享内存对象,并且不占用磁盘上的大量空间(我认为最多为inode编号)。 它们也可以被安全地忽略。 名为vteXXXXXX的文件是来自基于VTE的终端仿真器(如GNOME终端,终结者等)的日志文件。 这些可能很大,如果你有一个终端窗口打开,有很多 (我的意思是很多 )的东西输出。

为了增加muru的优秀答案:

  • df显示磁盘上的大小,
  • 和du显示文件内容的总大小。

也许你没有看到du是许多很多小文件的外观……(看看df -i的最后一列,看看inode(即文件)的数量是否也增加了很多加class)

如果您碰巧拥有1’000’000(1百万)个小字节的1字节文件, du将计算为1’000’000字节总数,让我们说1Mb(…纯粹主义者,请不要畏缩)

但在磁盘上,每个文件都由两件事组成:

  • 1 inode(指向文件的数据),并且inode本身可以是16kb(!),
  • 并且每个文件的数据(=文件的内容)都放在磁盘块上,而这些块不能包含多个文件的数据(通常是……),所以你的1字节数据将占用至少1个块

因此,一百万个文件的1字节文件将占用1'000'000'000 * size_of_a_block数据的总空间,加上1'000'000'000 * size_of_an_inode的inode大小……这可以达到几Gb的磁盘用于100万“1字节”文件。

如果你有1024字节的块,另有256字节的inode大小,你的1’000’000文件将被报告为du大约1Mb,但在磁盘上将大约为1.25Gb(如df )! (如果每个inode也必须在1个专用磁盘块上,甚至2Gb ……我不知道是不是这样)