Прошлое обновление сервера печати, который построен на базе Raspberry Pi 1B и Raspbian, с Bullseye на Bookworm заняло несколько часов. В нём установлена micro SD карта на 4 гигабайта, которая работает довольно медленно, но для печати быстрее и не нужно. Debian Trixie вышел в начале августа, но обновить эту систему руки дошли только сейчас.
Тогда обновление системы напомнило былые времена с Gentoo. Тогда и появилась идея попробовать запустить образ SD карты в QEMU, обновить систему и записать его обратно на карту.
Поставил SD карту из сервера печати в ноутбук и сделал её образ в двух экземплярах - один будет использоваться для обновления, а второй будет в качестве резервной копии если после обновления он не начнёт работать.
$ sudo dd if=/dev/mmcblk0 of=sdcard-20251230.orig.bin bs=1M iflag=direct
3849+0 records in
3849+0 records out
4035969024 bytes (4,0 GB, 3,8 GiB) copied, 300,146 s, 13,4 MB/s
$ cp sdcard-20251230.orig.bin sdcard.img
Теперь нужно выровнять размер образа для эмуляции иначе QEMU будет ругаться "qemu-system-arm: Invalid SD card size: 3.76 GiB SD card size has to be a power of 2, e.g. 4 GiB."
$ qemu-img resize -f raw sdcard.img 4096M
Image resized.
Не вынимая SD карту из ноутбука копирую ядро (kernel7.img) и device tree (bcm2709-rpi-2-b.dtb) в директорию с образом накопителя.
Чтобы обновление прошло быстрее я использовал эмуляцию Raspberry PI 2B в QEMU. С подбором опций пришлось повозиться, т.к. загрузка висла когда включалась сетевая карта. В итоге нашёл что для эмуляции Raspberry PI 2B рекомендуют передать ядру параметр dwc_otg.fiq_fsm_enable=0 и после этого система загрузилась.