QEMU wrongly requires SD card sizes to be a power of two

Host environment

  • Operating system: Linux
  • OS/kernel version: Linux mypc 6.3.8_1 #1 SMP PREEMPT_DYNAMIC Wed Jun 21 09:47:38 UTC 2023 x86_64 GNU/Linux
  • Architecture: x86
  • QEMU flavor: qemu-system-aarch64
  • QEMU version: 8.0.50
  • QEMU command line:
    sudo qemu-system-aarch64 -M raspi2b -drive file=/dev/mmcblk0,if=sd,format=raw

Emulated/Virtualized environment

  • Operating system: Raspberry Pi OS
  • OS/kernel version: any
  • Architecture: ARM

Description of problem

QEMU arbitrarily requires SD card sizes to be a power of 2. However, this behavior does not match the real world, and I am unable to pass a physical SD card into the guest operating system.

$ sudo qemu-system-aarch64 -M raspi2b -drive file=/dev/mmcblk0,if=sd,format=raw
qemu-system-aarch64: Invalid SD card size: 29.7 GiB
SD card size has to be a power of 2, e.g. 32 GiB.
You can resize disk images with 'qemu-img resize <imagefile> <new-size>'
(note that this will lose data if you make the image smaller than it currently is).

Steps to reproduce

  1. Insert a physical SD card into your host system and make a note of its device name. It will be something like /dev/mmcblk0
  2. Attempt to start a guest OS with the SD card attached. See the command above.
  3. You will get an error saying that the card size is not a power of two.

Additional information

Edited by NinjaCowboy