「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すること
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
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"
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.
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
/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 |
chroot救済手順も含めた実機ハンズオンで、本番サーバーの障害対応スキルが身につきます。
>> Linux Master Pro Seminar 詳細・申込はこちら
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:LinuxのsystemdサービスをType別に設計する方法|simple・forking・notify・oneshotの使い分けとPIDFile設定
- この記事の属するカテゴリ:Linuxトラブルシューティングへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます