私のハードドライブに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です。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)は、デフォルトでホストシステムの独自のディレクトリにある別々のオペレーティングシステムのインストールです。
答え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/chroot
grubメニュー項目からLinuxカーネルロード文字列を追加するか、以下を使用します。これ自動検出。