实用程序显示磁盘空间不足,但实际可用空间却很多

实用程序显示磁盘空间不足,但实际可用空间却很多

不知为何,我的系统陷入了困境。

$ sudo apt-get install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
  linux-headers-3.2.0-29 linux-headers-3.2.0-29-generic
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  linux-headers-3.2.0-80
The following NEW packages will be installed
  linux-headers-3.2.0-80
0 to upgrade, 1 to newly install, 0 to remove and 251 not to upgrade.
3 not fully installed or removed.
Need to get 0 B/11.7 MB of archives.
After this operation, 56.4 MB of additional disk space will be used.
Do you want to continue [Y/n]? 
(Reading database ... 1255202 files and directories currently installed.)
Unpacking linux-headers-3.2.0-80 (from .../linux-headers-3.2.0-80_3.2.0-80.116_all.deb) ...
dpkg: error processing /var/cache/apt/archives/linux-headers-3.2.0-80_3.2.0-80.116_all.deb (--unpack):
 unable to create `/usr/src/linux-headers-3.2.0-80/include/linux/sunrpc/gss_err.h.dpkg-new' (while processing `./usr/src/linux-headers-3.2.0-80/include/linux/sunrpc/gss_err.h'): No space left on device
No apport report written because the error message indicates a disk full error
                                                                              dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)
Errors were encountered while processing:
 /var/cache/apt/archives/linux-headers-3.2.0-80_3.2.0-80.116_all.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

但:

us@desktop:/var/log$ df
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda1       20158332 16166516   2967816  85% /
udev             4026512        4   4026508   1% /dev
tmpfs             807064      996    806068   1% /run
none                5120        0      5120   0% /run/lock
none             4035308      128   4035180   1% /run/shm
/dev/sda4      904990760 51533960 807485908   6% /home

困惑!

us@desktop:~$ df -i
Filesystem       Inodes   IUsed    IFree IUse% Mounted on
/dev/sda1       1281120 1278499     2621  100% /
udev            1006628     507  1006121    1% /dev
tmpfs           1008827     445  1008382    1% /run
none            1008827       3  1008824    1% /run/lock
none            1008827       6  1008821    1% /run/shm
/dev/sda4      57466880  110192 57356688    1% /home

哦,所以 inode 表已满。以前从未出现过这种情况,那么是什么原因造成的呢?

答案1

如输出所示df -i,可用的 inode 数量非常少/,因此dpkg无法完成操作。

大多数情况下,这是由文件系统中某处(无意中)创建的大量小文件造成的。

您可以检查大小小于 1 KB 的文件,如果不需要则删除它们:

sudo find / -type f -size -1k -ls

类似地,您可以检查增加的文件大小,直到找到问题的根源。

答案2

感谢@heemayl 的指点,让我得出了这个答案。我接受了这个答案,但下面是我修复它的细节,希望对其他人有用。

问题是由 inode 表已满引起的。据我所知,文件系统由两个部分组成:inode 和空间。inode 与文件数量有关,而空间则与文件大小有关。我的系统充满了数百万个小文件,这是由于 Ubuntu 未删除旧内核造成的。由于系统已运行很长时间,我安装了 40 多个内核(包括头文件),这对于 20Gb 系统分区的文件系统来说太多了。

这意味着 dpkg 无法完成安装 - 它需要更多空间来完成其工作 - 但不幸的是,这意味着我无法通过使用 apt 来卸载东西来创建空间!

我发现的解决方案是将所有/usr/src/文件移动到我的其他分区,只留下指向完整 fs 上的文件的符号链接:

sudo mv /usr/src /home/usr-src
sudo ln -s /home/usr-src /usr/src

完成此操作后,我就能让 apt 完成:

sudo apt install -f

之后,我可以卸载所有不需要的旧内核,释放空间,然后我可以将 src 文件夹移回。

相关内容