2019年7月17日水曜日

RHEL 7のemergency modeを体験した話

先日RHEL 7のディスクマウントの検証をしていた際に、OS再起動後、emergency modeになって正常に起動できなくなってしまった


対処した内容

rootパスワードでログインせよ、と記載されているのでrootパスワードを入力してログインしてみる。


ログインすると通常のコマンドを受け付ける状態になる。

emergency modeの冒頭のメッセージに記載されていたjournalctl -xbを素直に叩いてみる。すると、大量の起動時のログが出力されるので、ひたすらスペースキーを押して確認していくと、ログの終盤に赤字のエラーログを発見した。


メッセージは以下。
Time out waiting for device dev-mapper-rhel\x2ddata.device.
どうやらLVM2のデーモンがデバイスのタイムアウトで異常終了している模様。直前に設定した/etc/fstabがあやしいので確認してみると、デバイス名をミスっている。。。
[root@localhost ~]# cat /etc/fstab

/dev/mapper/rhel-root   /                       xfs     defaults        0 0
UUID=1b3eb24d-7d2c-4023-9d4d-933bea63cd3f /boot                   xfs     defaults        0 0
/dev/mapper/rhel-swap   swap                    swap    defaults        0 0
/dev/mapper/rhel-data   /data                   xfs     defaults        0 0
 ↑★rhel-dataではなくdata-dataが正しい
上記を修正して再起動すると、問題なく起動することができた。よかったよかった。

……と思ったのだが、fstabの記述ミスはともかく、障害等でディスクが見えない状況となった場合もemergency modeになってしまい、OSが起動できなくなるという問題がある。

そこで今回は、もしマウントが失敗する場合であっても、該当のマウント処理をスキップしてOSを起動させる方法も調べてみた。

回避策「fstabでnofailをオプションを指定する」

emergency modeとなった原因の「/etc/fstab」は、以下構文で記載する。

<ストレージデバイス> <マウントポイント> <ファイルシステム> <マウントオプション> <dumpコマンドの対象とするか> <起動時にfsckでファイルチェックを行うか>

上記の「マウントオプション」は通常defaultsのみ指定をすることが多いが、ここにnofailオプションも追加し、nofail,defaultsを指定する。このオプションにより、OS起動時にストレージデバイスが存在しない場合でもエラーとならず、OS起動に成功する

# cat /etc/fstab
/dev/mapper/rhel-root   /                       xfs     defaults        0 0
UUID=68f1f8f7-ab56-410a-aa4c-8401fc6f7894 /boot                   xfs     defaults        0 0
/dev/mapper/rhel-swap   swap                    swap    defaults        0 0
/dev/mapper/vg_sdb1-lv_sdb1   /                 xfs     nofail,defaults 0 0 ←★nofailを指定

「/var/log/messages」にはemergency mode時と同様に、Timed out waiting for device dev-mapper-vg_sdb1\x2dlv_sdb1.device.のエラーメッセージが出力されるが、その後Startup finishedと表示されており、起動に成功していることがわかる。

# tail /var/log/messages
Aug 29 16:01:01 localhost systemd: Removed slice User Slice of root.
Aug 29 16:01:37 localhost systemd: Job dev-mapper-vg_sdb1\x2dlv_sdb1.device/start timed out.
Aug 29 16:01:37 localhost systemd: Timed out waiting for device dev-mapper-vg_sdb1\x2dlv_sdb1.device.
Aug 29 16:01:37 localhost systemd: Dependency failed for /mnt2.
Aug 29 16:01:37 localhost systemd: Job mnt2.mount/start failed with result 'dependency'.
Aug 29 16:01:37 localhost systemd: Startup finished in 498ms (kernel) + 3.065s (initrd) + 1min 30.363s (userspace) = 1min 33.927s.
Aug 29 16:01:37 localhost systemd: Job dev-mapper-vg_sdb1\x2dlv_sdb1.device/start failed with result 'timeout'.
Aug 29 16:01:49 localhost systemd: Created slice User Slice of root.
Aug 29 16:01:49 localhost systemd: Started Session 2 of user root.
Aug 29 16:01:49 localhost systemd-logind: New session 2 of user root.

上記設定をしたのち、試しに仮想ディスクを取り外した状態で仮想マシンを起動させてみたところ、問題なく起動することができた。

2 件のコメント:

  1. 最初のルートパスワードを入力することすら知らず、途方に暮れておりました。 大変有用な情報ありがとうございました。

    返信削除

人気の投稿