假设我们有一个/dev/sda
有大量空间的空驱动器。我们还有一个以前的 Linux 备份的分区/dev/sdb1
。其中包含常用的 linux 文件系统等/home
。/usr
值得注意的是缺少 EFI 引导分区。
从这个设置中,我们将如何
- 将分区复制到
/dev/sda
,为启动分区留出空间 - 创建启动到此文件系统的启动分区
- 安装 grub 以从 BIOS 引导至此
答案1
首先,安装/dev/sdb1
上/src
。我知道你的映像中没有 /boot/efi,但我不知道你的 /boot 是否是单独的。检查是否有/boot
in 的条目/src/etc/fstab
。如果有的话,我们也必须重新创建它。
将分区复制到 /dev/sda,为引导分区留出空间
相反,首先创建 EFI 启动分区(GPT 表,将第一个分区设为 4 GB FAT32 分区,标记“EFIboot”以供识别)。
确保您已格式化分区(sudo mkfs.vfat /dev/sda1
假设 sda1 是分区名称),然后记下您获得的 UUID sudo lsblk -o UUID /dev/sda1
(我们将其称为uuid_efi
)。
/boot
如果in中有一个条目/src/etc/fstab
,也为此创建一个 4GB 分区(ext4,没什么特别的)。也记下它的 UUID(我们称之为uuid_boot
)。
在 sda 上添加一个适当大小的分区来存放 的内容/dev/sdb1
,对其进行格式化(提示:使用与原始文件系统类型相同的文件系统类型可以使系统的默认配置仍然使用它)并将其挂载到 和/dst
上cp --archive /src/* /dst/
。这可能需要一段时间!
调整/dst/etc/fstab
为/boot/efi
的量UUID=${uuid_efi}
。如果本身有一个/boot
条目,请将其调整为UUID=${uuid_boot}
,两者均如上所述。
将/proc
、/sys
和/dev
绑定/run
到/dst
:
for mnt in {proc,sys,run}; do
sudo mount -o bind "/${mnt}" "/dst/${mnt}"
done
最后打开一个 shell,将/dst
目录视为/
:
sudo chroot /dst /bin/bash
如果存在,安装/boot
;然后/boot/efi
从该外壳内安装
mount /boot
mount /boot/efi
多田。现在您有了一个 shell,它可以看到所有内容,就好像它在启动的目标系统上运行一样。
重新安装引导加载程序的常用发行版特定方法适用于此处。对于 debianoid 来说,就是这边走,对于 redhatoids 来说,可能是yum reinstall grub2-efi
。对于其他发行版,您需要进行自己的研究(搜索引擎distroname reinstall grub
应该可以)。然后使用发行版特定的方式重新安装最新的内核包,正确填充 /boot/ 并重新生成 initrds。