chroot は便利な復旧手段ですが、完全な仮想マシンやセキュリティサンドボックスではありません。1. chroot とは#
chroot(change root)は、プロセスから見えるルートディレクトリ / を、指定したディレクトリへ一時的に変更する仕組みです。主に次の用途で使われます。
- 起動できなくなった Linux の復旧。
- 別のルートファイルシステムからの設定変更。
- パッケージやブートローダーの修復。
- テスト用の限定的なファイルシステム環境。
ただし、chroot はカーネルやプロセスを分離しません。ホスト側の root 権限を持つプロセスから安全に隔離する仕組みではないため、コンテナや仮想マシンの代わりにはなりません。
2. 典型的な準備#
以下は /dev/sdXX を修復対象のルートパーティション、/dev/sdaXX を /home パーティションとする例です。実際のデバイス名は必ず lsblk で確認してください。
sudo mount /dev/sdXX /mnt
sudo mount /dev/sdaXX /mnt/home # /home が別パーティションの場合
sudo mount --rbind /dev /mnt/dev
sudo mount --make-rslave /mnt/dev
sudo mount --rbind /proc /mnt/proc
sudo mount --make-rslave /mnt/proc
sudo mount --rbind /sys /mnt/sys
sudo mount --make-rslave /mnt/sys
sudo mount --rbind /run /mnt/run
sudo mount --make-rslave /mnt/run
# ネットワークを使う場合。シンボリックリンク構成によって方法が異なる
sudo cp -L /etc/resolv.conf /mnt/etc/resolv.conf
sudo chroot /mnt /bin/bash--rbind と --make-rslave は、/dev/pts などの下位マウントもまとめて扱うための一般的な方法です。環境によっては個別の --bind でも動作します。
3. 何をマウントするのか#
/proc#
プロセス、CPU、メモリ、カーネルパラメータなどを公開する仮想ファイルシステムです。ps や top などのコマンドがシステムの状態を確認するために利用します。
sudo mount --rbind /proc /mnt/proc
sudo mount --make-rslave /mnt/proc/sys#
デバイス、バス、ドライバ、電源管理などの情報を公開する sysfs です。udevadm やハードウェア関連のツールが利用します。
sudo mount --rbind /sys /mnt/sys
sudo mount --make-rslave /mnt/sys/dev と /dev/pts#
/dev にはディスク、端末、USB などのデバイスノードがあります。/dev/pts は SSH やシェルが使う擬似端末を提供します。
sudo mount --rbind /dev /mnt/dev
sudo mount --make-rslave /mnt/dev/dev を再帰的にバインドすれば、通常は /dev/pts も含まれます。
/run#
現在実行中のシステムが作成する PID ファイル、ソケット、サービス状態などを保持します。復旧作業で systemd やサービスの情報が必要な場合に利用します。
sudo mount --rbind /run /mnt/run
sudo mount --make-rslave /mnt/run/etc/resolv.conf#
DNS サーバーの設定です。chroot 内でパッケージを更新する場合など、名前解決に必要になることがあります。
sudo cp -L /etc/resolv.conf /mnt/etc/resolv.confシステムによっては /etc/resolv.conf が systemd-resolved のソケットや別ファイルへのシンボリックリンクになっています。その場合は、コピー後のリンク構成を確認してください。
/tmp#
一時ファイルを必要とするプログラムを動かす場合は、/tmp も用意できます。ただし、すべての復旧作業に必須ではありません。
sudo mount --bind /tmp /mnt/tmp4. chroot に入った後の例#
sudo chroot /mnt /bin/bash
export HOME=/root
export LC_ALL=C
# 例:GRUB を再インストールし、設定を生成する
grub-install /dev/sda
grub-mkconfig -o /boot/grub/grub.cfgUEFI システムを修復する場合は、ESP を正しい場所へマウントし、grub-install の対象と EFI 変数の利用可否を確認してください。
5. 終了とアンマウント#
exit
sudo umount -R /mnt/dev
sudo umount -R /mnt/proc
sudo umount -R /mnt/sys
sudo umount -R /mnt/run
sudo umount /mnt/home # 別パーティションをマウントした場合
sudo umount /mntアンマウントに失敗した場合は、chroot 内のシェルや作業ディレクトリが /mnt 配下に残っていないか確認してください。


