报告称分区已满,但我“看不到”任何罪魁祸首文件

报告称分区已满,但我“看不到”任何罪魁祸首文件

事情是这样的:

--df报告托管我的 /home 目录的分区的使用率为 100%(仅限这些目录)

du--使用(a labaobab或)的工具xdiskusage报告称过多的空间消耗显然与我的用户有关。

du--使用do的工具不是但是,似乎能够找到任何罪魁祸首文件。例如,xdiskusage显示我的个人资料占用了 260GB 以上,但实际上文件中的数据量只有这个数字的一​​半左右(其余部分仅显示为空白空间)。

-- 在 CLI 上运行du只是显示了我上面描述的内容:我的用户的 ~/ 文件夹消耗的磁盘空间是其内部实际文件大小的两倍。

我最喜欢的是:

--这似乎与正常运行时间有关,好像某个进程正在慢慢地用数据填充分区,直到驱动器已满。当我重新启动时 -- 噗!大量可用空间。是否有一个自检工具可以让我确定,例如,哪个进程在任何给定时间正在写入磁盘?

有什么建议么?

答案1

我不知道什么导致了你观察到的行为,但我可以想象如何正在发生:

由于 Unix 文件系统的工作方式,应用程序可以打开一个文件,然后取消链接(即从其父目录中删除文件名条目) - 虽然没有与之关联的文件名,但文件句柄仍然有效,并且应用程序仍然能够写入文件,因为句柄指向的是 inode,而不是文件名。

此类文件会一直存在,直到应用程序将其关闭。我的理解是,这是为应用程序创建“私有”临时文件的常用方法。

要查找此类文件,请使用

lsof +L

这将向您显示每个打开文件的链接数(NLINK 列)-未链接的文件在此处为 0。未链接的文件如下所示:

COMMAND     PID       USER   FD      TYPE             DEVICE SIZE/OFF NLINK       NODE NAME
...
mysqld     1126      mysql   11u      REG                8,1        0     0   33603687 /tmp/ibMlwWQA (deleted)

答案2

令人好奇的是,它会随着时间而变化,然后在您退出时消失。稍后会详细介绍。

您如何以考虑主目录中的隐藏文件的方式运行 du?例如,比较以下两个命令的输出,从您的主目录运行:

(home)$ du -csxk *
(home)$ du -csxk .

“点”形式应该总是更大。大很多,你就知道你的额外空间在隐藏文件中。

再次从 $HOME 尝试以下操作:

(home)$ find . -maxdepth 1 -print0 | xargs -0 du -cskx --exclude .gvfs | sort -rn

(我排除 .gvfs 因为 gnome 在那里挂载远程文件系统。)

这应该返回所有目录(包括隐藏目录)的列表,按大小降序排列。总计行和您的主页 (.) 应该位于顶部,并且由于您正在进行总计,因此总计行应该大约是您主页大小的两倍。

从这里开始,您可以开始深入研究大型目录(我的 .thunderbird 目录很大)寻找罪魁祸首。

现在,谈谈与时间相关的部分。首先,让我们看看您是否可以看到登录时尺寸的变化:

(home)$ watch -n 10 'find . -maxdepth 1 -print0 | xargs -0 du -csxk --exclude .gvfs | sort -rn'

这会每 10 秒运行一次命令,因此你希望看到事情随着时间的推移而发生变化。下一步是尝试查看注销后存储是否恢复。创建第二个管理员用户(你需要 sudo 权限)并通过远程计算机或其他方式以该用户身份登录。以该用户身份,sudo 到 root,然后 cd 进入你的家并再次运行最后一个命令,观察注销和登录时是否有变化。

相关内容