[raspberrypi] /boot/cmdline.txtを編集し間違えた際の対応

目次

何が起きたか

Raspberry Piにk8sをインストールしようとしていた際に、cgroupの設定で/boot/cmdline.txt追記する必要があったのですが、間違えて上書きして再起動をかけてしまいました。
すると見事に起動しなくなりました。

対応

micro SDに焼いたイメージをmountして元の/boot/cmdline.txtをメモし、micro SDを手元でmountして中身を書き換えればいいかと思いましたが、これだとパーティションのUUIDの整合性が取れなくなるため失敗します。
そこでUUIDを調べて整合性を取ります。

実際の手順

1. 焼き付けたイメージの/boot/cmdline.txtをメモる

手元にLinux機があれば

sudo fdisk -l 2020-08-20-raspios-buster-armhf-lite.img
のようにパーティション情報を取得します。
Linux機でない場合は知らないので調べてください。
多分これと似たような結果が得られるはずです。 このうち/bootが含まれるのはFAT32の2020-08-20-raspios-buster-armhf-lite.img1の方なので、こちらをloopデバイスを使ってmountします。
sudo mount -o loop,offset=4194304 2020-08-20-raspios-buster-armhf-lite.img /mnt
offsetの値4194304はfdiskの結果の「起動」(または"START")の8192にセクタサイズである512を掛けて計算した値です。
うまくいくと/mnt/cmdline.txtがお目当てのメモりたいファイルです。

私の環境でのファイル内容は

console=serial0,115200 console=tty1 root=PARTUUID=907af7d0-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh
となりますが、quiet以降はいらないため
console=serial0,115200 console=tty1 root=PARTUUID=907af7d0-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
をメモしておきます。
メモが終わったら
sudo umount /mnt
でunmountしてください。


2. 正しいPARTUUIDをメモる

先程メモった内容をそのままmicro SDの方に書き込んでもPARTUUIDが正しくないため起動できません。
ですので、次に正しいPARTUUIDを調べていきます。

やることは簡単で、micro SDの方にある/etc/fstabを覗くだけです。
ですのでまずmicro SDをmountします。
Linuxであれば

sudo fstab -l
でディスクサイズからどの/dev/***が目的のmicro SDか(多分/dev/sdbとか/dev/mmcblk0とか)を調べます。
私の環境ではこんな感じ。 今覗きたい /etc/fstabはサイズの大きい方のパーティションになるので、そちらをmountします。
sudo mount  /dev/mmcblk0p2 /mnt
とするとmountできるので、 /mnt/etc/fstabをcatします。
私の環境だとこんな感じ。 ほしいのは/PARTUUIDなので93ffb897-02をメモ。

3. 上書きしてしまった/boot/cmdline.txtの修正

先程のmountの手順で/boot側のパーティションをmountします。
つまり/dev/mmcblk0p1を先程と同様にmountすればいいです。
mountできたら/mnt/cmdline.txtが修正したいファイルなので、これを適当なテキストエディタで開いて以前の過程で得たメモをそれっぽく組み合わせて上書きします。


4. 起動するかテスト

micro SDをRaspberry Piに挿して起動するか確かめましょう。
うまく行かなければmicroSDにイメージを再度焼きましょう。

終わりに

Linux初心者あるあるだと思っています。

カテゴリー:サーバ
記事作成日:2020-09-20