![报告称分区已满,但我“看不到”任何罪魁祸首文件](https://linux22.com/image/811925/%E6%8A%A5%E5%91%8A%E7%A7%B0%E5%88%86%E5%8C%BA%E5%B7%B2%E6%BB%A1%EF%BC%8C%E4%BD%86%E6%88%91%E2%80%9C%E7%9C%8B%E4%B8%8D%E5%88%B0%E2%80%9D%E4%BB%BB%E4%BD%95%E7%BD%AA%E9%AD%81%E7%A5%B8%E9%A6%96%E6%96%87%E4%BB%B6.png)
事情是这样的:
--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 进入你的家并再次运行最后一个命令,观察注销和登录时是否有变化。