什么在吃我的磁盘空间?

Arr*_*rry 15 disk-usage linux-mint

我正在运行 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
Run Code Online (Sandbox Code Playgroud)

(注:我使用的是休眠模式,休眠后使用率保持不变,重启后重置为80%。)

我如何跟踪占用空间的内容?

我读过这个问题。我还在黑暗中。如何找出导致此行为的程序?

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

Hau*_*ing 20

重复执行

sudo du -x   -d1 -h /
Run Code Online (Sandbox Code Playgroud)

(在目录树下)应该告诉您空间消耗在哪里。这可能无需进一步调查就可以解释是哪个应用程序导致了这种情况。

隐形文件

如果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
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令找到这些文件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
Run Code Online (Sandbox Code Playgroud)

它可能是一个单独的大文件或一堆较小的文件导致您的问题。现在我的系统上大约有 30 个这样的文件(只属于五个进程)。ls -l显示这些文件的大小,但似乎不可能从find.

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


ang*_*gus 10

使用类似的东西

lsof -s | grep deleted | sort -k 8
Run Code Online (Sandbox Code Playgroud)

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

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

之后,如果您发现一个可能是罪魁祸首的进程,我们可以看看如何修复它。


Adi*_*sak 4

find / -size +10000k -print0 | xargs -0 ls -l -h
Run Code Online (Sandbox Code Playgroud)

使用它递归地查找从 (root) 填充超过 10MB+ 的内容/,并使用ls -lin来显示它的大量详细信息xargs。例如,如果您写入 1000000(2 个额外的零),您可以获得 1GB+。

du / -h --max-depth=1 | sort -h
Run Code Online (Sandbox Code Playgroud)

您也可以使用 du,然后手动挖掘它。


归档时间:

查看次数:

69511 次

最近记录:

4 年,7 月 前