目前我有 /dev/sda 磁盘,其中有根分区(作为 /dev/sda1)和启动分区(作为 /dev/sda2)
由于我的启动分区只有 100MB,我需要扩展它。不幸的是,我无法向磁盘 /dev/sda 添加空间,并且 /dev/sda 上没有任何备用空间,所以我需要做的是创建新磁盘并将其分配给 VM。然后,我需要在这个新磁盘上创建启动分区并以某种方式使其工作。
我尝试用以下方式来做:
- 创建 /dev/sdb1 分区
- 将内容从 /dev/sda2 (启动)复制到 /dev/sdb1
- 将 /dev/sdb1 挂载为启动项(在 fstab 中也更改为使用 /dev/sdb1 而不是 /dev/sda2)
- 更新 grub/安装 grub(update-grub、grub-install /dev/sdb、grub-mkconfig -o /boot/grub/grub.cfg)
- 替换 menu.lst 中的值(使用 hd1 而不是 hd0)
- 运行 grub 命令并使用:root(hd1,0)、setup(hd1)
(最后 3 步都是按照这里的指导在 chroot 上完成的https://help.ubuntu.com/community/Grub2/Installing#via_ChRoot和沒有)
但是系统仍然在 /dev/sda 上寻找启动分区,并且在启动期间的 grub 阶段我没有看到新内核
是否可以将启动分区与根分区放在不同的驱动器上?你们有人知道如何设置吗?
GPARTED Ubuntu 16:
Ubuntu 18 操作系统与 GRUB:
答案1
一种“简单”的方法是将您的启动分区与根分区合并。请注意,当您的根分区被加密或位于 LVM 或软件 RAID 上时,这可能不起作用(这取决于 GRUB),您的根分区也必须是主分区。
为了使其工作,只需按正确的顺序执行以下操作(要特别小心!):
- 像往常一样启动常规系统
- 卸载你的启动分区
- 重新挂载你的启动分区到
/mnt/
- 将所有文件从复制
/mnt/
到/boot/
sudo cp -av /mnt/* /boot/
- 卸载你的启动分区
/mnt/
- 备份分区表并将其保存在另一台设备上
- 删除旧的启动分区(通过 fdisk)
- 使根分区成为活动分区(通过 fdisk 设置启动标志)
- 跑步
sudo update-grub
- 运行
sudo grub-install /dev/sda
(只是sda
而不是sda1
或sdaX
) - 删除旧启动分区的挂载条目
/etc/fstab
- 重启系统
我已经在全新安装的 Ubuntu 16.04 VM 上进行了测试并且正常运行。
编辑:这里是将整个启动分区重新定位/迁移到另一个新分区的指南。
为了使其工作,只需按正确的顺序执行以下操作(要特别小心!):
- 像往常一样启动常规系统
- 根据需要在任何卷上创建一个新分区(它仍然必须是主分区!至少从字节 1048576 开始!),但使用与旧启动分区相同的文件系统和相同的分区表类型(可能系统安全分区表和ext4文件系统)
- 将新分区设为活动分区(通过 fdisk 启动标志)
- 使用文件系统格式化新创建的分区
- 为了ext4使用
sudo mkfs.ext4 -L newboot /dev/sdXY
(X
是您新创建的 newboot-partition 所在卷的卷字符,Y
是分区号) - 我将把这个分区称为新引导
- 为了ext4使用
- 山新引导到
/mnt/
- 将所有文件从复制
/boot/
到/mnt/
sudo cp -av /boot/* /mnt/
- 卸载旧的启动分区
/boot/
- 还可以卸载你的 newboot-partition
/mnt/
- 备份分区表并将其保存在另一台设备上
- 挂载你的新启动分区到
/boot/
- 跑步
sudo update-grub
- 运行
sudo grub-install /dev/sdX
(只是和sdX
而不是sdX1
或sdXY
,X
是新创建的新启动分区所在的卷的卷字符) - 删除旧的启动分区(通过 fdisk)
- 调整
/etc/fstab
新启动分区的挂载条目(您可能需要调整 UUID,可通过 找到sudo blkid
) - 仔细检查一切
- 重启
- 进入你的 BIOS
- 确保您的计算机从新启动分区所在的卷启动
- 保存 BIOS 设置,重新启动并希望一切顺利
我也在全新安装的 Ubuntu 16.04 VM 上测试过它并且能正常工作。