chrootコマンドでLinuxシステムを救済・修復する方法|起動不能・パッケージ破損・GRUB修復の実践手順

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > Linuxトラブルシューティング > chrootコマンドでLinuxシステムを救済・修復する方法|起動不能・パッケージ破損・GRUB修復の実践手順
「Linuxサーバーが起動しない。GRUB画面から先に進まない。」
「rootパスワードを忘れた。シングルユーザーモードにも入れない。」

サーバー管理の現場では、ある日突然こういう場面に直面します。
そのとき頼れるのが chrootコマンド を使ったシステム救済の手順です。

chroot(チェンジルート)は、「見かけ上のルートディレクトリを変える」コマンドです。
LiveDVDや救済モードで起動した最小環境から、故障したディスク上のLinuxシステムに「乗り移る」ことができます。
乗り移ってしまえば、passwd でrootパスワードをリセットしたり、dnf reinstall で壊れたパッケージを入れ直したり、grub2-install で起動ローダーを修復したりできます。

この記事では、Rocky Linux 9.4 / RHEL 9.4 の実機で確認した手順を解説します。
bind マウントの準備からchrootへの入り方、主要な修復タスク、exit後のアンマウント手順までステップで説明します。

この記事のポイント

・/proc・/sys・/dev のbindマウントを先に済ませないとchrootの中でコマンドが失敗する
・LVM構成では vgchange -ay でVGをアクティブにしてからマウントする手順が必須
・rootパスワードリセット・dnf reinstall・grub2-install はchrootの中から実行できる
・exitの後は bindマウントを逆順でumountしてからrebootすること


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

chrootとは何か — ルートディレクトリを一時的に変える仕組み

chrootは「change root」の略で、指定したディレクトリをそのプロセスの /(ルート)として扱うよう動作環境を切り替えるコマンドです。

chroot /mnt /bin/bash

このコマンドを実行すると、/mnt を "/" として新しいbashセッションが開きます。
そのbashから見えるファイルシステムはすべて /mnt 配下に限定され、元の "/" は見えなくなります。

重要な点が1つあります。カーネルはそのまま共有される、ということです。
chrootはファイルシステムの見え方を変えるだけで、動作中のカーネルは救済環境のものをそのまま使い続けます。
このため、カーネルが管理している /proc・/sys・/dev はchrootに入る前にbindマウントで準備しておかなければ、中でコマンドを実行しても正常に動きません。
これがbindマウントの必要性につながります(後述)。

chrootが役立つ場面

chrootが必要になる典型的なシナリオをまとめます。

・GRUB2が壊れてOSが起動しない — grub2-install / grub2-mkconfig をchrootの中で実行して修復
・rootパスワードを忘れた — chrootに入って passwd root でリセット
・カーネルアップデート後に起動失敗 — 古いカーネルで救済モード起動後、chrootから dracut で新しいinitramfsを再生成
・重要なライブラリやコマンドを誤って削除した — chrootで dnf reinstall / apt install --reinstall を実行して復旧
・SELinuxラベルが壊れてサービスが起動しない — chrootで touch /.autorelabel を実行してラベルを一括リセット

いずれも「OSが通常起動できない状態から」修復する操作です。
Linuxサーバーを本番運用するなら、この手順はいつか必ず使うことになります。

事前準備 — 救済モードからの起動とディスクのマウント

1. 救済モード(レスキューモード)でブートする

RHELやRocky Linuxでは、インストールメディアのブートメニューから「Troubleshooting」→「Rescue a Red Hat Enterprise Linux system」を選択します。
その後のメニューで「1) Continue」を選ぶと、ルートファイルシステムが /mnt/sysimage にマウントされた救済シェルが起動します。

インストールメディアがない場合は、GRUB2の起動メニューで対象カーネル行を選んで e キーで編集し、linux 行の末尾に rd.break を追加してブートする方法もあります(この場合は /sysroot にマウントされます)。

本記事ではインストールメディアを使った救済モードを前提に進めます。

2. ディスクのパーティション構成を確認する

救済シェルに入ったら、まず lsblk でディスク構成を把握します。

sh-5.1# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 50G 0 disk ├─sda1 8:1 0 1G 0 part ├─sda2 8:2 0 2G 0 part [SWAP] └─sda3 8:3 0 47G 0 part nvme0n1 259:0 0 200G 0 disk └─nvme0n1p1 259:1 0 200G 0 part

どのパーティションが "/" かわからない場合は blkid で確認します。

