我在 Gentoo 下运行一个盒子。该盒子是一个服务器(没有 GUI,只有 SSH)。
自从我使用 genkernel 生成内核以来,我发现它创建了多个占用某些位置的映像(System.map、initramfs、kernel):
$ du -ahd1|sort -k1h
0 ./boot
0 ./.keep
12K ./lost+found
1.4M ./memtest86plus
2.4M ./System.map-genkernel-x86_64-4.9.34-gentoo
2.7M ./System.map-genkernel-x86_64-4.12.5-gentoo
3.7M ./kernel-genkernel-x86_64-4.9.34-gentoo
4.2M ./initramfs-genkernel-x86_64-4.9.34-gentoo
8.1M ./grub
8.3M ./kernel-genkernel-x86_64-4.12.5-gentoo
31M
事实上,我的 /boot 分区只有 32M 大,我想将其大小更改为更适合它的大小(例如 256M)。
我/dev/sda
的如下;作为参考,它是英特尔SSD(虽然是旧型号)。
$ lsblk /dev/sda
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 37.3G 0 disk
├─sda2 8:2 0 37.2G 0 part /
└─sda1 8:1 0 32M 0 part /boot
我知道我可以在某些情况下(磁盘末尾等)增大分区并缩小它。我也知道这是有风险的,如果不使用好的 GUI,我没有足够的信心去做这件事。
我可以这样做吗:
- 缩小
/dev/sda2
以获得一些空间 - 创建并挂载
/dev/sd3
为/new_boot
- 将整个复制
/boot
到/new_boot
(要么抛出一个简单的副本,要么抛出 dd ?) - 交换
/boot
和/new_boot
- 放下
/dev/sda1
并调整大小/dev/sda2
或者有更好的解决方案吗? (我可以物理访问服务器)
答案1
只需使用您的根分区来存储以下内容/boot
:
mount --move /boot /elsewhere
或者umount /boot
它和mount
它/elsewhere
- 将 的内容复制
/elsewhere
到现在(可能)为空的位置/boot
,同时保留所有内容的权利和所有者 (cp -a /elsewhere/. /boot
) umount /elsewhere
/boot
从......中去除/etc/fstab
- 更新 grub (
grub-install
可能,或者你的 Gentoo 包装器,如果有的话) - 重启
/boot
确保一切正常,并且在清空或回收之前没有使用旧分区中的任何内容(就我个人而言,我不会为 32M 承担任何风险)