apt-get:设备上没有剩余空间(12.04)


42

我已经阅读了所有可以找到的主题-甚至那些说该问题已在其他地方得到回答的主题,但是都没有解决我遇到的特定问题。Update Manager运行并产生与未满足的依赖关系有关的错误,建议使用apt-get install -f,但此消息失败:

Unpacking linux-headers-3.5.0-36 (from .../linux-headers-3.5.0-36_3.5.0-36.57~precise1_all.deb) ...
dpkg: error processing /var/cache/apt/archives/linux-headers-3.5.0-36_3.5.0-36.57~precise1_all.deb (--unpack):
 unable to create `/usr/src/linux-headers-3.5.0-36/arch/arm/mach-iop32x/include/mach/glantank.h.dpkg-new' (while processing `./usr/src/linux-headers-3.5.0-36/arch/arm/mach-iop32x/include/mach/glantank.h'): No space left on device

我怀疑最后5个字词设备没有剩余空间很大,但是df和du都显示出足够的空间。所以我想知道,什么设备需要更多空间?

来自的 df -h

Filesystem 
Size Used Avail Use% 
Mounted on /dev/sda1 5.5G 4.4G 786M 86% 
/ udev 996M 4.0K 996M 1% 
/dev tmpfs 402M 880K 401M 1% 
/run none 5.0M 0 5.0M 0% /run/lock none 1004M 156K 1004M 1% 
/run/shm /dev/sdb1 30G 1.4G 27G 5% 
/home /dev/sdc1 299G 31G 268G 11% /media/HD-PCTU2 

根分区上是否有空间?
don.joey 2013年

1
请粘贴(i)输出df -h和(ii)输出mount。dpkg在完成工作后将清理文件,因此实际上您可能没有足够的空间。apt-get clean在启动dpkg之前,请考虑运行。
2013

1
监视watch -n 1 df -h终端在执行操作的同时apt-get install(它会降低您的I / O速度,但您会知道哪个文件系统太小了)
Emmanuel

三分之一的计算机中的Ubuntu 14.04和内核版本3.13.0.108也会出现问题。我从askubuntu.com/questions/223143/…开始,但是这里显示的答案在同一行。
XavierStuvw

Answers:


48

我刚遇到同样的问题。我在其他地方遇到过提到inode的情况,并在我的终端中跑来检查inode的使用情况:

  df -i 

这表明inode的使用率为99%。因此,尽管我的磁盘上还有足够的空间,但是由于inode数量的限制,我无法创建更多文件。一些磁盘清理是解决我的问题的方法。


