我正在尝试创建一个脚本来创建整个分区的映像,恢复另一个分区中的映像并从新分区启动。
我对最后一部分遇到问题,即进行更改以从新分区启动。
为此,我使用自动分区安装 ubuntu/debian 并像这样配置硬盘
- /dev/sda
- /dev/sda1 - /boot/efi
- /dev/sda2 - / (Ubuntu/debian)
- /dev/sda3 - 交换
- /dev/sda4 - 未安装 - 复制/恢复 sda2 映像的目标分区
所以我想做的是创建一个映像dev/sda2
并将其恢复到/dev/sda4
然后从 启动/dev/sda2
。
这样做的原因是为了能够提供完整的 unix 安装映像,并在没有互联网连接的情况下“更新”某些 IOT 设备。因此,每次我们提供新映像时,该映像都会在其中一个分区中恢复,并且该分区将成为启动分区。每次我们提供新映像时,即每次启动分区切换时,都会应用此过程。如果在应用/安装新映像时出现问题,则启动分区不应更改,而是从“旧的工作”分区启动。
到目前为止,我成功使用创建了映像dump
并将其恢复到目标分区。
我在更改告诉 grub 从恢复转储的另一个分区启动时遇到问题。
我尝试了各种方法,例如grub-install
、update-grub
chroot 到恢复的安装并运行这些命令,但我从未让它工作。
有人可以解释一下要做什么才能实现我正在寻找的目标吗?
答案1
现代 Linux 发行版倾向于配置 GRUB 以使用文件系统 UUID(或等效项)来识别要引导的文件系统。当您克隆sda2
到 时sda4
,您现在将拥有两个具有相同 UUID 的文件系统。 GRUB 很可能会启动它找到的第一个具有匹配 UUID 的系统,或者在检测到多个匹配 UUID 时停止。
因此,克隆文件系统后您需要做的第一件事就是为 上的新克隆分配一个新的 UUID sda4
,以使 UUID 再次唯一。这是一个问题,其中包含指定如何更改许多文件系统类型的 UUID 的答案。我的猜测是您错过了这一步。
第二步是更新位于 的mini- grub.cfg
on 。它包含的命令将查找包含主 GRUB 配置文件的文件系统。一旦您更新了 UUID,GRUB 将在新克隆而不是原始文件系统中查找其配置。sda1
/boot/efi/EFI/<name of distribution>/grub.cfg
search.fs_uuid
/boot/grub
最后,您需要更新新克隆的/boot/grub/grub.cfg
和,才能实际使用 的新 UUID 。/etc/fstab
sda4
sda4
(即使您选择使用分区/设备名称而不是 UUID,您也必须对所有这些相同的位置进行更改。)