如何阻止这种不断的可用空间损失?


15

我像往常一样运行Ubuntu,突然间出现一个对话框,说我只剩下1.2 GB的可用空间。一个小时前,我有30 GB的可用空间。

我删除了一些东西,并将可用空间提高到25 GB。但它继续减少。我尝试删除旧的日志文件并截断​​日志文件等,并且这种情况还在继续减少!

我尝试使用磁盘分析器来查找所有这些可用空间损失来自何处,并且没有用,因为它显示了所有应有的状态。我重新启动,最终Ubuntu进行了磁盘检查,以某种方式将可用空间恢复到40 GB,但仍每天减少约10 GB。我继续尝试寻找释放空间的新方法,但这就像减少磁盘空间的自动化过程一样,我无法停止。

我不知道该怎么办。如何找到原因,并阻止可用空间减少?

这是来自的输出sudo du -sh /var/* ~/.xsession-errors

13M /var/backups
204M    /var/cache
112M    /var/crash
4.0K    /var/games
503M    /var/lib
4.0K    /var/local
0       /var/lock
9.5G    /var/log
85M     /var/mail
4.0K    /var/metrics
24K     /var/opt
0       /var/run
1.7M    /var/spool
391M    /var/tmp
11G     /var/tvmobili
20K     /var/www
224K    /home/school/.xsession-errors

2
您可以编辑帖子以附加sudo du -sh /var/* ~/.xsession-errors请的输出吗?(如果有些愚蠢的话,我希望这两个地方会爆炸)。否则,我在Eliah工作-这表明磁盘有问题。认真对待
奥利(Oli)

Answers:


26

您有一些失控的日志。不必每天像疯一样删除文件,而是找到一个或多个快速增长的文件,然后向内以调查可能造成此问题的原因。也许某些程序在循环中记录某些情况。禁用该程序,禁用其日志记录或尝试解决其抱怨的问题。

如果文件在您的眼前增长,并且您不知道正在写入哪个程序,则可以轻松找到。这是一个例子。谁/var/log/syslog开的?我们使用以下fuser命令:

# fuser /var/log/syslog
/var/log/syslog:      602

只有一个进程/var/log/syslog打开。是过程602。那是什么?让我们不要理会psgrep,而/proc直接看一下文件系统:

# ls -l /proc/602/exe
lrwxrwxrwx 1 root root 0 Mar 29 17:45 /proc/602/exe -> /usr/sbin/rsyslogd

啊哈,是rsyslogd。我们并不感到惊讶,rsyslogd/var/log/syslog/开放。

不能保证此方法有效。原因是程序不必一定要打开文件就可以对其进行写入。假设您有一个打开文件,附加到文件然后关闭文件的过程。您的调查会有些困难。您可以运行fuser很多次,直到偶然抓住“红色手”的过程。该过程本身可能会迅速进入和退出。另一个问题是,可能有多个进程打开了文件,但是只有一个进程使文件更大。在这种情况下,您可以跟踪他们的系统调用。

# fuser /var/log/huge-annoying-file
/var/log/huge-annoying-file:   1234 23459

糟糕!打开了两个进程:1234和23459。让我们看看它们在做什么:

# strace -p 1234
Process 1234 attached - interrupt to quit
select(1, NULL, NULL, NULL, {9, 922666}

它什么也没做,只是阻塞了select通话。Ctrl-C断开跟踪:

select(1, NULL, NULL, NULL, {9, 922666}^C <unfinished ...>

检查下一个:

# strace -p 23459
write(5, "Useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
^C

糟糕,您正在不断写作。一定是坏东西。我们甚至可以检查该进程正在写入的文件描述符5实际上是否是大文件:

# ls -l /proc/23459/fd/5
lr-x------ 1 root root 64 Apr  3 23:39 /proc/23459/fd/5 -> /var/log/huge-annoying-file

我不怀疑您的文件系统已损坏,但是要强制进行全面检查,则不必引导DVD。

首先,查看文件系统的最大安装数设置。使用df命令标识您的分区。我在Ubuntu系统上的示例在这里:

# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda1       18062108 5499320  11645284  33% /
udev              392152       4    392148   1% /dev
tmpfs             159768     768    159000   1% /run
none                5120       0      5120   0% /run/lock
none              399416     200    399216   1% /run/shm
/dev/sr0           43668   43668         0 100% /media/VBOXADDITIONS_4.1.4_74291

您可以看到/文件系统已安装在上/dev/sda1。所以/dev/sda1是根分区(和在该特定系统中唯一的分区)的存储装置。

让我们看一下该文件系统的一些属性。即使已安装,这也是安全的。该命令产生大量输出。这是节选:

$ dumpe2fs /dev/sda1
dumpe2fs 1.42 (29-Nov-2011)
Filesystem volume name:   <none>
Last mounted on:          /
[ ... SNIP ... ]
Last mount time:          Fri Mar 29 17:45:18 2013
Last write time:          Tue Mar  5 09:08:03 2013
Mount count:              22
Maximum mount count:      22
[ ... SNIP ... ]

嘿,坐骑人数等于最大坐骑人数。下次我重新启动时,将进行文件系统检查。重要的是安装数是一个正值。如果您的值为零,请使用将其更改为某个正值,例如22 tune2fs -c 22 /dev/whatever。零表示无论分区安装了多少次,都不会强制执行检查。很少重启的系统此处的值应较低。每年停机一次的服务器可能在每次重新引导时都使用fsck。您还可以设置基于日期的检查间隔。

现在要强制检查,您可以覆盖实际计数以大于或等于最大值,然后重新启动。这是用资本完成的Ctune2fs -C 1234 /dev/whatever。现在,该分区看起来好像已经被挂载了1234次,没有检查,这大于一位或两位数的最大值。


非常有用,但问题已解决,这是防火墙编写了巨大的日志文件
askcompu 2013年

2
看,我怀疑。没有神秘的磁盘损坏会在空间上造成混乱。我的意思是,这可以解释一个孤立的事件,但是一旦修复,就应该修复。而且驱动器出现故障,您可能会在内核日志和紧急情况中遇到一些错误。
卡兹(Kaz)

是的,我认为它不是驱动器,SMART测试表明它是旧驱动器,但仍可正常工作
Askcompu 2013年

fsck所有文件系统的一种更简单的方法是运行'sudo touch / forcefsck;。sudo / sbin / shutdown -r now'。
Blair Zajac

3

磁盘检查释放了一些空间,表明此问题(或部分问题)可能是由于文件系统损坏引起的。如果是这种情况,那么您应该可以通过扫描和修复文件系统来释放更多空间。但是,如果永久性地发生损坏(可能是,也可能不是),则通常意味着硬盘驱动器即将耗尽。如果您的备份(文档和其他任何难以替换的重要文件)尚未完全更新,请立即备份所有重要信息!

要检查和修复磁盘,无法将其装入(至少不能读写)。因此,您应该从实时环境(实时CD / DVD或USB)运行修复实用程序。首先,您必须找出包含文件的分区的设备名称。

因此,在安装的系统中,运行:

mount | grep ' on / '

(确保在/和之间包含空格'。)

您会得到类似的信息:

/dev/sda8 on / type ext4 (rw,errors=remount-ro)

在本on机的示例中,- 之前的文本/dev/sda8是您的根分区(/)的完整设备名称。写下来-您将需要它。

然后从Ubuntu桌面CD / DVD或USB闪存驱动器启动计算机,就像您最初用于安装Ubuntu的一样。(如果这是随Windows安装程序一起安装的Wubi系统,请告诉我们。鉴于您所报告的内容,我不希望这样做,但是如果是这样,则过程将有所不同。)

选择尝试安装Ubuntu(不安装Ubuntu)。当桌面正常运行时,按Ctrl+ Alt+ T打开“终端”窗口。然后运行以下命令:

sudo e2fsck -fkccp /dev/sda8

但是,请确保/dev/sda8使用/您通过上述详细方法获得的分区的正确的完整设备名称替换。

可能还要等一下。该c命令中包含的选项使它扫描磁盘表面上的错误以及文件系统(并将任何坏区域标记为坏区域,以便不使用它们)。您可以根据需要将其保留cc(如果愿意,也可以将其保留k),但是我建议保留它们。

如果您e2fsck认为尝试解决这些问题很可能会导致数据丢失,那么可能会提示您修复某些问题。(p这样可以修复可能会解决的任何问题,而不会引起复杂性。)

我建议您强烈希望它可以修复所需的任何内容,因为无论如何,仅应在确保备份是最新的之后再执行此操作。如果你想让它试图甚至有潜在危险的修复而不提示您,更换py

之后,引导回您的Ubuntu系统,并查看是否释放了空间。如果不是,或者问题仍然存在,请评论并编辑您的问题以提供详细信息。


如果我没有什么要备份怎么办?
askcompu

1
@ user2045360窃取,抢劫,借钱或购买一些。或将其在线推送(Ubuntu One,Dropbox,Google Docs,S3等)。
奥利

@ user2045360这取决于您拥有多少个重要文件。如果它们包含20个办公文件(如果您有耐心,甚至包括100个),则可以通过电子邮件将其发送给自己。您还可以使用云存储服务,例如Ubuntu One或DropBox(请注意-如果您设置要同步的内容,并且计算机上的文件被删除或更改,则云中也会发生相同的更改)。另一方面,如果您是电影制片人,并且拥有300 GB的镜头,那么您唯一的选择可能是购买(或按照Oli的建议借用)一些存储介质,例如外部硬盘驱动器。
Eliah Kagan

我没有钱,也没有人可以借用,使用此命令会丢失数据吗?
askcompu

@ user2045360从该e2fsck命令中丢失数据的可能性非常低,特别是如果您不按y任何警告您可能会丢失数据的警告。但是,运行该命令并不是为什么需要备份数据的原因。您需要备份数据,因为可用空间下降的快速而连续的性质强烈表明您的硬盘驱动器可能会在物理完全崩溃。如果发生这种情况,您将丢失所有数据,几乎可以肯定将无法恢复任何数据。其他备份方法包括通过网络连接到另一台计算机或CD / DVD。
Eliah Kagan

0

这个问题已经解决,这是防火墙编写了大量的日志和tvmobili编码文件

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.