2025年3月17日月曜日

ubuntuでSDカードなどにimgを書き込み後に抜き差しせずパーティションをマウントする


背景

ddコマンドを利用してSDカードなどの保存装置の中身を書き換えた際に抜き差ししないと中身を期待通りに認識してくれないことがあったので、抜き差しせずに内容を更新する方法を把握しました。
備忘録として記事に情報を残します。

使ったもの

  • SDカードスロットが付いたPC + ubuntu22.04
  • SDカード
  • 書き込むimgファイル
    Raspberry Pi OS ARM64 Lite 2024/11公開版のimgファイルを書き込みました。

書き込み前にアンマウントして書き込み

ddコマンドによる書き込み前に対象をアンマウントしていれば、書き込み後に自動でパーティションを認識してくれます。
ddコマンドの直後にマウントを実施すると早すぎるためか失敗するので、下記の処理ではマウント前に1秒待っています。
umount /dev/mmcblk0*
sudo dd bs=4M of=/dev/mmcblk0 if=./raspiImages/2024-11-19-raspios-bookworm-arm64-lite.img conv=fsync status=progress
sleep 1
udisksctl mount -b /dev/mmcblk0p1
udisksctl mount -b /dev/mmcblk0p2

マウントしたまま書き込んだ場合は、umountでアンマウントし、partprobeでパーティション情報を更新し、udisksctlでマウント

下記のコマンドは/dev/mmcblk0として認識されたSDカードに対する処理です。
ddコマンドで書き込み後にSDカードのパーティション情報を更新しています。
umountでアンマウントし、partprobeでパーティション情報を更新し、udisksctlでマウントしています。
sudo dd bs=4M of=/dev/mmcblk0 if=./raspiImages/2024-11-19-raspios-bookworm-arm64-lite.img conv=fsync status=progress
umount /dev/mmcblk0*
sudo partprobe
sleep 1
udisksctl mount -b /dev/mmcblk0p1
udisksctl mount -b /dev/mmcblk0p2

上記のumount実行前にpartprobeを実行すると下記のエラーが発生しました。
sudo partprobe 
Error: パーティション 1, 2 (/dev/mmcblk0 上) に書きこまれましたが、カーネルに変更を伝えることができませんでした。おそらく、使用中だったのが原因だと思われます。そのため、古いパーティション情報がそのまま使われます。さらなる変更をする前に再起動してください。


ddコマンド実行後にパーティションが更新されないのも上記のエラーが見えないところで発生しているからだと思います。
マウントしたまま実行するのは不具合の元になると思うので、アンマウントしてから書き込むのが良いです。

おわり

imgファイル書き込み後にSDカードの抜き差しせず中身を認識する方法が分かりました。
手間を減らせて嬉しいです。

参考

How do I refresh Disk Utility?
How to auto-mount from command line?

0 件のコメント :