什么在吞噬我的磁盘空间?


13

我正在运行Linux Mint 14 Nadia。Linux分区具有10G。系统启动时,du报告使用率达到80%。然后,使用率将缓慢增长,直到达到100%,然后系统将无法使用。(它可能会发生几天或几周)。重新启动后,使用率将重置为80%。

最奇怪的是,du没有任何变化。

这些命令的输出(省略Windows和外部驱动器分区):

# --- Just after reboot ---

$ df -h     
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.8G  7.3G  2.0G  80% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            428M  292K  428M   1% /dev
tmpfs            88M  1.3M   87M   2% /run
none            5.0M     0  5.0M   0% /run/lock
none            437M  288K  437M   1% /run/shm
none            100M   12K  100M   1% /run/user

$ sudo du -x   -d1 -h /
186M    /opt
512M    /var
11M /sbin
556K    /root
1.3G    /home
613M    /lib
8.0K    /media
4.6G    /usr
16K /lost+found
111M    /boot
39M /etc
4.0K    /mnt
60K /tmp
9.1M    /bin
4.0K    /srv
7.3G    /            # <-- note this


# --- After some time ---

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.8G  9.1G  199M  98% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            428M  292K  428M   1% /dev
tmpfs            88M  1.3M   87M   2% /run
none            5.0M     0  5.0M   0% /run/lock
none            437M   27M  411M   7% /run/shm
none            100M   28K  100M   1% /run/user

$  sudo du -x   -d1 -h /
186M    /opt
511M    /var
11M /sbin
556K    /root
1.4G    /home
613M    /lib
8.0K    /media
4.6G    /usr
16K /lost+found
111M    /boot
39M /etc
4.0K    /mnt
520K    /tmp
9.1M    /bin
4.0K    /srv
7.3G    /              # <-- note this

(注意:我使用休眠模式。休眠模式后,使用率保持不变,并且在重新启动后将其重置为80%。)

我如何跟踪吃什么空间?

我已经读过这个问题。我仍然在黑暗中。我如何找出哪个程序负责此行为?

编辑后:找到它。该空间由内核日志声明,该日志由看到dmesg。它满了,因为我的机器每秒产生5次错误。(与该bug相关。)让未来的读者遇到类似的问题-慢慢填充看不见的磁盘空间du-不要忘记尝试dmesg寻找原因。


1
与查找ncdu普通du文件相比,我更喜欢平原。它确实会扫描整个目录树,然后再让您执行任何操作。您可能要通过一个特定的路径(例如ncdu /var,甚至只是ncdu ~
Blacklight Shining 2014年

这个站点上已经有几个不错的 答案
Sparhawk

Answers:


15

重复执行

sudo du -x   -d1 -h /

(在目录树下)应该告诉您占用空间的位置。这可能无需进一步调查就可以解释是哪个应用程序引起了该问题。

看不见的文件

如果du未显示这些文件,则其中一种可能性是删除文件。在文件仍在使用中时,可以删除文件(或更确切地说:其名称,即其在目录中的条目)。只要有指向该文件的有效文件描述符,它就会覆盖卷上的空间(如果它不是空文件...)。

cat >file &
ls -l file
rm file
ls -l file
# PID of cat is 19834
ls -l /proc/19834/fd
lrwx------ 1 hl hauke 64 11. Feb 19:16 0 -> /dev/pts/0
l-wx------ 1 hl hauke 64 11. Feb 19:16 1 -> /crypto/home/hl/tmp/file (deleted)
lrwx------ 1 hl hauke 64 11. Feb 19:15 2 -> /dev/pts/0

您可以使用以下文件找到这些文件find

find /proc/ -mindepth 3 -maxdepth 3 \
-regex '/proc/[1-9][0-9]*/fd/[1-9][0-9]*' -type l -lname '*(deleted)' \
-printf '%p\n     %l\n' 2>/dev/null

可能是一个单一的大文件或一堆较小的文件,这些文件会引起您的问题。现在,我的系统上大约有30个这样的文件(仅属于五个进程)。ls -l会显示这些文件的大小,但似乎无法从中获取此值find

终止进程后,空间将df再次可用于文件系统()。


这没有解决我的问题。 du报告所消耗的空间没有变化:开始时为7.3G,经过一段时间后为7.3G。 df报告说在启动时免费提供7.3G,随着时间的流逝最多可提供10G。我找不到的问题du
2014年

@Arry确实,我读得太快了。
Hauke Laging

8

使用类似

lsof -s | grep deleted | sort -k 8

查看哪些进程使已删除文件保持打开状态。重要字段是第二个(PID)和第八个(倒数第三;文件大小)。

(请注意重复的行,不要对它们重复计数。请检查PID和文件路径(最后一个字段)或inode编号(倒数第二个字段)。)

此后,如果您发现可能是罪魁祸首的过程,我们将看到如何解决它。


很好的建议,但在我的机器上,此命令仅报告2个大小为2k的打开的已删除文件,这与某些杂散过程随时间消耗的2.7G相差甚远。
Arry 2014年

这是一个很好的建议,确实帮助我解决了与上级问题类似的问题。我在df和du命令之间存在巨大差异。在我的特定情况下,我有轮换日志和转发日志的服务(在此示例中为logstash)。即使删除了logstash服务,循环日志仍保持打开状态。这导致了du和df之间的差异。重新启动Logstash服务后,磁盘空间将正确显示。
aemus 2015年

我有一个过程,它会无限期增长并最终填满我的磁盘,只写一个追加文件。然后,我决定rm该文件,但是该进程没有关闭其文件描述符,因此仍在使用它。重新启动过程并限制AOF大小可以解决我的问题。
aviggiano

值得注意的是,这需要root特权。另外,我过去sudo lsof -s | grep deleted | sort -hk7经常进行数值排序。如果没有-h,sort会用数字来处理有趣的词汇。
德里克(Derek),

这是很棒的东西。上投
技术人员

4
find / -size +10000k -print0 | xargs -0 ls -l -h

使用该找什么递归从超过10MB +填充更多/(根),并有很多细节与显示它ls -lxargs。例如,如果您写入1000000(额外的2个零),则可以获得1GB +。

du / -h --max-depth=1 | sort -h

您也可以使用du,然后手动对其进行挖掘。


1

每当发生这种情况时,我总是将注意力集中在某些子目录上。考虑到这一点,大多数Linux发行版都遵循FHS结构。

首先查看/var,其次/home

$ sudo du -x -d1 -h /var  | sort -hr`

$ sudo du -x -d1 -h /home | sort -hr`

您也可以将注意力集中在这两个位置中的子目录上。在您浏览/root完所有内容后,我通常会移至,最后移至/

如果是基于Red Hat的发行版,则yum用于执行更新的缓存可能会占用大量空间。您可以使用以下命令清除它:

$ yum clean packages

使用的其他发行版apt可以执行类似的操作apt-get clean

我还将在/目录顶部运行此命令,该位置有时可能成为流浪日志文件的源。

$ ls -la /

要特别注意点文件!.blah例如,事物名为。



0

我的情况差不多。

就我而言,原因是VMware。同一台计算机上的其他VMware之一占用了磁盘空间。这就是为什么我的磁盘空间使用率为100%。

从邻居的VMware删除大文件后,它可以正常工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.