自宅(実家)に置いた Ubuntu サーバーが、停電をきっかけに起動不能になった事例。
Nextcloud が停止しただけでなく、リモート管理に使っていた Tailscale にも接続できなくなり、遠隔からは一切手が出せない状態になった。
原因は Tailscale ではなく、/etc/fstab に書いた外付け HDD のマウント失敗だった。
概要
| 項目 | 内容 |
|---|---|
| 構成 | Ubuntu + Nextcloud、データ用に NTFS の外付け HDD を /etc/fstab で自動マウント |
| きっかけ | 停電によるサーバーの強制電源断 |
| 事象 | 再起動しても OS の起動が完了せず(emergency mode で停止)、Nextcloud・Tailscale ともに応答しない |
| 原因 | NTFS が不整合(dirty)になりマウントに失敗。必須でないディスクが起動を止めた |
| 対処 | マウントを解除して通常起動させ、ntfsfix で修復してから再起動 |
| 恒久対策 | /etc/fstab に nofail を追加。あわせて UPS を導入 |
構成
諸事情で実家にサーバーを置いていて、実家と離れたところで一人暮らしをしているため、この構成になっている。 さらに、これもまた諸事情で、NTFSで運用をしている。
| 項目 | 内容 |
|---|---|
| ハード | n100 minipc |
| OS | Ubuntu(systemd を使う Linux 全般で同様) |
| ストレージ | 外付け HDD をデータ置き場として使用(Nextcloud からは外部ストレージとして参照) |
| ファイルシステム | NTFS(カーネル内蔵の ntfs3 ドライバでマウント) |
| マウント方法 | /etc/fstab に記載し、起動時に自動マウント。nofail なし |
| リモート管理 | Tailscale で VPN に入り SSH。物理コンソールへのアクセス手段は無い |
症状
- Nextcloud に HTTP でアクセスできない
- Tailscale の管理画面上でサーバーがオフラインのまま
- SSH も当然通らない
- 電源ボタンで再起動しても、症状が変わらない
ITに詳しくない親に再起動は頼めたが、VPNに入ってくれず操作ができなかった。 さらに、ビデオ電話で電源が入っていることが確認できた。
この時点で電源が入っているのにVPNに入らず、現地に行って修正しなければならないことが確定した。
確認・修正
約1ヶ月後、実家に帰省することができ、そこで行ったトラブルシューティングの結果をまとめる。
ディスプレイを繋いで電源を入れ、 emergency mode に入り、起動ログをみた
journalctl -xb
ログを見ると、HDDのマウントに失敗しているようだった。 マウントを解除し、問題のディスクを切り離した状態で起動を続行させると、最後まで起動し、Tailscale も上がった。
ここまで来れば、あとは通常のメンテナンス作業になる。 起動した状態で、あらためて NTFS の修復コマンドを実行した。
sudo ntfsfix /dev/sdXn
再起動すると起動時の自動マウントも通り、正常に起動した。
なお ntfsfix は名前ほど万能ではない。
主に行うのは dirty フラグのクリアで、ファイルシステムを全面的に検査して直すツールではない。
今回のように電源断で dirty になっただけなら十分だが、実際に構造が壊れている場合は Windows に繋いで chkdsk /f を実行する必要がある。重要なデータが入っているなら、実行前に退避しておくほうが安全である。
対策
1. マウント失敗で起動を止めない
今回いちばん困ったのは、データが見えなくなったことではなく、VPN に入れなくなったことだった。そこで「多少のマウント失敗は許して、とにかく起動して VPN に入る」ようにする。
/etc/fstab のマウントオプションに nofail を追加した。
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt/nextcloud-data ntfs3 defaults,nofail 0 0
書式は defaults の後ろにカンマ区切りで足すだけでよい。
これで、HDD やファイルシステムに問題が起きても OS と Tailscale は起動する。
Nextcloud のデータは見えないままだが、リモートから入って直せる状態は残る。
2. UPS の導入
引き金である停電そのものへの対策として、UPS を導入した。
短時間の停電であれば、電源断によって、NTFSが壊れることそのものを回避できる。 minipcなので、電源容量はかなり小さい。さらに個人規模で使用するので、それに見合ったものをチョイスした。 Amazon.co.jp: SX550UJP CyberPower UPS 無停電電源装置 常時商用給電 矩形波 550VA/330W : DIY・工具・ガーデン ちょうど良い容量で、リーズナブルで、コンセントが多い。 さらに、自動シャットダウンもでき、おすすめである。
この事例から言えること
1. 必須でないディスクを /etc/fstab にそのまま書くと、可用性が最も弱いディスクに引きずられる。
nofail の有無で、影響範囲が「データが見えない」か「サーバーが起動しない」かに分かれる。
2. 遠隔地のサーバーでは、「壊れないこと」より「壊れても入れること」を優先して設計する。 実際の作業時間は数分だったが、復旧までは約1ヶ月かかった。 時間を決めたのは障害の重さではなく、管理経路が同時に失われたことだった。 OS と VPN さえ起動すれば、残りは遠隔で対応できるはず。