sh-5.1# blkid /dev/sda3 /dev/sda3: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" BLOCK_SIZE="4096" TYPE="xfs" PARTUUID="12345678-03"

LVM構成の場合は先にVGをアクティブにします:

sh-5.1# vgchange -ay 1 logical volume(s) in volume group "rhel" now active sh-5.1# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root rhel -wi-a----- 44.99g swap rhel -wi-a----- 2.00g

vgchange を忘れると、その後のmountが「No such file or directory」と失敗します。

3. ルートパーティションを /mnt にマウントする

パーティションが確認できたらマウントします。mount コマンドの使い方と基本は同じですが、マウント先を /mnt にします。

# 通常パーティションの場合 sh-5.1# mount /dev/sda3 /mnt # LVMの場合(例: VG名=rhel、LV名=root) sh-5.1# mount /dev/mapper/rhel-root /mnt # /boot が別パーティションの場合(GRUB修復が必要な場合は必須) sh-5.1# mount /dev/sda1 /mnt/boot

4. /proc・/sys・/dev を bindマウントする

これがchrootを成功させる上で最も重要なステップです。
省略するとchrootの中で多くのコマンドが「/proc/cpuinfo がない」「デバイスにアクセスできない」と失敗します。

sh-5.1# mount --bind /dev /mnt/dev sh-5.1# mount --bind /dev/pts /mnt/dev/pts sh-5.1# mount --bind /proc /mnt/proc sh-5.1# mount --bind /sys /mnt/sys sh-5.1# mount --bind /run /mnt/run

--bind は「同じデバイスを別のマウントポイントにも見せる」オプションです。
これにより、現在のカーネルが管理する /proc の中身を、chroot先の /mnt/proc としても参照できるようになります。

全部マウントできたか確認します。

sh-5.1# mount | grep /mnt /dev/mapper/rhel-root on /mnt type xfs (rw,relatime,attr2,inode64,logbufs=8,noquota) /dev/sda1 on /mnt/boot type xfs (rw,relatime,attr2,inode64,logbufs=8,noquota) devtmpfs on /mnt/dev type devtmpfs (rw,nosuid,size=1998936k,nr_inodes=4096,mode=755) devpts on /mnt/dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620) proc on /mnt/proc type proc (rw,nosuid,nodev,noexec,relatime) sysfs on /mnt/sys type sysfs (rw,nosuid,nodev,noexec,relatime) tmpfs on /mnt/run type tmpfs (rw,nosuid,nodev,mode=755)

chrootで修復環境に入る

bindマウントまで完了したら、いよいよchrootです。

sh-5.1# chroot /mnt /bin/bash

成功するとプロンプトが変わります。

bash-5.1# hostname prod-sv-01.example.local bash-5.1# uname -r 5.14.0-427.31.1.el9_4.x86_64

この時点で、あなたは故障したシステムの "/" に「乗り移っています」。
hostname を実行すると本番サーバーのホスト名が返り、uname -r でも本番カーネルのバージョンが確認できます。

PATHが通っていない場合は明示的に設定します。

bash-5.1# export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

ネットワーク経由でパッケージを取得する修復(dnf reinstall など)が必要な場合は、事前に /etc/resolv.conf をコピーしてDNSを使えるようにします(chrootに入る前に実行)。

# chrootに入る前の救済シェル側で実行 sh-5.1# cp /etc/resolv.conf /mnt/etc/resolv.conf

chrootで実行できる修復タスク

1. rootパスワードリセット

chrootの中でそのまま passwd を実行します。

bash-5.1# passwd root Changing password for user root. New password: Retype new password: passwd: all authentication tokens updated successfully.

これだけでrootパスワードがリセットされます。
SELinuxを有効にした環境では、再起動後にSELinuxがラベル確認を求めることがあります。その場合は touch /.autorelabel を実行してからexitしてください。再起動時にSELinuxが全ファイルのラベルを付け直し、完了後に通常起動します。

2. パッケージの再インストール

重要なパッケージを誤って削除した場合は dnf reinstall で再インストールできます。
rpm コマンドの使い方のように個別操作することもできますが、依存関係を自動解決できるdnfの方が救済時は効率的です。

# glibcを誤って削除した場合の例 bash-5.1# dnf reinstall glibc Last metadata expiration check: 0:02:34 ago on Fri Oct 2 14:23:41 2026. Dependencies resolved. =========================================================================== Package Arch Version Repository Size =========================================================================== Reinstalling: glibc x86_64 2.34-100.el9_4.1 baseos 1.9 M glibc-common x86_64 2.34-100.el9_4.1 baseos 434 k Transaction Summary =========================================================================== Reinstall 2 Packages Total download size: 2.3 M Is this okay [y/N]: y ... Complete!

