こんにちは!BFT名古屋支店の猫です。
とある事情によりRaspberry Piで使用しているSDカード内のデータを取り出す必要に迫られたのですが、意外と躓いてしまったので記事にしたいと思います
- ラズパイで使用しているSDカードをWindows PCで読み書きしたい
- 人の失敗談が好き
という方はぜひ読んでみてください。
結論だけ知りたい方はこちら
背景
ラズパイのOSが起動しなくなった
こんどる?というサービスでRaspberry Pi 4を使用しているのですが、ファイルの権限を変更しようとした際にディレクトリ指定を誤ってコマンドを実行してしまいました。
# 正しいコマンド $ sudo chmod -R 644 /opt/CondorU/source/lib # 誤ったコマンド(絶対やっちゃダメ!) $ sudo chmod -R 644 /lib
これによりsudoコマンドは使えないわ、再起動してもOS起動できないわの大惨事に。
幸いハード面では壊れていないのでまっさらにして構築しなおすことはできます。
しかし中にはバックアップを取っていないデータが……
レスキューモードで修復を試みるも断念
始めはラズパイ内でなんとか修復できないか考えました。
社内で相談したところ、LinuxOSにはレスキューモードなるものがあり、「正常に動作するラズパイをレスキューモードで起動→修復したいSDカードをマウントして修正する」という方法があることを教えていただきました。
Linux システムバックアップリストア(xfs dump restore) - きまぐれほげほげひろば
しかしRaspbianOSのレスキューモードはすでに廃止されており、この方法は実行できませんでした。
そのため修復は諦め、データを救出してから構築しなおすことにしました。
データ救出を試みる(失敗)
Windows10にSDカードを接続する
ラズパイからmicroSDカードを引っこ抜き、SDカード変換アダプタを使用してWindows端末に挿入しました。
意外とエクスプローラで開けるんじゃ?などと高を括っていたのですが「ドライブ E: を使うにはフォーマットする必要があります。フォーマットしますか?」「このボリュームは認識可能なファイルシステムではありません」というポップアップが出てきてその妄想は崩れ去りました。
調べてみるとWindowsとRaspberry Pi OSで使用しているファイルシステムが異なるため、フォーマットなしでは読み書きできないということでした。(Windows10はNFTS、Raspberry Pi OSはext4)
今回は中のデータを壊さずに取り出したかったので、この方法は断念しました。
WSLにSDカードを接続する
ファイルシステムの違いによって読み込めないということが分かった私は、「WindowsがダメならWSLで読めばいいじゃない」とお上品にPowerShellを起動しました。(WSL導入についてはこちら)
そしてお上品にSDカードをマウントしようとしたところ、以下のエラーが出てしまいマウントできませんでした。
PS C:\Users\name> GET-CimInstance -query "SELECT * from Win32_DiskDrive" DeviceID Caption Partitions Size Model -------- ------- ---------- ---- ----- \\.\PHYSICALDRIVE0 SAMSUNG MZNLN256HAJQ-00000 4 256052966400 SAMSUNG MZNLN256HAJQ-00000 \\.\PHYSICALDRIVE1 SDXC Card 2 63277079040 SDXC Card ←これがマウントしたいSDカード PS C:\Users\name> wsl --mount \\.PHYSICALDRIVE1 コマンド ライン オプションが無効です: --mount ~~ 以下ヘルプ表示が続く
エラーを出してから知ったのですが、--mountオプションを使用してext4を扱えるのはWindows 11 ビルド 22000 以上のWSL2みたいです。(よい子はちゃんと調べてから実行しましょう)
私が使っているのはWindows 10のWSL2なのでこの方法は断念しました。
データ救出を試みる(成功!)
仮想マシンにUSBタイプのカードリーダーを接続する
最終的にこの方法でSDカードの中身を救出することができました。
環境
手順
VMware Workstationに仮想マシンをたてる
こちらの記事を参考にさせていただきました。
【RaspberryPi】VMWare Workstation 15 にRaspberryPi Desktop インストール – アラフォー自営業おじさんの日常VMware Toolsをインストールする
- 仮想マシンを起動する
- [Player]>[管理]>[VMWareToolsのインストール]をクリックする
- VMware Toolsをインストールする
こちらの記事を参考にさせていただきました。
Raspberry Pi DesktopにVMware-Toolsをインストール ← RootLinks Co., Ltd. - 仮想マシンを再起動する
- microSDをUSBタイプのカードリーダーに挿入し、PCに接続する
- ポップアップで「仮想マシンに接続」を選択し[OK]を選択する
または左上の[Player]>[取り外し可能デバイス]>[Integrated Express Mass Storage Device]>[接続(ホストから切断)]を選択する
- 以下のポップアップで「ファイルマネージャで開く」を選択する
- 仮想マシンのファイルマネージャからファイルをコピーしWindowsのエクスプローラに貼り付ける
(ドラッグ&ドロップでもOK)
(おまけ)仮想マシンにSDカードを接続する
実際にトラブルシュートした時のやり方ではないのですが、この記事を書きながら検証したら成功したのでご紹介します。 "USBタイプのカードリーダー持ってないよ!SDカード変換アダプタしかないよ!" という方はこちらの方法を試してみてください。
環境
仮想マシンにUSBタイプのカードリーダーを接続するの環境と同様手順
- VMware Workstationに仮想マシンをたてる
(仮想マシンにUSBタイプのカードリーダーを接続するの手順1.と同様) - VMwareToolsをインストールする
(仮想マシンにUSBタイプのカードリーダーを接続するの手順2.と同様) - 仮想マシンをシャットダウンし、ハードウェアにSDカードを追加する
こちらの記事を参考にさせていただきました。
PCのSDカードスロットに挿入されたSDカードをVMware Workstation Playerに認識させる方法 | Armadillo - 仮想マシンを起動し、コマンドプロンプト or 仮想マシンのファイルマネージャからSDカードをマウントする
- 仮想マシンのファイルマネージャからファイルをコピーしWindowsのエクスプローラに貼り付ける
(ドラッグ&ドロップでもOK)
- VMware Workstationに仮想マシンをたてる
そもそも操作ミスをなくそう
なんとかSDカードのデータを取り出してWindowsPCに持ってくることができました。
ちょっと達成感さえ味わってしまいましたが、そもそも操作ミスをしなければやらなくてよかった話です。
反省。
今後は「自分がうっかりしやすい人間だ」ということを常に意識して、以下のような対策をデフォルトにしていきたいと思います!
おわりに
ラズパイぶっ壊すのキモチェー!(嘘です)