![如何在不离开当前操作系统会话的情况下启动到 chroot?](https://linux22.com/image/78513/%E5%A6%82%E4%BD%95%E5%9C%A8%E4%B8%8D%E7%A6%BB%E5%BC%80%E5%BD%93%E5%89%8D%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E4%BC%9A%E8%AF%9D%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E5%90%AF%E5%8A%A8%E5%88%B0%20chroot%EF%BC%9F.png)
我正在构建 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 仍然挂载的情况下启动它,您几乎肯定会损坏您的文件系统并必须重新开始。除此之外,它的工作方式非常流畅。