initramfsイメージを手動で構築したり、パーティションにgrubをインストールしたり、破損したインストールを修復するときにLive CDからOSにルートを移動するだけで、オンラインで多くの例を見ることができます。
今、chroot自体の概念は理解するのが難しくありません。ルートを指定したディレクトリに変更し、そのルートを使用してシェルを起動するだけです。必要に応じて環境変数を設定することもできます。
私を混乱させることは、実際のchrootを実行する前に進行する準備、特に仮想ファイルシステムのマウントです。
次の例を見てください。
まず/rootパーティションをマウントします。
$ mount -t ext4 /dev/sda5 /mnt/ubuntu
次に、仮想ファイルシステムをマウントします。
$ mount -t proc none /mnt/ubuntu/proc
$ mount -o bind /dev /mnt/ubuntu/dev
$ mount -o bind /sys /mnt/ubuntu/sys
これが私を混乱させることです。この仮想ファイルシステムはLiveCD用ですか?ルートを変更したいオペレーティングシステムでどのように機能しますか?彼らは他のオペレーティングシステムに属します。
たとえば、回答以前の質問に対してインストールに上記のコマンドが必要なのは、update-initramfs
カーネルイメージを作成する前にオペレーティングシステムに関する情報が必要なためです。それでは、ここでどのようにこれが起こりますか?カーネルイメージをビルドしたOSではなく、LiveCDからファイルシステムをマウントしています。したがって、ターゲットオペレーティングシステムの情報ではなく、LiveCDの情報を使用します。 これはLiveCD用のカーネルイメージを作成するのと同じです。理想的なものは何ですか? (間違っている場合は訂正してください)
そしてなぜ必要ですか?ただインストールするのではなく、バンドルでインストールするのはなぜですか?
これまで、この例では通常、上記の手順を実行した後に実際のchrootコマンドが実行されます。
$ chroot /mnt
これまで、上記の問題の明確な説明が見つかりませんでした。誰かが素人の言葉で説明できることを願っています。
答え1
/proc
実行中のカーネルへのインターフェースであり、/sys
実際にインストールされているオペレーティングシステムとは関係ありません。/dev
とにかくすべて同じです。
ほとんどのプログラムにはこれらのディレクトリが必要です。ただし、事前に準備する必要はありませんchroot
。chroot
純粋なルートボリュームに移動して、そこから残りをインストールできます(OSが起動するときと同じように)。