やさぐれオペレーター日記

雰囲気でやってる元ネットワークエンジニアの日記

ラズベリーパイのSDカードが壊れたときのデータ救出について

SSHでのログインが拒否されたりその他サービスが不安定になり、ディスプレイにも何も表示されなくなってしまったので、やむなく、強制再起動を実施。
実施後に、下記のようなログが書き出されてループ状態になって起動しなくなってしまった。
blk_update_request: I/O error, dev mmcblk0, sector 820408 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0

retropie.org.uk

とりあえず、データをバックアップしていなかったので、救出するためにext4でデータを読み込む方法を考えた。
SDカードリーダを接続したWindows10のPCにVirutalBoxをインストールし、Debianからマウントしデータを読み出すことにした。
ファイルシステムext4で、WindowsでもExt2Fsdを使って読み込めるらしいが、不安だったのでLinuxで実施。バージョンによっては、WSL2でもマウントできるかもしれない・・・。

詰まったところとしては、なかなかSDカードリーダがVirtualboxのゲストOSで認識しなかったところと、マウントがうまくできなかったこと。
1つ目の認識しないのは、仮想マシンの設定のUSBの設定をガチャガチャしたり、ゲストを再起動したり、抜き差ししたり、起動しているVMのUSBメニューからクリックしてチェックしたり等を行った。
基本的には起動前からデバイスは接続しておいたほうが良さそう。

2つ目のマウントがうまくできなかったことは、SDカードかファイルシステムが壊れているからか、読み取り専用でしかマウントできなかったためで、下記手順でマウントして、cpすることができたのでメモとして残す。

具体的にはmountする際に、error mounting cannot mount read onlyというエラーが出た。
どのファイルをコピーしているか、ディレクトリ配下のファイルもコピーしたかったので、下記オプションで実施。
リダイレクトとかで取るのが普通だと思うが、考えるのが面倒だったので、scriptでログを取った。

# mount -o ro,noload /dev/sdb2 /mnt/drive
# script
# cp -aRv /mnt/drive/ /backup_sd/
# Ctrl + d

最後まで書いて、ほぼ同じような記事が見つかった・・・。

blog.hahasoha.net

以上