启动到 chroot?

skr*_*pki 15 startup chroot directory

我在硬盘上安装了 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, ...)

Tho*_*man 8

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

设置如所述将需要由第一引导来完成到一个最小的环境,例如一个由提供initrd,从挂载真正的根文件系统/dev/sda1在临时挂载点,例如/mnt/rootfs,然后改变的根目录到/mnt/rootfs/chroot使用pivot_root(8)

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


lem*_*eze 8

我遇到了同样的问题,最后写了这个,让它在不同的系统(目前是 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
Run Code Online (Sandbox Code Playgroud)

新映像将完全相同,但现在它可以处理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
}
Run Code Online (Sandbox Code Playgroud)

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

全系统安装

一旦您对它感到满意,您就可以使更改永久化
(直到 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
Run Code Online (Sandbox Code Playgroud)

从现在开始,常规的 initrd 映像将支持 chroot 引导。
不需要使用单独的 initrd.chroot ,它可能会与它不同步。

有关详细信息,请参阅boot_chroot


Ser*_*erg 5

是的,您可以使用 Btrfs subvolumes 来解决这个问题

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

如果尚未将您的 chroot 转换为 subvolume:

 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
Run Code Online (Sandbox Code Playgroud)

现在您有名为path/to/chroot 的子卷。你可以检查它sudo btrfs subvol list /

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