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
、...)
これは、ブートローダーやカーネルでは実行できません。 _root=/dev/sda1
_などのカーネルroot
オプションのパラメーターは、標準のUnixパス名のように見えますが、そのようなパス名は、現在マウントされているファイルシステムに従って解釈されます。 root
オプションが解釈された時点で、マウントされたファイルシステムはありません。まあ、ほとんどありません。カーネルの初期化時に、start_kernel()
を実行する初期プロセスのルートとしてマウントされた、ramfs
という最小限のrootfs
ファイルシステムのインスタンスがあります。 root
オプションパラメータの実際の解釈は、name_to_dev_t()
と呼ばれるルーチンで行われます。サポートされている構文の1つは_/dev/name
_形式です。この場合、nameは、sysfs
ファイルシステムをrootfs
root、および_/sys/block
_でnameに一致するブロックデバイスエントリを探します。このプロセスについて詳しく説明します here 。
説明されている設定は、最初にinitrd
によって提供されるような最小限の環境で起動し、_/dev/sda1
_から実際のルートファイルシステムを一時的なマウントポイントにマウントすることによって行う必要があります。 _/mnt/rootfs
_、次に pivot_root(8)
を使用してルートディレクトリを_/mnt/rootfs/chroot
_に変更します。
これは、LinuXコンテナ( [〜#〜] lxc [〜#〜] )のルートファイルシステムの設定方法と多少似ています。 LXCは、Linux向けのオペレーティングシステムレベルの仮想化実装です。オペレーティングシステムレベルの仮想化は、ハイパーバイザーによって管理される完全仮想化の軽量な代替手段として、仮想ホスティング環境で一般的に使用されています。オペレーティングシステムレベルの仮想化では、単一のオペレーティングシステムカーネルが複数の分離されたユーザー空間インスタンス間で共有されます。コンテナ、刑務所、Virtual Private Server(VPE)またはVirtual Environment(VE)と呼ばれる各インスタンスは、基本的に個別ですホストシステム上の独自のディレクトリに格納されているオペレーティングシステムのインストール.
私は同じ問題に遭遇し、結局 これを書いている が異なるシステムで問題なく動作するようになりました(現在、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 を参照してください。
はい、 Btrfsサブボリュームを使用してトリックを実行できます 。
最初に ここで説明するようにext4をbtrfsに変換する する必要があります。
Chrootをsubvilumeに変換します(まだ変換していない場合)。
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/chroot
をLinuxカーネルロード文字列に追加して、GRUBメニュー項目で自動的にプローブするか、 this を使用します。