对 apt 的“没有空间”投诉感到困惑

对 apt 的“没有空间”投诉感到困惑

背景:我的 / 分区占用了 93%,但我有一些未分配的空间,所以我为 /usr 创建了一个新主目录。移动后,空间使用情况如下:

>df -k
Filesystem     1K-blocks     Used Available Use% Mounted on
//dev/sda1       15747484  6822736   8124800  46% /
udev             1954244        4   1954240   1% /dev
tmpfs             786052     1040    785012   1% /run
none                5120        0      5120   0% /run/lock
none             1965124      512   1964612   1% /run/shm
cgroup           1965124        0   1965124   0% /sys/fs/cgroup
/dev/sda5       62993332 30014168  29779216  51% /home
/dev/sda7       26540640       32  26540608   1% /windows
/dev/sda8       10320184  7156516   2639432  74% /usr

现在系统可以运行,但是当我允许正常软件更新时,内核头部分出现了一个错误:

dpkg: error processing /var/cache/apt/archives/linux-headers-3.2.0-55_3.2.0-55.85_all.deb (--unpack):
 unable to create `/usr/src/linux-headers-3.2.0-55/arch/arm/mach-pxa/include/mach/eseries-irq.h.dpkg-new' (while processing `./usr/src/linux-headers-3.2.0-55/arch/arm/mach-pxa/include/mach/eseries-irq.h'): No space left on device

这个“空间”投诉和上面的 df 输出似乎相互矛盾。

当我尝试修复存​​储库 (sudo apt-get -f install) 时,我遇到了同样的错误。我认为我有太多旧内核版本,因此我尝试删除一些 (sudo apt-get remove linux-headers-3.2.0-38 linux-headers-3.2.0-38-generic linux-image-3.2.0-36-generic ... ),但这会产生错误并建议我尝试 apt-get -f install 。

一些系统信息:

> uname -a
Linux <hostname> 3.2.0-55-generic-pae #85-Ubuntu SMP Wed Oct 2 14:03:15 UTC 2013 i686 i686 i386 GNU/Linux
> cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.3 LTS"

恐怕在解决此标头问题之前,我无法更新任何软件。我希望有人能提供帮助。

答案1

inode 有它。再次感谢,gertvdijk。

在我的评论中,您可以看到文件系统虽然还没有完全装满,但几乎已经没有 inode 了。查看 man mkfs.ext4 后,我决定将其字节/inode 比率减半。此比率由 -i 选项设置。根据 df -k 和 df -i 的输出进行快速计算,我的比率约为 2^14,因此我将使用 2^13。(下面我使用 {} 来表示占位符对象,其细节可能会分散注意力。)然后我

  1. 决定使用安装在 {tempdev} 上的临时存储 {tempmountpoint}。这足以容纳我的 /usr 树的内容。

  2. 使用以下命令将 /usr 的内容复制到 {tempmountpoint} 中

    rsync -avu /usr/ {tempmountpoint}
    
  3. 卸载这两个

  4. 将 /usr 挂载到 {tempdev} (这样我就可以通过这一切继续处理其他事情)

  5. 重新格式化 /usr 的原始(和最终目标)分区

    mkfs.ext4 -i 8192  /dev/sda8
    
  6. 将 /dev/sda8 挂载到 {tempmountpoint}。

  7. 将临时 /usr 的内容复制回其目标分区

    rsync -avu /usr/ {tempmountpoint} .
    
  8. 最后,我使用以下代码查找了(新的)UUID:

    ls -l /dev/disk/by-uuid
    
  9. 使用此 UUID 编辑 /etc/fstab 中的 /usr 条目,然后

  10. 重啟動。

更新现在正常运行。文件系统看起来状况良好,如下所示:

> df -k /usr
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda8       10156344 7349228   2282880  77% /usr
> df -i /usr
Filesystem      Inodes  IUsed  IFree IUse% Mounted on
/dev/sda8      1310720 679355 631365   52% /usr

一些说明:

(i) /home 已经有自己的分区。如果它在 /usr 中,我会采取略有不同的方法。

(ii) 工具选择:我喜欢 ls /dev/disk/by-uuid,因为 ls 非常非常出名。我使用 rsync 的部分原因是,当我必须先做其他事情再回来做这件事时,我可以再次运行相同的 rsync 命令来“刷新”副本。此外,我喜欢它,它可以做到这一点。其他人可能有满足这些标准的不同实用程序。例如,直到几年前,我还会使用 cpio。无论什么都能让你通过字节。

(iii) 占位符指的是 /dev/sda7 上挂载在 /windows 上的 fat32 (vfat) 文件系统。我在执行上述步骤之前冷酷地重新格式化了它。我从未费心更改挂载点名称,这可能会造成间接混淆。

感谢所有提供帮助或贡献的人。

答案2

它说 /usr 分区上没有剩余空间,您可以尝试删除那里的一些东西。

您尝试过 apt-get -f install 吗?

相关内容