【centos7】ファイル破損エラーがいっぱいでた

アザラシです。今回主に問題だったのは
メインマシンのモニターを確認したところ
internal error xfs_iread ~~~~~~~ xfs_repair /dev/dm-0

のようなエラーが滅茶苦茶出てました。
多分エラー落ちとかで電源直落ちしたときに
ファイルエラーを起こしてしまったんだと思います。

特に動作に問題はなかったのですが、
サーバーの機能切り分けのついでに修復しました。
どんなことをしたのかメモ代わりに書いておきます。

0.参考サイト様

さくらVPS(CnetOS7)が起動しなくなったので、ブート領域を修復した話
CentOS / RHEL 7 : How to boot into Rescue Mode or Emergency Mode
【 xfs_repair 】コマンド――XFSファイルシステムを検査、修復する
【CentOS7】シングルユーザモード(rescue.target)への移行方法

1.起きてたこと

起因は違いますが、参考サイト様と同様のエラーが出ていました。
エラーの一部はこちらです。
internal error xfs_iread ~~~~~~~ xfs_repair /dev/dm-0

特に動作に支障はなかったのですが、ずっと出ているのも精神衛生上良くないので
とりあえず修復しようと試み、参考サイト様でやっていた
エマージェンシーモードで起動し修復するの試してみました。

2.やったこと

参考サイト様とは多少違うやり方になりますが、やってることは
同じになります。
まず、該当のサーバーでrootにてログインします。

破損の度合いによってはそもそも起動できない、もしくは
起動はできてもログインできないなどがあるかもしれません。
起動できない場合は、インストールディスクからレスキューモードで
修復するやり方を試したほうがいいかと思います。

rootログイン後、コマンドで
# systemctl emergency
と打ち込むことで、エマージェンシーモードに切り替わります。

ある程度するとrootのパスワードを求められるので、
そこでrootのパスワードを打ち込みエンターを押します。
押すことで、いつもどおりにログインがされます。

で、今回修復したいのは
/dev/dm-0
です。これを修復します。

エラーログでも書かれていたのですが、
xfs_repair を使用せよ。
と書かれていたので、こちらで修復します。

# xfs_repair -Lv /dev/dm-0
オプションについては参考サイト様に詳しく記載されていますが、
今回使用したオプションについて軽く触れておきます

-L ログを強制的に消去
今回ログファイル系が破損しているようだったのでこちらを使用しました。
-v 実行時のメッセージを詳しく表示する。

で、先程のコマンドを実行したところ
/dev/dm-0/ is mounting
のようなエラーが出てしまいました。

このときに、あれ?本当にエマージェンシーモードに
切り替わってるよな?という多少の疑念が出たため、
一応確認するためにこのようなことをしました。

# systemctl list-units –type target
こちらを打ち込んだところ、エマージェンシーモードになっていることが
確認できました。よかった

エマージェンシーモードだからある程度察して
アンマウントしてくれてるとかそういうことはないのね。
と思い、 umount /dev/dm-0 をし、再度先程の修復コマンドを実行。

修復自体はそんなに時間はかかりませんでした。(1分もかからなかったような)
で、終わったら、修復完了しましたよ。というメッセージが出たので
reboot をかけ終了。その後エラーを見るものはいなかった。

3.終わりに

OSに関係するファイル破損は初めてだったので、少々怖かったのと
本当に実行していいのかわからないという不安もあり、
丁寧に調べながら実行しました。

今回の場合はあっさりできてしまいましたが、
本当は、該当のディレクトリを dd コマンドなどで、イメージ化し
他のPCで復旧をするのがベターかもしれません。