家で常時起動しているsingle-board computerのRaspberry Pi 3 model Bがkernel更新をした後再起動に失敗して起動しなくなりました.
長らく安定して動いていたので色々忘れていて解決まで時間がかかってしまいました.
rpi-updateコマンドでkernelを更新した後から起動しなくなりました.
LEDの状態は赤点灯,緑不点灯でした.
UARTは何も出ず.(恐らくこのときにはUART-USBアダプタが故障していた)
たまに/bootの1つ目のFATパーティションにダーティビットが立って起動に失敗することがあるのでmicroSD cardをPCに繋いでfsckをかけましたが今回はこれは外れで問題ありませんでした.
$ sudo fsck -n /dev/mmcblk0p1 fsck from util-linux 2.40.4 fsck.fat 4.2 (2021-01-31) /dev/mmcblk0p1: 394 files, 49156/261115 clusters
kernelのファイル群の展開や書き込み失敗したのかもと/bootを上書きすることに.
rpi-updateコマンドではバックアップもとっているようですがよく理解していないのでオリジナルイメージから書き込むことに.
$ lftp -c torrent https://downloads.raspberrypi.com/raspios_lite_armhf/images/raspios_lite_armhf-2024-11-19/2024-11-19-raspios-bookworm-armhf-lite.img.xz.torrent Name: 2024-11-19-raspios-bookworm-armhf-lite.img.xz dn:534M up:0 complete, ratio:0.00/0.00/0.00 peers:24 connected:0 active:0 complete:0 Seeding in background... [215700] Moving to background to complete transfers... $ wget https://downloads.raspberrypi.com/raspios_lite_armhf/images/raspios_lite_armhf-2024-11-19/2024-11-19-raspios-bookworm-armhf-lite.img.xz.sha256 \ https://downloads.raspberrypi.com/raspios_lite_armhf/images/raspios_lite_armhf-2024-11-19/2024-11-19-raspios-bookworm-armhf-lite.img.xz.sig $ sha256sum -c 2024-11-19-raspios-bookworm-armhf-lite.img.xz.sha256 $ gpg --verify 2024-11-19-raspios-bookworm-armhf-lite.img.xz.sig
Note | gpg公開鍵はここのものを使いました.わかりやすいページが欲しいところです. https://www.raspberrypi.org/raspberrypi_downloads.gpg.key |
$ unxz 2024-11-19-raspios-bookworm-armhf-lite.img.xz $ sudo kpartx -av ./2024-11-19-raspios-bookworm-armhf-lite.img add map loop0p1 (254:3): 0 1048576 linear 7:0 8192 add map loop0p2 (254:4): 0 3923968 linear 7:0 1056768
$ sudo dd if=/dev/mapper/loop0p1 of=/dev/mmcblk0p1 bs=4M conv=fsync status=progress ; sync $ sync
Note | if=::入力元デバイス |
この状態でRaspberry Piにmicro SDと接続して起動を試すとやはり失敗します.
そういえばUUIDが違うのではということで確認します.
$ sudo blkid /dev/mapper/loop0p2 /dev/mapper/loop0p2: LABEL="rootfs" UUID="bb15c8e6-d999-4838-be67-5ff200bffa46" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="57b902f5-02" $ sudo mount -o ro /dev/mapper/loop0p1 /mnt $ cat /mnt/cmdline.txt console=serial0,115200 console=tty1 root=PARTUUID=57b902f5-02 rootfstype=ext4 fsck.repair=yes rootwait quiet init=/usr/lib/raspberrypi-sys-mods/firstboot
$ sudo blkid /dev/mmcblk0p2 /dev/mmcblk0p2: LABEL="rootfs" UUID="3a324232-335f-4617-84c3-d4889840dc93" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="71493291-02"
ずれているので1つ目のパーティションのcmdline.txtのroot=PARTUUID=の値をを利用中のrootになる2つ目のパーティションのPARTUUIDに書き換えます.
console=serial0,115200 console=tty1 root=PARTUUID=57b902f5-02 rootfstype=ext4 fsck.repair=yes rootwait quiet init=/usr/lib/raspberrypi-sys-mods/firstboot
↓
console=serial0,115200 console=tty1 root=PARTUUID=71493291-02 rootfstype=ext4 fsck.repair=yes rootwait quiet init=/usr/lib/raspberrypi-sys-mods/firstboot
これで起動するようになりました.
ddする前にcmdline.txt, config.txtを退避しておいてdd後に戻す方が良かったですね.ddを使わずファイルコピーでも大丈夫だったと思います.
rsync -avcI –exclude=cmdline.txt –exclude=config.txt $FROM $TO
若しくはmicroSDしか使っていないのでroot=/dev/mmcblk0p2のほうがいいかもしれません.
うまく行ったかと思いましたが,無線LANデバイスのwlan0が見えません.
有線LANは利用できたので,そちらからrpi-updateでkernelを更新して再起動することでデバイスが見え,接続も出来るようになりました.
ちなみにこの状態や,別のmicro SDでOSを書き込んだばかりの状態でもUARTから何も表示できませんでした.どうも断線してしまったようです.USB側はOSからserialに見えるので多分ピンソケットあたりを買って付けかえることで治りそうな感じはします.
でも手間や送料を考えると以下のようなものを買ってしまったほうがいいかもしれません.
$ dpkg-query -W fdisk kpartx util-linux coreutils coreutils 9.5-1+b1 fdisk 2.40.4-5 kpartx 0.11.1-1 util-linux 2.40.4-5 $ lsb_release -dr Description: Debian GNU/Linux trixie/sid Release: n/a $ arch x86_64
$ lsb_release -dr No LSB modules are available. Description: Raspbian GNU/Linux 12 (bookworm) Release: 12 $ uname -a Linux raspberrypi 6.12.16-v7+ #1859 SMP Mon Feb 24 13:10:45 GMT 2025 armv7l GNU/Linux $ grep "^Model" /proc/cpuinfo Model : Raspberry Pi 3 Model B Rev 1.2