使っていたRaspberry Piにsshで接続できなくなってしまって、 何度再起動しても駄目だったのでSDカードの中身だけ抜き出して 再度インストールし直す作業を行いました。
Raspberry Pi
今使っているのはRaspberry Pi Zero WHで ディスクとしてはmicro SDカードを使います。
以下過去の設定など。
陥った状態
Raspberry Piには電源ボタンなどなく、基本的に電源ケーブルを差した段階で 勝手にOSが起動する様な設定になっています。
何度か電源を入れ直してみた所、電源のLEDは通常っぽく光るのですが sshでつながらないし、ルーター側にも接続している様子はなし。
ここでmini HDMIのアダプターがあってモニタに出力できればまた何か分かったと思いますが、 そういったものがないので直接様子を見る手段がありません。
なので結構どうしようもない状態。
おそらく電源を直接抜くような落とし方を何度もしていたため、最後のところで運悪く中身が(ソフトウェア的に)壊れてしまったようです。
Raspberry Piの生存確認
とりあえずRaspberry Pi自体は動いている様に見えるのですが、 それを調べるため、 micro SDを抜いて、電源も抜いた状態で、 接続用のmicro USBポート(Raspberry Pi Zeroだと電源用のmicro USBポートが端にあってその横にあるもの)とPCのUSB Aとをつないでみます。
これでWindowsとかにつなげると新しいデバイスとして認識され、BCM2708 Boot といった表示が見れるはず、ということです。
STICKY: Is your Pi not booting? (The Boot Problems Sticky) - Raspberry Pi Forums
実際やってみた所言われている通りになり、やはりRaspberry Pi自体は問題なさそうだな、と。
micro SDの中身を見る
Raspberry Pi用に作ったmicro SDですが、 そのままだとWindowsとかからは簡単に見れません。
Linux端末があってmicro SDを読めるなら直ぐにできますが。
Windowsとかしかない場合、色々方法はありますが、 今回はWindowsにVMwareを入れてそこからSDカードを見ました。
個人利用なら無料です。
使うOSはubuntu。 Ubuntu Desktop 日本語 Remixのダウンロード Ubuntu Japanese Team から19.04のISOイメージを取ってきました1。
これで、バーチャルマシンを作って立ち上げます。
その状態でmicro USBを接続すると、VMware上に
こんな感じで接続場所を確かめるポップアップが出るので、 仮想マシンに接続を選んでOKします。
そうするとWindows側ではなくてUbuntu側に接続されます。
通常は /dev/sdb1, /dev/sdb2として2つの領域が認識されるはずです。
この状態で、ターミナルを立ち上げて、
$ sudo mkdir -p /mnt/sdb1 && sudo mount /dev/sdb1 /mnt/sdb1
とかすれば/mnt/sdb1で中身が見れるようになります。
これまた通常はsdb1の方はWindowsでも見れる起動用ファイル、 sdb2の方がLinux領域でWindowsからは見れない領域ですが、 この方法であれば/mnt/sdb2/に/mnt/sdb/homeとかが見れるはずです。
あとは適当にファイルを救出して適当なところに送ったりすればファイルを救出できます。
このようにLinuxを使わなくても ZAR というWindows用のソフトウェアを使うとWindowsに対応してないフォーマットの中身も見れる、 というのを見ましたが、このソフトウェアを使ってみた所上手く見れなかったので辞めました。 (多分、自分がなにかおかしかっただけで、ファイルを取得するだけなら バーチャルマシンを作るよりこっちのが簡単にできるかもしれません。)
micro SDの中身を治す
中身を見てみると特に問題はなさそうに見えることもあったので、ちょっと修復を試みました。
fsck
コマンドを使います。
$ sudo fsck /dev/sdb1
fsck from util-linux 2.31.1
fsck.fat 4.1 (2017-01-24)
0x41: Dirty bit is set. Fs was not properly unmounted and some data may be corrupt.
1) Remove dirty bit
2) No action
? 1
Perform changes ? (y/n) y
/dev/sdb1: 227 files, 79974/516191 clusters
何やらDirty bitがあった、ということでこれを取り除きました。
sdb2
の方は何も出ませんでした。
これを実行後、Raspberry Piに戻して起動してみましたが、やはり駄目でした。
Wi-Fiにつながってないだけ、という可能性はありましたが、 /var/log/messageなどをUbuntuに接続して見てみると 起動に関するログも出てないのでOST自体が起動してない感じでした。
再インストール
仕方ないのでmicro SDを再フォーマットして1から再インストールし直します。
上の方法で/home/raspberrypiのファイルは全て救出して後で必要なものを追加したり参照したりします。
から始まって上のリンクにあるものを再度実行して再構築。
きちんと管理してませんでしたが、必要なディレクトリに分けて GitHubのプライベートレポジトリに上げてしまっても良いかな。。。 多分また壊れることはあるだろうし。
USBで直接PCとつなぐ
Raspberry Pi ZeroはUSBで直接PCとつないで操作することができるそうです。
Raspberry Pi ZeroをUSBケーブル1本で遊ぶ Japanese Raspberry Pi Users Group
ちょっと試してみた所、私の環境では素直には上手く行きませんでした。 何かしら手違いがあったんだと思うんですが、 VMwareで処理してしまってそれで良いか、と思ってそれ以上見てません。
一応メモとして。
まとめ
見た目がおもちゃみたいなものだし、電源のOn/Offボタンもないので、 普通のPCよりもさらに気軽に電源を引っこ抜く、みたいな事をしてましたが、 流石に何度もやるとファイルが壊れてしまうことがあるようです。
なるべくちゃんとshutdownして電源を落とさないと。。。
一方で、起動できなくなってもSDカードごと壊れる、ということはめったに無いと思うので、 その場合には結構簡単にファイルを救出できるので諦めないことです。
ただ、必要なファイルは別に管理して、ぱっとインストールできる環境を作っておいた方が 良いですね。
-
ちょっと関係ない話になりますが、 VMwareでOSを起動しようとしたとき
このホストはVT-xに対応していますが、Intel VT-xは無効になっています。
という表示が出て上手くスタートしてくれませんでした。 どうもマシンのBIOS設定を変えないと行けない模様。
Windows 10では Winowsの設定 更新とセキュリティ 回復に行くと今すぐ再起動というボタンがあるので これを押すとオプションを選びながらの再起動が可能で オプションの選択 トラブルシューティング 詳細オプション UEFIファームウェアの設定 へ進んで再起動すると 再起動後自動的にBIOS設定画面に行きます。
もしくは再起動時にDelとか、マシンの指定のボタンを押すと行けるはずです。
この前買ったのはFRONTIERのマシンですが、FRONTIERのマシンだとDelかF2。
これを開くとAdvancedという項目に
Intel (VMX) Virtualization Technology
というのがあって、これがDisabledになってたのでEnabledに変更。 ↩