web-dev-qa-db-ja.com

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、...)

13
skrepki

これは、ブートローダーやカーネルでは実行できません。 _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)と呼ばれる各インスタンスは、基本的に個別ですホストシステム上の独自のディレクトリに格納されているオペレーティングシステムのインストール.

7
Thomas Nyman

私は同じ問題に遭遇し、結局 これを書いている が異なるシステムで問題なく動作するようになりました(現在、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 を参照してください。

6
lemonsqueeze

はい、 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 を使用します。

3
Sergei