交换 /boot 分区

交换 /boot 分区

大约 6 个月前,我安装了一台新买的笔记本电脑和 kubuntu 。我现在选择了单独的 /boot (并接受了默认值),在升级到下一个 kubuntu 版本期间, /boot 中的空间不足(它已清理,只是太小了)

启动=sda5 根=sda7

所以我想,好吧,我将放弃单独的 /boot 并仅使用 /boot 作为根分区上的目录。所以:

  1. 创建 /newboot (在根文件系统上)
  2. cp -a /boot/* /newboot (& rmdir /newboot/lost+found)
  3. 卸载/启动
  4. mv /boot /oldboot, mv /newboot /boot
  5. 编辑 /etc/fstab (将旧的 /dev/sd5 挂载为 /oldboot)
  6. systemctl 守护进程重新加载
  7. 更新-initramfs -u

现在我将 /boot/grub/grub.cfg 与 /oldboot/grub/grub.cfg 进行比较

它们是相同的......嗯,我想,很多设置都有“建议”grub 实际上会寻找文件...问题是,例如在 sda5 (msdos5) 和 sda7 (msdos7) 上都有一个“好的”grub.cfg,它可以找到其中之一。所以我手工编辑了 grub.cfg 中对 msdos5 到 msdos7 的所有引用,并重新运行 update-initramfs -u,重新启动,一切都很好......

但我有这个疑问......它使用“/boot”还是仍然使用“/oldboot”......所以在oldboot上有2个内核(和initrd)说vmlinuz-6.2.0-36-generic和vmlinuz -6.2.0-35-generic 我将其重命名为 NOT-vmlinuz-6.2.0-36-generic 并重新启动。 ...它失败了,我选择了“35”版本,结果很好......所以它仍在读取/oldboot。

那么我错过了什么步骤。我需要手动编辑 UUID 吗?似乎很容易失败.​​..感觉好像缺少一些简单的“重新生成 grub.cfg”步骤...重新安装 grub?

答案1

好吧,我明白为什么没有人跳出来给出快速答案……这要复杂得多。

所以这个琐碎的事情是

grub-mkconfig -o /boot/grub/grub.cfg

但这还远不是故事的全部。首先需要更多信息:

  1. 系统使用(旧式)BIOS启动
  2. 该笔记本电脑具有预先存在的“Doze”安装并使用其初始引导加载程序 + BCD

因此,首先需要执行上述所有步骤。然后就是上面的grub-mkconfig,这会进行更改:

root@ThinkPad:/boot/grub# diff grub.cfg.5nov23 grub.cfg
173c173
<   set root='hd0,msdos5'
---
>   set root='hd0,msdos7'
175c175
<     search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos5 --hint-efi=hd0,msdos5 --hint-baremetal=ahci0,msdos5  7094b250-3ccf-436e-af52-6c0d828cc15c
---
>     search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos7 --hint-efi=hd0,msdos7 --hint-baremetal=ahci0,msdos7  e8128f48-1ef6-44e6-b95c-1595c6ddf05c
177c177
<     search --no-floppy --fs-uuid --set=root 7094b250-3ccf-436e-af52-6c0d828cc15c
---
>     search --no-floppy --fs-uuid --set=root e8128f48-1ef6-44e6-b95c-1595c6ddf05c
179,180c179,180
<   linux   /vmlinuz-6.2.0-36-generic root=UUID=e8128f48-1ef6-44e6-b95c-1595c6ddf05c ro  quiet splash $vt_handoff
<   initrd  /initrd.img-6.2.0-36-generic
---
>   linux   /boot/vmlinuz-6.2.0-36-generic root=UUID=e8128f48-1ef6-44e6-b95c-1595c6ddf05c ro  quiet splash $vt_handoff
>   initrd  /boot/initrd.img-6.2.0-36-generic
191c191
...

本质上:将 SDA5 更改为 SDA7,将路径从 /grub 更改为 /boot/grub 以及 UUID。

但需要的最后一步(就我而言)是grub 安装 /dev/sda7

原因有点复杂,我将介绍两种情况,第一种是我的,第二种是更常见的初始引导加载程序是 grub(有或没有 Doze 分区)

这是我的案例:

root@ThinkPad:/boot/grub# grub-mkconfig -o /boot/grub/grub.cfg
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.2.0-36-generic
Found initrd image: /boot/initrd.img-6.2.0-36-generic
Found linux image: /boot/vmlinuz-6.2.0-35-generic
Found initrd image: /boot/initrd.img-6.2.0-35-generic
Found memtest86+x64 image: /boot/memtest86+x64.bin
Warning: os-prober will be executed to detect other bootable partitions.
Its output will be used to detect bootable binaries on them and create new boot entries.
Found Windows 10 on /dev/sda1
done

root@ThinkPad:/boot/grub# grub-install /dev/sda7
Installing for i386-pc platform.
grub-install: warning: Filesystem `ext2' doesn't support embedding.
grub-install: warning: Embedding is not possible.  GRUB can only be installed in this setup by using blocklists.  However, blocklists are UNRELIABLE and their use is discouraged..
grub-install: error: will not proceed with blocklists.


root@ThinkPad:/boot/grub# grub-install --force /dev/sda7
Installing for i386-pc platform.
grub-install: warning: Filesystem `ext2' doesn't support embedding.
grub-install: warning: Embedding is not possible.  GRUB can only be installed in this setup by using blocklists.  However, blocklists are UNRELIABLE and their use is discouraged..
Installation finished. No error reported.

就我而言,笔记本电脑使用 Doze 引导加载程序启动,然后使用 BCD(启动实用程序)来允许选择启动分区...它曾经允许 1 (Doze) 或 5 (Kubuntu) ,我添加了 7 (SDA7=root) )

因此,这意味着 grub 引导加载程序需要位于 /dev/sda7 上,并且正如警告所示,它无法嵌入(core.img 的副本早期存储在磁盘启动的间隙中),因此需要使用不可靠的方法(叹息! )顺便说一句,这与更改之前的状态相同。

对于许多其他用户来说,他们将安装 grub 作为初始引导加载程序。在这种情况下你可以这样做:

# grub-install  /dev/sda

这是 grub 更常见的地方(并且效果更好)

所以我启动了这个,选择 kubuntu-SDA7 作为启动选项,它启动得很好。我进行了上述调试更改(将其重命名为NOT-vmlinuz-6.2.0-36-generic)并且它仍然可以正常启动...所以它不再使用/oldboot。

相关内容