rootfs 分区上没有剩余空间可用于升级内核

rootfs 分区上没有剩余空间可用于升级内核

我想升级Linux内核3.164.3。不幸的是,当我运行时,aptitude install linux-image-4.3.0-1-amd64由于rootfs分区上没有空间,安装失败。117MB左边,174MB需要。

我没有要删除的旧内核以释放更多磁盘空间(除了我现在正在使用的内核):

root@host:/# aptitude search linux-image | grep ^i
ip  linux-image-3.16.0-4-amd64      - Linux 3.16 for 64-bit PCs

我尝试过了释放空间使用aptitude clean, apt-get autoremove,但它没有帮助,因为它/var是一个单独的分区。 AFAIK 这些命令会删除/var/cache/apt/archives目录的内容,因此它无济于事。

我考虑暂时mount --bind / /home/rootfs(按照建议这里),但rootfs可能无法安全地重新安装

我的文件系统磁盘空间使用情况:

root@host:/# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda6       454M  310M  117M  73% /
udev             10M     0   10M   0% /dev
tmpfs           1,6G   19M  1,6G   2% /run
/dev/sda7        23G   13G  8,8G  59% /usr
tmpfs           3,9G   52M  3,9G   2% /dev/shm
tmpfs           5,0M  4,0K  5,0M   1% /run/lock
tmpfs           3,9G     0  3,9G   0% /sys/fs/cgroup
/dev/sda4       250G  187G   64G  75% /media/Windows/C
/dev/sda5       500G  428G   73G  86% /media/Windows/D
/dev/sda2        96M   25M   72M  26% /boot/efi
/dev/sda8       7,3G  966M  5,9G  14% /var
/dev/sda9        14G   37M   13G   1% /tmp
/dev/sda11      126G   95G   25G  80% /home
tmpfs           797M   20K  797M   1% /run/user/112
tmpfs           797M   24K  797M   1% /run/user/1000

du -mx / | sort -n结果:关联

操作系统版本:

root@host:/# cat /etc/debian_version 
stretch/sid

/boot内容:

root@host:/# du -sh /boot/*
156K    /boot/config-3.16.0-4-amd64
25M     /boot/efi
8,8M    /boot/grub
16M     /boot/initrd.img-3.16.0-4-amd64
16M     /boot/initrd.img-3.16.0-4-amd64.old-dkms
2,6M    /boot/System.map-3.16.0-4-amd64
3,0M    /boot/vmlinuz-3.16.0-4-amd64
  • 是否有任何聪明且安全的方法来释放rootfs分区或暂时将当前内核移动到另一个分区?
  • rootfs将某些内容移动到另一个分区并创建指向它们的符号链接是否安全?

我知道有很多类似的问题, 但他们中的大多数最终删除了我没有的旧内核。

答案1

对于现代 amd64 系统上的 root+boot 分区来说,450MB 并不算多。如果您想安装多个内核,则必须重新组织分区。即使你不这样做,它也很紧。

鉴于您现在拥有的分区,我建议将根分区移动到现在的位置/var。由于您要移动根分区,请从应急媒体启动(例如系统救援光盘)。安装/dev/sda6/dev/sda8,说/media/sda6/media/sda8。然后:

  1. 创建/var目录:mkdir /media/sda8/var
  2. 将旧/var分区中的所有内容移动到这个新的子目录:(mv /media/sda8/* /media/sda8/var本身/var将被跳过)
  3. 将除旧 root 分区之外的所有内容移动/boot到旧 var 分区:mv /media/sda6/[^bv]* /media/sda6/bin /media/sda8/
  4. 旧的根分区上应该只有/boot一个空分区。/var将所有内容移至/boot分区的根目录:mv /media/sda6/boot/* /media/sda6
  5. 删除虚假目录:rmdir /media/sda6/boot /media/sda6/var并创建现在需要的目录:mkdir /media/sda8/boot
  6. 编辑该fstab文件(现在位于/media/sda8/etc/fstab),删除 的条目/var,添加 的条目,并根据需要/boot更正 的条目。/
  7. 更新引导加载程序配置。正确的简单方法是运行update-grub脚本(重新生成grub.cfg)和grub-install(重新生成第一阶段引导加载程序,以便它知道在哪里可以找到其余部分,包括grub.cfg)。但要做到这一点,您需要向其提供正确的目录树。

    mount --rbind /dev /media/sda8/dev
    mount --rbind /proc /media/sda8/proc
    mount --rbind /sys /media/sda8/sys
    mount --bind /media/sda6 /media/sda8/boot
    chroot /media/sda8
    mount /usr
    update-grub
    grub-install /dev/sda
    

现在重新启动。

或者,您可以/boot移至/var;但这是一种不太常见的配置,因此您可能需要调整一些引导加载程序配置文件。

如今,分离/usr已经/毫无意义。分离/var从来/没有真正有用过(在大多数设置中它们都需要以读写方式安装)。

以后我推荐对Linux分区使用LVM。它更加灵活。

相关内容