chrootで起動しますか?


13

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
vmlinuz root=/dev/sda1/chroot動作しません。おそらくで使用されているものと同様の方法でこれをシミュレートできinitrdます。ここを参照してください。/new_rootそこで説明されているようにマウントしてから、cd /new_rootdo cd /new_root/chrootおよびcontinueの代わりに。
n。「代名詞」m。

回答:


7

これは、ブートローダーまたはカーネルでは実行できません。rootなどのカーネルオプションのパラメータroot=/dev/sda1は標準のUnixパス名のように見えますが、そのようなパス名は現在マウントされているファイルシステムに従って解釈されます。当時rootオプションが解釈され、何がされているファイルシステムをマウントされません。まあ、ほとんどなし。カーネルの初期化時に、実行中の初期プロセスのルートとしてマウントされたramfsと呼ばれる最小限のファイルシステムのインスタンスがあります。オプションパラメータの実際の解釈は、と呼ばれるルーチンで行われます。サポートされている構文の1つは、ファイルシステムの一時的なマウントを行うことによって名前が解釈される形式ですrootfsstart_kernel()rootname_to_dev_t()/dev/namesysfsrootfsルート、およびの下の名前に一致するブロックデバイスエントリを探し/sys/blockます。このプロセスについては、ここで詳しく説明します

説明されているセットアップは、まずによって提供される環境などの最小限の環境で起動し、一時的なマウントポイントinitrdから実際のルートファイルシステムをマウントする必要があります。次に、ルートディレクトリをusingに変更します。/dev/sda1/mnt/rootfs/mnt/rootfs/chrootpivot_root(8)

これは、LinuX ContainersLXC)のルートファイルシステムのセットアップ方法に多少似ています。LXCは、Linux用のオペレーティングシステムレベルの仮想化実装です。オペレーティングシステムレベルの仮想化は、ハイパーバイザーによって管理される完全仮想化の軽量な代替手段として、仮想ホスティング環境で一般的に使用されています。オペレーティングシステムレベルの仮想化では、単一のオペレーティングシステムカーネルが複数の分離されたユーザー空間インスタンス間で共有されます。多くの場合、コンテナ、ジェイル、仮想プライベートサーバー(VPE)または仮想環境(VE)と呼ばれる各インスタンスは、本質的にホストシステム上の独自のディレクトリに格納された別個のオペレーティングシステムインストールです。


6

私は同じ問題に遭遇し、異なるシステム(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パッケージがアップグレードされるまで)。
chrootedシステムでは:

# 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を使用する必要はありません。

詳細については、boot_chrootを参照してください。


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

これで、path / to / chrootという名前のサブボリュームがで​​きました。で確認できますsudo btrfs subvol list /

これで、grubでサブボリュームレコードへのブートを作成できます。rootflags=subvol=path/to/chrootgrubメニュー項目でLinuxカーネルロード文字列に追加するか、これを使用て自動的にプローブします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.