それまでは問題なく利用していたRaspberry piが、突然起動しなくなってしまいました。
どうやらファイルシステムが破損してしまいrootをマウントできていない模様。
具体的には、コンソールの最終行に「end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,6)」と出力されて停止している状態でした。
SDカードリーダが搭載されているWindowsノートPCでリカバリができましたので、手順をまとめておきます。
(NOOBSでRaspbianを入れた環境です)
また、以下の工程では、オペミス等でリカバリに失敗して完全にデータが失われてしまう可能性もあるため、事前にWin32DiskImager等でディスクイメージ毎バックアップを取っておくことをお勧めいたします。
(ファイルシステムが破損する前にバックアップを取得しておけばよいわけですが…)
SDカードを認識してfsckコマンドを実行できる環境の準備
結局はこの副題が全てなわけですが、該当するようなLinuxマシンが手元になかったため、WindowsのノートPC上に仮想環境を構築しました。
VirtualBoxとVMware Playerの両方で試してみましたが、個人的にはVMware Playerの方がSDカードの認識部分においてわかりやすかったです。
VMware Playerは個人用途ならば無償で利用できるため、適時ダウンロードして導入してください。
OSはFedoraをお勧めします。
当初は使い慣れていて既に環境構築済みのCentOSでやったのですが、カードの認識がうまくいかなかったりドライバが足りなかったりと、最終的に成功したとはいえ、色々と面倒でした。
で、Fedoraならば新し目の要素も対応しているかなと思い試してみた結果、追加で何も設定しない素の状態でSDカードを認識して、リカバリまで持っていけました。
デバイスを接続してfsckを実行
VMware Playerでは親機に接続されている機器を仮想マシンに認識させることが可能ですので、ノートPCに搭載されているSDカードリーダにカードを差し込みます。
この時、初めからカードを差し込んだ状態で、仮想マシンを後から起動しても問題ありませんが、複数のデバイスが選択可能な場合、どれがSDカードリーダなのか案外わかりにくかったりします。
仮想マシンを起動後にカードを差し込みますと、新規の取り外し可能デバイスとして、以下のようなウィンドウがポップアップされますのでわかりやすいかと思います。
その後、実際に仮想マシンに認識させる際は、VMware Playerのメニューを「Player」→「取り外し可能デバイス」→「SDカードリーダ名」→「接続(ホストから切断)」の順番で選択します。
うまく認識してくれると、/dev配下にデバイスが追加されます。
筆者の環境の場合では、以下のようにデバイスが追加されました。
(CentOSでやった際は/dev/sdb〜として認識されましたので、必ずしも下記の限りではありません)
mmcblk0
mmcblk0p1
mmcblk0p2
mmcblk0p3
mmcblk0p5
mmcblk0p6
で、とりあえず一通りのデバイスにfsckを打ち込んでみましたが、mmcblk0p6にエラーがあったようで、結構な数のエラーが出力されました。
出力されるエラーに対しては、基本的にyで修復を了承していくだけで問題ありません。
修復が完了後は、Raspberry Piに戻して起動できるか確認しましょう。
(ファイルの救出が目的の場合は、Raspberry Piに戻さず、仮想環境から直接マウントしてファイルを取得することも可能です)
タグ:Raspberry Pi