启动进入 chroot?

启动进入 chroot?

我在硬盘上安装了 Linux (Debian Jessie)。驱动器 - sda1、ext4fs 和sda2- 交换

我有一个/chroot文件夹。文件夹中安装了另一个系统/chroot

问题:

如何告诉启动管理器启动不是主系统(主要,Debian Jessie),但系统在/chroot?可能,改变/menu.lst/chroot/etc/fstab? (vmlinuz root=/dev/sda1/chroot?)

或者问题的另一种变体:是否有可能将Linux安装到文件夹中而不是分区的根目录中? ( /another_linux/bin, /another_linux/home, /another_linux/etc, ...)

答案1

我遇到了同样的问题并结束了写这个让它在不同的系统上轻松工作(目前是 debian、ubuntu):

运行make_chroot_initrd脚本以从现有镜像创建一个新的启用 chroot 的 initrd 镜像:

#  ./make_chroot_initrd /chroot/trusty/boot/initrd.img-3.13.0-32-generic
making new initrd: /chroot/trusty/boot/initrd.img-3.13.0-32-generic.chroot

新映像将完全相同,只是现在它可以处理chroot=启动参数。

使用 grub2 作为引导加载程序,您可以添加一个条目/boot/grub/grub.cfg:(
或者也许更好/etc/grub.d/40_custom

menuentry "ubuntu trusty, (linux 3.13.0-32) (chroot)" {
    insmod ext2                       # or whatever you're using ...
    set root='(hd0,7)'                # partition containing the chroot
    set chroot='/chroot/trusty'       # chroot path
    linux   $chroot/boot/vmlinuz-3.13.0-32-generic root=/dev/sda7 chroot=$chroot rw
    initrd  $chroot/boot/initrd.img-3.13.0-32-generic.chroot
}

(更改文件/分区以匹配您的)

系统范围内的安装

一旦您对此感到满意,您就可以使更改永久化
(直到 initramfs-tools 软件包升级)。
在 chroot 系统中:

# cd /usr/share/initramfs-tools
# cp -pdrv .  ../initramfs-tools.orig       # backup
# patch -p1 < path_to/boot_chroot/initrd.patch
# rm *.orig */*.orig
# update-initramfs -u

从现在开始,常规 initrd 映像将支持 chroot 启动。
无需使用单独的 initrd.chroot,否则可能会与其不同步。

启动chroot了解详情。

答案2

这是引导加载程序或内核无法完成的。内核选项的参数root(例如 in )root=/dev/sda1看起来像标准 Unix 路径名,但此类路径名是根据当前安装的文件系统进行解释的。在root解释该选项时,没有挂载的文件系统。嗯,几乎没有。在内核初始化时,有一个ramfs称为rootfsMounted 的最小文件系统实例,作为初始运行进程的根start_kernel()。选项参数的实际解释root是在名为 的例程中完成的name_to_dev_t()。支持的语法之一是格式/dev/name,其中姓名sysfs通过在根目录中临时挂载文件系统rootfs并查找匹配的块设备条目来解释姓名在下面/sys/block。这个过程有更详细的解释这里

所描述的设置需要首先启动到最小环境(例如由 提供的环境) ,从临时安装点initrd安装真正的根文件系统,例如,然后将根目录更改为使用/dev/sda1/mnt/rootfs/mnt/rootfs/chrootpivot_root(8)

这有点类似于根文件系统的方式Linux容器LXC) 已设置。 LXC 是 Linux 的操作系统级虚拟化实现。操作系统级虚拟化通常用于虚拟托管环境中,作为虚拟机管理程序管理的完全虚拟化的轻量级替代方案。在操作系统级虚拟化中,单个操作系统内核在多个隔离的用户空间实例之间共享。每个实例,通常称为容器、监狱,虚拟专用服务器(VPE) 或虚拟环境(VE) 本质上是一个单独的操作系统安装,位于主机系统上自己的目录中。

答案3

是的,你可以使用 Btrfs 子卷来实现这一点

首先你需要按照此处所述将 ext4 转换为 btrfs

如果尚未将 chroot 转换为子卷:

 sudo mv /path/to/chroot /path/to/chroot-tmp
 sudo btrfs subvol create /path/to/chroot
 sudo mv /path/to/chroot-tmp/* /path/to/chroot
 sudo mv /path/to/chroot-tmp/* /path/to/chroot -r # for directories

现在你已经有了名为的子卷路径/到/chroot。你可以检查它sudo btrfs subvol list /

现在您可以在 grub 中创建引导到子卷记录。只需rootflags=subvol=path/to/chroot在 grub 菜单项中添加到 linux 内核加载字符串或使用自动探测。

相关内容