我的磁盘空间在哪里?

我的磁盘空间在哪里?

我最近遇到了 .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

因此,大约使用了 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)

您说得对 - 此文件 (.xsession-errors) 仍然占用 80GB!问题是许多程序都在使用它 - 我在网上查过,很多人都有这个问题 (bug),但我发现最好的解决方案是设置 cron tab 作业,当文件太大时将其截断...但我现在无法访问文件,因为它已被删除 - 我尝试创建另一个 .xsession-errors 文件(非常幼稚 ;),但它不再是同一个文件了...现在我的问题是,我如何才能删除这个已删除的文件,或者至少恢复它以截断它...

答案1

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

如果在您“删除”该文件后,某个进程仍打开该文件,您可以找出哪个进程正在使用该文件:

lsof | ( grep -n 1 '.' ; grep '.xsessions-errors' )

输出将会像这样:

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)

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

ls -l /proc/1234/fd/4

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


用来lsof确定已打开可写入的程序列表后.xsession-errors,您需要关闭并重新启动每个程序。如有必要,您可以关闭并重新启动系统,尽管这并不是必需的。

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

相关内容