DD falla más allá de la búsqueda de 2 GB

Cuando trato de usar dd para flashear imágenes, veo algunos problemas cuando el valor de búsqueda supera los 2 GB (es decir, bs * seek >= 2 GB ).

dd bs=512 count=8 if=sample.img of=/dev/block/mmcblk0 seek=4194304
dd: /dev/block/mmcblk0: Invalid argument

Cuando intento con un valor (2GB-1), el comando dd tiene éxito. ¿Alguien puede señalar por qué existe exactamente el límite de 2 GB para el valor de búsqueda? ¿Está relacionado con el sistema de archivos (¿límite FAT?)? ¿Hay alguna solución fácil para que dd funcione más allá del límite de búsqueda?

dd bs=512 count=8 if=sample.img  of=/dev/block/mmcblk0 seek=4194303                         <
8+0 records in
8+0 records out
4096 bytes transferred in 0.001 secs (4096000 bytes/sec)

Aparentemente, el problema se ve solo para valores de búsqueda en el rango (2GB-4GB). El dd tiene éxito más allá de 4 GB, muy extraño.

No he probado otro binario dd. Pero supongo que el problema es similar al mencionado Lists.busybox.net/pipermail/busybox/2012-July/078193.html No pude descargar el parche para solucionar el problema. Estoy escribiendo en mmcblk0 (no en una partición específica).
Para mí, la caja de herramientas de Android dd está fallando. Probé con otro dd (toybox) y funcionó bien.

Respuestas (1)

No utilices busybox dd (compilado con bionic libc). En su lugar, puede usar el binario dd estático de gnu coreutils compilado con glibc o musl. En mi dispositivo, todos los binarios funcionan bien; Toolbox dd de Android, busybox dd de meefik y dd construido estáticamente.

Se confirma que Bionic tiene errores con archivos grandes.

PD: Jugar con eMMC es peligroso, especialmente cuando se prueba buggy dd. dd es un asesino, en mi opinión. Puede sobrescribir accidentalmente algunos bytes iniciales de mmcblk0 haciendo que su dispositivo sea inútil.