不知为何,我的系统陷入了困境。
$ 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 文件夹移回。