raspberry piが突然起動しなくなった(起動用SDカードの復旧)
sshアクセス出来ない!!
最近、家で仕事をする際、自作のラズパイ温度計で室温表示させています。
かなり寒くなってきたので、気温見ながら暖房は使わず上着重ね着や毛布を膝にかけて耐えています。
ちなみにラズパイ温度計というのはこれ↓です。
rc30-popo.hatenablog.com
さて、昨晩、朝から動かしっぱなしのラズパイを止めようとUbuntuマシンからsshでログインしようとするも反応せず。
あれ?と思ってpingを打つと応答が返りますが、ssh接続に対しては応答がありません。
ラズパイに繋いだI2C接続の気圧+温度センサーとキャラクタ液晶は元気に動いているので、ラズパイのOSと朝から走行させている自作pythonスクリプトは動いている模様。
仕方なく、電源切って再起動します。
すると、SDカードのアクセスLEDの点灯の仕方がいつもと違っており、今度はpingにも反応しなくなりました。
何度か再起動を試みるとpingに反応する時と反応しない時があります。反応しない時はSDカードのアクセスLEDがほぼ点灯したままに近い状態になっていました。
切り分けのためにraspbianが入ったSDカードを抜いて、ラズパイ用ubuntu20.04がインストールされたSDカードを挿入して起動すると、普通にsshでログイン可能。
どうやらラズパイ本体のハード故障ではなさ気です。
raspbianの入ったSDカード上のファイルシステムが壊れたと見当を付けて復旧作業を試みます。
(shutdownやhalt打たずに電源切ったせいでファイルシステムが壊れただけで、sshに無応答になったのは別の原因の可能性もありますが。とりあえず起動しないことには復旧できないので)
ext4 fsの復旧
raspbianの入ったSDカードを手持ちのubuntuマシン(自分のメインマシン)に挿入します。
bootパーティション(FAT)とrootfs(ext4)が両方マウントされました。
SDカード上のデータが滅茶苦茶に壊れているわけではなさそうです。
取り敢えずrootfsをumountした後、下記コマンドでrootfsのチェックと復旧を試みます。
$ sudo fsck -a /dev/mmcblk0p2
完了したらSDカードをラズパイに戻し、ラズパイを起動。
起動時のSDカードのアクセスLEDの点灯の具合がいつも通りに戻り、pingには100%応答するようになりましたが、やはりsshには反応しません。
またHDMIケーブルでモニターと繋いでも何も表示されません。
モニター出力の復旧
再度SDカードを抜いてubuntuマシンへ。
/boot/config.txtを確認します。
# uncomment if you get no picture on HDMI for a default "safe" mode # hdmi_safe=1
hdmi_safe=1が書かれている行のコメントを外します。
# uncomment if you get no picture on HDMI for a default "safe" mode hdmi_safe=1
これでSDカードをラズパイに戻すとモニターに表示が出る用になりました。
USBキーボードも繋いで直接ログインします。
いつものパスワードでログイン出来ました。
相変わらずsshには応答しませんが、psコマンドで見るとsshdは起動していました。
そのままsshd_configを覗いてチェックしようとしたのですが、キーボードの設定が日本語キーボードになっていなかったらしく、いくつかの記号が上手く入力出来ない状態で作業効率が悪いため、SDカードをubuntuマシンに挿して、そちらでファイル内容の確認と修正を試みます。
sshd_configのチェックと修正
/etc/ssh/sshd_configの内容を確認します。
#Port 22 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress ::
ポート指定がコメントアウトされています。
このコメントを外し、有効化します。
Port 22 AddressFamily any ListenAddress 0.0.0.0 #ListenAddress ::
sshd_config修正後、SDカードをラズパイに戻し、再起動。
今度はsshでアクセス可能になりました。
どうもファイルシステムになんらかの不具合が発生したのは間違い無さそうなのですが、sshd_configの設定やboot.txtの設定が変わってしまった様に見える原因は良くわかりません。
# ファイルシステムはsshログイン出来ずにshutdown抜きで電源落とした際に少し壊れた可能性もあります
別にLinuxマシンがあると、そちらにSDカードを挿入してfsck掛けたり、設定ファイルをレスキューしたり出来るのですが、これがWindows PCだとちょっと厄介だったかもしれません。
上記、サラッと経緯を書いていますが、復旧まで4時間くらいの工数を使いました。
ネットで類似例を探しましたが、見つからなかったので参考までに記録しておきます。