如何在不离开当前操作系统会话的情况下启动到 chroot?

如何在不离开当前操作系统会话的情况下启动到 chroot?

我正在构建 Linux 系统,将它们转换为 ISO,然后在虚拟机中测试它们。

但这一步需要几分钟,我想在开发时避免这种情况。

有没有一种方法可以获取基本上形成 chroot 的文件并启动它们,而无需重新启动我的主机?

编辑:

我想要做的是,使用我的 chroot 的内核将其引导到基本上是一个虚拟机。我想避免仅仅为了让虚拟机有东西可以启动而必须构建 ISO 的步骤。

答案1

如果我这样做,我会在 ISO 中构建整个东西,所以一旦它开始工作,你就完成了。为此,您需要创建一个空的 ISO 来开始

truncate -s 100M image.iso

然后确保它有一个分区表一个分区表(一般它会自动有一个)

# fdisk -l image.iso
Disk image.iso: 100 MiB, 104857600 bytes, 204800 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x602a438a

Device     Boot Start    End Sectors Size Id Type
image.iso1       2048 204799  202752  99M 83 Linux

您要做的下一件事是在 .iso 上创建文件系统,但由于您希望它位于分区而不是原始设备上,因此您需要创建一个偏移循环设备来引用该分区。从前面的输出中请注意,一个扇区为 512 字节,分区从扇区 2048 开始。要计算下一步所需的偏移量,请执行 512*2048=1048576 字节。然后创建偏移循环设备。

losetup --offset 1048576 /dev/loop2 image.iso

现在您已准备好创建文件系统并安装它。

mkfs.ext4 -O dir_index /dev/loop2
mount /dev/loop2 /mnt/temp

最后一步是在原始 iso 上安装 grub,以便它能够启动。

grub-install image.iso

/mnt/temp当您准备好简单地测试它umount /mnt/temp并创建一个从您的 iso 启动的虚拟机时,构建您的系统。需要注意的是,如果您在 iso 仍然挂载的情况下启动它,您几乎肯定会损坏您的文件系统并必须重新开始。除此之外,它的工作方式非常流畅。

相关内容