自宅サーバー(Mac mini)をリモートで強制fsckして修復
台風12号による停電で、このサーバー(Mac mini)も被害を被りました
これは自分のための備忘録です。最近のmacOSを使用している方には全く役に立たない情報ですが、御了承ください。
1. 自宅サーバー(Mac mini)が停電で落ちた
台風12号により東海地方では広範囲の停電に見舞われた。中部電力の復旧作業は強風のため行うことができず、停電は数時間に及んだ。このサーバー(Mac mini)がある地域も4〜5時間停電していた。
このサーバーではUPS(無停電電源)によって電源をバックアップしていたのだが、最後にバッテリーを交換したのは2011年のこと。もう7年以上前なのでバッテリーが寿命を迎えていたのだろう。後になって判った事だが、停電後数分でサーバー(Mac mini)への電源供給が断たれ、正常にシャットダウンする間持たなかったようだ。
2. 台風一過
夜が明けると台風は過ぎ去り、停電も復旧していた。サーバー(Mac mini)の電源は落ちたままだったので、電源を入れたいが、実はこのサーバー(Mac mini)は現在の(仮)住まいではなく、車で数十分の距離にある実家に設置してあるのだ。本来なら実家まで行き、電源を入れなければならないところだが、幸いなことにWeMoというスマートプラグによって遠隔から電源を操作することができる。またサーバーも停電後に自動的に再起動する設定になっているし、WOL(Wake on LAN)による起動も可能な設定にしてある。要するに実家まで行かなくとも電源は入れられるというわけだ。
3. リモートで電源を入れたところ
ともかくWeMoで電源を入れたところ、暫くして何事もなかったかのように起動し、ホームページが復活。VPN接続も復旧し、画面共有(VNC)によってサーバーのデスクトップにもアクセス可能となった。
ここまではヤレヤレと胸をなで下ろしていたのだが、シスログで停電後にシャットダウンできていない事を知り、ディスクユーティリティでMacOS Xの起動ディスクを検証させてみたところ、赤い字で
ボリュームヘッダに若干の修復が必要です
と表示された。
最近のmacOSであれば、起動ディスクの修復も可能だが、このサーバー(Mac mini)のMacOS Xは何せ古い。起動ディスクを修復するためには、MacOS XのインストールDVDなど別の起動ディスクから起動してディスクユーティリティを使うか、ブート時にCommand+Sキーを押下してシングルユーザモードで起動しfsckコマンドで修復することになる。つまり、実際にサーバー(Mac mini)の前まで行かなければならないわけだ。これは面倒だし、せっかく電源をリモート制御できるようにした意味がない。そこで、リモートから起動ディスクの修復を試みることにした。
4. ブート時に強制fsckさせる
MacOS Xでブート時に強制的にfsckをかける具体的な方法は、以下のようになる。
- nvramコマンドで
"boot-args" に "-s" を設定し、起動モードをシングルユーザモードに設定する
"/var/root" 配下に ".profile" ファイルを置き、このスクリプト内に以下を行うよう記述する
- シングルユーザモードで起動されている場合は
fsck -fy を実行
- nvramコマンドで
"boot-args" を "" (通常起動モード)に戻す
"/var/root/.profile" ファイルを削除
- 再起動
- サーバーを再起動する
となる。
これらの一連の処理を行うスクリプト "force_fsck_reboot.sh" は以下のようになる。
#!/usr/bin/env bash
#
# 強制的に fsck -fy を実行するようにして再起動する
# 使用方法:sudo force_fsck_reboot.sh
#
# root check
if [ ${EUID:-${UID}} != 0 ]; then
echo "This script must be run as root"
exit 2
fi
cat <<EOF >/var/root/.profile
# modify Single User mode for auto fsck -fy
if [ $HOSTNAME = localhost ] || [ -z $SECURITYSESSIONID ]; then
/bin/sleep 5
fsckResult=$(/sbin/fsck -fy)
echo "$fsckResult"
/sbin/mount -uw /
echo "$fsckResult" >> /var/log/fsck.log
/bin/rm /var/root/.profile
nvram boot-args=""
/bin/sleep 5
/sbin/shutdown -r now
fi
EOF
# シングルユーザモードで再起動させる
nvram boot-args="-s"
/sbin/shutdown -r now
|
このスクリプトをroot権限で実行させる。
$ sudo ./force_fsck_reboot.sh
|
すると再起動がかかり、数分後には起動ディスクが修復された状態で起動するはずだ。その後、"/var/log/fsck.log" を見て fsck の結果を確認し、念のため画面共有(VNC)でデスクトップを開いてディスクユーティリティで起動ディスクを検証し、何も問題が検出されなければ修復完了である。
|