【備忘録】ラズパイ4が急に起動しなくなったので復旧した

ラズパイをサーバーにしてnode.js開発を行っているのですが、 最初に設定したときにphpmyadminにてテーブルを選択した際に 毎回エラーが発生していました。

特に害は無かったので放っておいたのですが、 エラー表示によりスクロールが一番下に行ってしまうのが鬱陶しかったので 修正の方法を探してみると案外簡単に見つかったので対処してみて再起動したところ SSHにつながらなかったのでどうしたのかと思ってモニタに繋いでみたらブートローダーが死んだっぽい感じがしました。

VPNで色々弄ってたのが悪さしたのかphpmyadminの変更点がトリガーとなったのかは ちょっとわからないのですが、とりあえず復旧したのでメモしておこうと思います。

ブートローダーのファイルが死んだので復旧

事の発端としてブートローダーがなぜ死んだとわかったのか。

エラーコードとしては起動時にSDカードをチェックしていて

recover4.elf not found (6)
recovery.elf not found (6)
start4.elf not found (6)
start.elf not found (6)
Firmware not found
ERROR: 00000004

というエラーが出ていました。

elfファイルが見つからない?しかもstartってことはブート周りの問題。 SDカード自体は抜き差しすると読み込んでいるようで問題はなさそうでした。

「Raspberry ERROR:00000004 elf」

的な検索をしていると同じ状況になっている人がちらほら居たので 色々調べてみるとブートローダーのファイル破損が原因の可能性があるとのことで 以下の方のツイートをみてgithubからBootファイルを落としてきて上書きすることにしてみました。

https://github.com/raspberrypi/firmware

ラズパイ用になったSDカードはWindowsでは読み込めないのですが Bootファイルが入ったパーティションだけはどうやら読み書きができるようで助かりました。

とりあえず元々入っているファイルのバックアップを取ってから ダウンロードしたブートファイルをすべて上書きして再びラズパイに戻すと無事起動してくれました。

最初はSDカードチェックで少し時間がかかりましたがなんとか復旧です。

仕事してる最中にぶっ飛ぶのは恐ろしいですね…… ラズパイ3も余っているので飛んだ時用にすぐ差し替えられるようにしておいたほうがよさそうです。

もしくはWindows側でXAMPPの準備とか。

VPNは不要になったので一旦自動起動を辞めて封印

復旧したついでに構築したけど結局使わなくなったVPN関連の起動を止めることにしました。

その際にブリッジ接続なんかの解除をしようとしてifconfigコマンドで確認したりしていると、 何故かwlan0が無くなっておりラズパイ4がWi-Fiに接続できなくなっていました。

色々調べていると問題があったときに自動的にWi-FiのデバイスがOFFになることがあるとのことで 以下のURLの通りやったら解決しました。

https://qiita.com/hiden_no_tare/items/7c48adf05833d230cdc6

上記の参考はラズパイ3B+ですがラズパイ4でも有効でした。

phpmyadminのエラー

ラズパイからちょっとずれちゃうのですが、今回ブートローダーが死ぬ直前にやってたのが phpmyadminででてたエラーの解消なのですが、どうやら一部バージョンでは 特定のファイルにカッコを付け足さないとエラーがでてしまうそうです。

https://qiita.com/nanbuwks/items/2277dd308ddd0f1ee4dc

参考はubuntuのものですが、ラズパイも同じdebian系列なので同じ方法で解決できました。

どうやらcount関数をカッコで囲まないとダメなようです。

システム側で対処しといてよって話ですね。

エラーでてても特に害はなかったのですがストレスは溜まってました。

サーバーのバックアップはとっておこう

サーバーっていつぶっ飛ぶかわからないのが怖いところですよね。

定期的にバックアップを取るべきだなと再認識しました。

ラズパイでDockerを走らせてもいいのですが、重いのであまりオススメはしないと言われたので 直接サーバー関連を立ち上げて運用してたのですがDockerと比べて復旧が面倒臭いのがやっぱりありますね。

私は基本的に開発しているデータはgithubやWindows側で管理しているのと、 サーバーとDBの用途でしか使ってないのでぶっ飛んでもさほどダメージはないのですが 再構築するための時間が削られるというのが一番つらいです。

DBに色々描きこんでいくタイプのものだったらとりあえずSQLのデータさえバックアップ取っておけばいいかなと思います。

後はサーバーを構築するときに記述した設定ファイルなんかもバックアップ取っておくと 再構築のときにファイルコピーだけである程度ことは済みそうです。