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

Don*_*n A 42 apt dpkg disk-usage

我已经阅读了我能找到的每一条线索——即使是那些说问题已经在别处得到回答的线索,但没有一个解决我遇到的具体问题。更新管理器运行并产生与未满足的依赖项相关的错误,并建议使用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
Run Code Online (Sandbox Code Playgroud)

我怀疑最后 5 个单词No space left on device很重要,但 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 
Run Code Online (Sandbox Code Playgroud)

小智 49

我刚刚遇到了同样的问题。我在其他地方遇到了 inode 的提及,并在我的终端中运行以检查 inode 使用情况:

  df -i 
Run Code Online (Sandbox Code Playgroud)

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

  • 我遇到了由内核更新引起的相同问题,这些更新不会自动删除旧内核。每次内核更新的 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 删除更多旧内核。 (7认同)

Mar*_*arc 43

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

dpkg -l linux-headers-\* linux-image-\* | grep ^ii
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

sudo apt-get remove linux-headers-3.8.0-18
Run Code Online (Sandbox Code Playgroud)

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

sudo dpkg --remove linux-headers-3.8.0-18
Run Code Online (Sandbox Code Playgroud)

对你最年长的人这样做几次,linux-headers-*你应该有空间。

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

小智 21

我使用sudo apt-get autoremove并删除了一堆旧的内核头文件包。很高兴在那之后。


小智 7

据我所知,Linux ext* 文件系统中的 inode 限制在 40 亿左右,但不少,这是一个巨大的文件量。所以你的问题是某些东西正在生成很多文件。我可以建议你先检查这个:http : //blog.scoutapp.com/articles/2014/10/08/understanding-disk-inodes 所以你会发现是什么填充了你的 FS 的 inode。我还可以建议清理 apt 缓存:

sudo apt-get clean
Run Code Online (Sandbox Code Playgroud)

sudo apt-get autoclean
Run Code Online (Sandbox Code Playgroud)

  • 其他解决方案都给了我空间不足的错误。令人惊讶的是,清洁后我可以获得一些空间。谢谢 (2认同)