絖綛 N@i.jp  昨日:00044772
 今日:00047566
 総計:00099873
keywords
管理者専用
  Post   Add link   Control Panel 































新しいトピック
最新:03/21 19:08


新しいコメント
最新:07/28 16:47






管理人へMAIL

プライバシーポリシー

自宅サーバー(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をかける具体的な方法は、以下のようになる。

  1. nvramコマンドで "boot-args""-s" を設定し、起動モードをシングルユーザモードに設定する
  2. "/var/root" 配下に ".profile" ファイルを置き、このスクリプト内に以下を行うよう記述する
    1. シングルユーザモードで起動されている場合は fsck -fy を実行
    2. nvramコマンドで "boot-args"""(通常起動モード)に戻す
    3. "/var/root/.profile" ファイルを削除
    4. 再起動
  3. サーバーを再起動する

となる。
 これらの一連の処理を行うスクリプト "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)でデスクトップを開いてディスクユーティリティで起動ディスクを検証し、何も問題が検出されなければ修復完了である。


< 過去の記事 [ 7月の 自宅サーバ リスト ] 新しい記事 >

2018 calendar
7月
1234567
891011121314
15161718192021
22232425262728
293031


掲示板
最新:08/15 17:19


GsBlog was developed by GUSTAV, Copyright(C) 2003, Web Application Factory All Rights Reserved.