背景:我的 / 分区占用了 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。(下面我使用 {} 来表示占位符对象,其细节可能会分散注意力。)然后我
决定使用安装在 {tempdev} 上的临时存储 {tempmountpoint}。这足以容纳我的 /usr 树的内容。
使用以下命令将 /usr 的内容复制到 {tempmountpoint} 中
rsync -avu /usr/ {tempmountpoint}
卸载这两个
将 /usr 挂载到 {tempdev} (这样我就可以通过这一切继续处理其他事情)
重新格式化 /usr 的原始(和最终目标)分区
mkfs.ext4 -i 8192 /dev/sda8
将 /dev/sda8 挂载到 {tempmountpoint}。
将临时 /usr 的内容复制回其目标分区
rsync -avu /usr/ {tempmountpoint} .
最后,我使用以下代码查找了(新的)UUID:
ls -l /dev/disk/by-uuid
使用此 UUID 编辑 /etc/fstab 中的 /usr 条目,然后
重啟動。
更新现在正常运行。文件系统看起来状况良好,如下所示:
> 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 吗?