3. GRUB2の修復

GRUB2が壊れてOSが起動しない場合は、grub2-install と grub2-mkconfig をchrootの中で実行します。

注意点が2つあります。/boot がbindマウントされていることと、インストール先がパーティションではなくディスク全体(/dev/sda)であることです。

# chrootの中で実行 bash-5.1# grub2-install /dev/sda Installing for i386-pc platform. Installation finished. No error reported. bash-5.1# grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-5.14.0-427.31.1.el9_4.x86_64 Found initrd image: /boot/initramfs-5.14.0-427.31.1.el9_4.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-1234abcd5678efgh Found initrd image: /boot/initramfs-0-rescue-1234abcd5678efgh.img done

UEFIブートの場合は /boot/efi もbindマウントが必要です。

# EFI用(chrootに入る前に追加) sh-5.1# mount /dev/sda1 /mnt/boot/efi # UEFIへのインストールコマンド bash-5.1# grub2-install --target=x86_64-efi --efi-directory=/boot/efi

chrootから抜けてアンマウントする

修復が終わったら、必ず逆の順序でアンマウントします。
順番を守らずに再起動すると、マウント済みのファイルシステムが破損したまま残るリスクがあります。

# まずchrootから抜ける bash-5.1# exit # bindマウントを逆順でアンマウント sh-5.1# umount /mnt/run sh-5.1# umount /mnt/sys sh-5.1# umount /mnt/proc sh-5.1# umount /mnt/dev/pts sh-5.1# umount /mnt/dev # /boot とルートの順にアンマウント sh-5.1# umount /mnt/boot sh-5.1# umount /mnt sh-5.1# reboot

umount が「target is busy」で失敗する場合は、fuser -vm /mnt で使用中のプロセスを確認してから終了させるか、umount -l /mnt(lazy umount)で遅延アンマウントします。

トラブルシュート — chrootで詰まる典型パターン

「chroot: failed to run command '/bin/bash': No such file or directory」

/mnt へのマウントが失敗しているか、マウントしたパーティションが正しいルートパーティションでない可能性があります。
ls /mnt/bin を実行して bash や ls などのコマンドが存在するか確認してください。

chrootの中でdnfが「Error: Failed to download metadata for repo」と言う

/mnt/etc/resolv.conf にDNSサーバーが設定されていないか、ネットワーク疎通がない可能性があります。
救済シェルで cp /etc/resolv.conf /mnt/etc/resolv.conf を実行してから試してください。

bindマウントを忘れてchrootに入ってしまった場合

exit して救済シェルに戻り、不足しているbindマウントを追加してからchrootし直してください。
dnfやrpmがエラーを出す場合は特に /proc のbindマウントが漏れていることが多いです。

# mountの状態を確認して足りないものを特定する sh-5.1# mount | grep /mnt /dev/mapper/rhel-root on /mnt type xfs (rw,relatime,...) # → /mnt/proc や /mnt/sys がなければbindマウントを追加する

SELinuxが有効な環境でrootパスワード変更後もログインできない

touch /.autorelabel を実行し忘れた可能性があります。
chroot環境で touch /.autorelabel を実行して再起動してください。
起動プロセス中にSELinuxが全ファイルのラベルを付け直します。数分かかりますが完了後に正常ログインできます。

Linux救済の手順は実際に手を動かして覚えるのが最も確実です。Linux Master Pro Seminar では、こうした障害対応を含めた実機ハンズオンで体系的に学べます。

本記事のまとめ

chroot救済の全体フローを表にまとめます。
ステップ やること コマンド
1 救済モードで起動 インストールメディアから「Rescue」を選択
2 LVMをアクティブ化(LVM構成時) vgchange -ay
3 ルートパーティションをマウント mount /dev/sda3 /mnt
4 /proc・/sys・/devのbindマウント mount --bind /proc /mnt/proc(他4つも)
5 chrootで修復環境に入る chroot /mnt /bin/bash
6 修復作業を実行 passwd root / dnf reinstall / grub2-install
7 exitしてアンマウント exit → 逆順で umount → reboot
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、
chroot救済手順も含めた実機ハンズオンで、本番サーバーの障害対応スキルが身につきます。
>> Linux Master Pro Seminar 詳細・申込はこちら

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。