我的磁盘空间在哪里?

use*_*241 2 linux hard-drive

我最近遇到了 .xsession-errors 文件的问题 - 它变得非常大(> 90GB)并占用了所有磁盘空间:如何检查 /tmp 中的磁盘空间?. 我用命令清理了它,> .xsession-errors但一个小时后它又变大了。所以我删除了它 ( rm .xsession-errors) - 它有帮助,因为它没有重新创建,但在磁盘空间消失一小时后再次消失 - 现在没有.xsession-errors了,但我不知道内存在哪里:

 df
Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/sda1      106640456 101223392         4 100% /
udev             8166744         8   8166736   1% /dev
tmpfs            3270224       972   3269252   1% /run
none                5120         0      5120   0% /run/lock
none             8175552       152   8175400   1% /run/shm

du -sc * .[^.]* | sort -n
0       initrd.img
0       initrd.img.old
0       proc
0       sys
0       vmlinuz
0       vmlinuz.old
4       cdrom
4       lib64
4       media
4       mnt
4       selinux
8       dev
12      srv
16      lost+found
68      tmp
1124    run
3396    lib32
5164    .rpmdb
5540    root
8888    sbin
9120    bin
17132   etc
106080  opt
116956  boot
861908  lib
3530584 usr
3821836 var
13371260        home
21859112        total
Run Code Online (Sandbox Code Playgroud)

所以大约有 100GB 使用但du -sc * .[^.]* | sort -n在根目录中执行发现只有 ~21GB - 那么什么需要 80GB??如何检查?我怀疑当我删除 `.xsession-errors' 文件时,错误被重定向到其他地方 - 但在哪里?

lsof | ( grep -n 1 '.' ; grep '.xsession-errors' )
    gnome-ses  2748    someuser    2w      REG                8,1 80997797888    4194313 /home/someuser/.xsession-errors (deleted)
    gnome-set  2797    someuser    2w      REG                8,1 80997797888    4194313 /home/someuser/.xsession-errors (deleted)
    compiz     2825    someuser    2w      REG                8,1 80997797888    4194313 /home/someuser/.xsession-errors (deleted)
    vino-serv  2836    someuser    2w      REG                8,1 80997797888    4194313 /home/someuser/.xsession-errors (deleted)
    nm-applet  2837    someuser    2w      REG                8,1 80997797888    4194313 /home/someuser/.xsession-errors (deleted)
    bluetooth  2838    someuser    2w      REG                8,1 80997797888    4194313 /home/someuser/.xsession-errors (deleted)
    gnome-fal  2839    someuser    2w      REG                8,1 80997797888    4194313 /home/someuser/.xsession-errors (deleted)
    polkit-gn  2844    someuser    2w      REG                8,1 80997797888    4194313 /home/someuser/.xsession-errors (deleted)
    nautilus   2851    someuser    2w      REG                8,1 80997797888    4194313 /home/someuser/.xsession-errors (deleted)
    sh         2901    someuser    2w      REG                8,1 80997797888    4194313 /home/someuser/.xsession-errors (deleted)
    gtk-windo  2902    someuser    2w      REG                8,1 80997797888    4194313 /home/someuser/.xsession-errors (deleted)
    gnome-ter  3169    someuser    2w      REG                8,1 80997797888    4194313 /home/someuser/.xsession-errors (deleted)
    gdu-notif  3235    someuser    2w      REG                8,1 80997797888    4194313 /home/someuser/.xsession-errors (deleted)
    telepathy  3253    someuser    2w      REG                8,1 80997797888    4194313 /home/someuser/.xsession-errors (deleted)
    gnome-scr  3276    someuser    2w      REG                8,1 80997797888    4194313 /home/someuser/.xsession-errors (deleted)
    update-no  3508    someuser    2w      REG                8,1 80997797888    4194313 /home/someuser/.xsession-errors (deleted)
    deja-dup-  3964    someuser    2w      REG                8,1 80997797888    4194313 /home/someuser/.xsession-errors (deleted)
    update-ma 25719    someuser    2w      REG                8,1 80997797888    4194313 /home/someuser/.xsession-errors (deleted)
Run Code Online (Sandbox Code Playgroud)

你是对的 - 这个文件 (.xsession-errors) 仍然需要 80GB!问题是很多程序都在使用它 - 我在互联网上查看,很多人都有这个问题(错误),但我发现的最好的解决方案是设置 cron tab 作业以在它太大时截断这个文件......但我不能现在访问文件,因为它已被删除 - 我试图创建另一个 .xsession-errors 文件(非常天真,呵呵;)但它不再是相同的文件......现在我的问题是我如何无法删除这个已删除的文件或至少恢复它然后截断它...

Red*_*ick 8

如果删除打开的文件,则不会删除文件本身,只会删除其名称。只有当文件被写入文件的任何进程关闭时才会回收空间,因此被删除的文件继续存在并增长。

如果一个进程在您“删除”它后仍然打开文件,您可以找出正在使用它的进程:

lsof | ( grep -n 1 '.' ; grep '.xsessions-errors' )
Run Code Online (Sandbox Code Playgroud)

输出将是这样的:

COMMAND                PID   USER  FD   TYPE  DEVICE  SIZE/OFF     NODE  NAME
problematic-program   1234  auser   4u   REG   252,2         0  1967438  /home/auser/.xsession-errors (deleted)
Run Code Online (Sandbox Code Playgroud)

要查看“已删除”文件现在占用了多少空间:

ls -l /proc/1234/fd/4
Run Code Online (Sandbox Code Playgroud)

其中1234是上面显示的PID,4是FD。一旦您知道有问题的程序,您就可以从那里进行故障排除。


使用lsof过识别已.xsession-errors打开写入的程序列表后,您需要关闭并重新启动这些程序中的每一个。如有必要,您可以关闭并重新启动系统,尽管这不是绝对必要的。

如果日志文件增长很快,理想的解决方案是找出原因并解决该问题(例如,缺少某些资源)。但是,如果您愿意,可以使用https://askubuntu.com/questions/93718/how-do-i-prevent-xsession-errors-from-eating-disk-space 中描述的方法将错误重定向到 /dev/null