6
我也有同样的问题,因为内核更新不会自动删除旧内核。每个内核更新的Linux标头都占用大量的inode!---我的“安全”解决方案是将两个内核头文件目录移动到另一个文件系统中:cd /usr/src ; cp -a linux-headers-3.2.0-3{2,3}* /home/tmp-hdr ; rm -r linux-headers-3.2.0-3{2,3}*apt-get-install -f以正确的方式删除其他头文件:apt-get purge linux-headers-...从tmp中将头文件移回:cd /usr/src ; cp -a /home/tmp-hdr/* .。使用删除更多旧内核apt-get purge
pabouk 2014年

1
请考虑参与活动较少的错误报告:错误#1089195 linux-headers将吞噬LTS上的inode。,错误#690911 无需格式化就无法删除旧内核
pabouk

@pabouk我想知道,您是否可以使用dpkg --purge linux-headers-3.2.0-3{2,3}*; apt-get -f install它而无需复制?
jarno

@jarno已经有很长时间了,但是我认为使用dpkg或apt数据库的所有命令都失败了。我认为这是由于自动升级过程中因索引节点数量不足而导致的依赖关系破坏和其他不一致。
pabouk '16

脚本发布后sudo linux-purge --fix即可完成所需的磁盘清理。
jarno

37

我认为您的引导分区中充满了旧的内核映像,没有空间供apt-get尝试安装新的内核映像。您可以输入

dpkg -l linux-headers-\* linux-image-\* | grep ^ii

进入终端窗口。当我这样做时,我得到

ii  linux-headers-3.8.0-18                    3.8.0-18.28                            all          Header files related to Linux kernel version 3.8.0
ii  linux-headers-3.8.0-18-generic            3.8.0-18.28                            amd64        Linux kernel headers for version 3.8.0 on 64 bit x86 SMP
ii  linux-headers-3.8.0-19                    3.8.0-19.30                            all          Header files related to Linux kernel version 3.8.0
ii  linux-headers-3.8.0-19-generic            3.8.0-19.30                            amd64        Linux kernel headers for version 3.8.0 on 64 bit x86 SMP
ii  linux-headers-3.8.0-21                    3.8.0-21.32                            all          Header files related to Linux kernel version 3.8.0
ii  linux-headers-3.8.0-21-generic            3.8.0-21.32                            amd64        Linux kernel headers for version 3.8.0 on 64 bit x86 SMP
ii  linux-headers-3.8.0-22                    3.8.0-22.33                            all          Header files related to Linux kernel version 3.8.0
ii  linux-headers-3.8.0-22-generic            3.8.0-22.33                            amd64        Linux kernel headers for version 3.8.0 on 64 bit x86 SMP
ii  linux-headers-3.8.0-23                    3.8.0-23.34                            all          Header files related to Linux kernel version 3.8.0
ii  linux-headers-3.8.0-23-generic            3.8.0-23.34                            amd64        Linux kernel headers for version 3.8.0 on 64 bit x86 SMP
ii  linux-headers-3.8.0-25                    3.8.0-25.37                            all          Header files related to Linux kernel version 3.8.0
ii  linux-headers-3.8.0-25-generic            3.8.0-25.37                            amd64        Linux kernel headers for version 3.8.0 on 64 bit x86 SMP
ii  linux-headers-generic                     3.8.0.25.43                            amd64        Generic Linux kernel headers

由于我有很多,所以我可以删除一些最旧的

sudo apt-get remove linux-headers-3.8.0-18

如果apt-get由于缺少某些软件包依赖项而失败(由于缺少免费的inode而无法安装),则可以dpkg直接求助:

sudo dpkg --remove linux-headers-3.8.0-18

做到最老的几次,linux-headers-*应该有空间。


4
这揭示了另一个问题。每次我尝试运行dpkg时,都会告诉我它具有未满足的依赖关系以下软件包具有未满足的依赖关系:linux-headers-3.5.0-36-generic:依赖于:linux-headers-3.5.0-36,但并非如此将要安装的东西,那是不会安装的,因为没有足够的空间
Don

也许在混乱启动分区之前,已经对用户文件进行了备份?我从来没有遇到过麻烦,但是如果这样做,我将拥有重新安装所需的一切。当然,我还是每天都要备份。
Marc 2013年

我希望我不需要弄乱引导分区,并且有一种方法可以摆脱无休止的依赖循环。我现在看到,备份数据和重新开始可能会更容易。既然我知道清除旧物品的重要性,那么我就养成习惯。感谢大家的帮助。

一点也不 。。。备份始终是一个好主意,并且您并没有真正弄乱引导分区,只需使用apt-get卸载一些软件包即可。应该是小菜一碟。我只是建议备份数据,因为如果您遇到问题(甚至没有问题),我总是建议备份数据,实际上我是在自己的系统上运行了这些命令来测试它们。我花了三分钟才搬走linux-headers-3.8.0-18
2013年

1
如果对于再次失败sudo dpkg --remove linux-headers-3.8.0-18,则将其删除sudo dpkg --remove linux-headers-3.8.0-18-generic,它将带走另一个标头。
Theson

16

我使用了sudo apt-get autoremove它,并删除了一堆旧的内核头文件包。好吧,那之后。


在我的情况下,apt-get拒绝执行autoremove,优先考虑的是有一个损坏的软件包需要整理。哪个损坏的软件包是由inode饱和引起的。另请参阅此AskUbuntu线程
XavierStuvw

好吧,这救了我!更新之后,我的x会话再也没有进入过,只是要求再次登录,而我却经常收到没有剩余空间的消息。我以为我必须格式化HD,但是您的把戏才救了我:)
user5193682

1
大声笑我不能运行它,因为我有太多的文件...
Brian Leishman

2

据我所知,Linux ext *文件系统中inode的限制大约为40亿个,但并非不多,这是大量的文件。因此,您的问题是某些东西正在生成大量文件。我可以建议您首先检查以下内容:http : //blog.scoutapp.com/articles/2014/10/08/understanding-disk-inodes 因此,您将找到填充FS索引节点的内容。我也可以建议清理apt缓存:

sudo apt-get clean

sudo apt-get autoclean
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.