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(例:)root=/dev/sda1は標準のUnixパス名と似ていますが、これらのパス名は現在マウントされているファイルシステムに基づいて解釈されます。このオプションを説明するときrootいいえマウントされたファイルシステム。まあ、ほとんどそうではありません。カーネルが初期化されると、初期実行プロセスのルートとして機能するMountedramfsという最小ファイルシステムインスタンスがあります。オプションパラメータの実際の解釈は、名前付きルーチンで実行されます。サポートされている構文の1つはformatです。rootfsstart_kernel()rootname_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/chrootgrubメニュー項目からLinuxカーネルロード文字列を追加するか、以下を使用します。これ自動検出。

関連情報