¿Cuál es la diferencia entre dd en un archivo y dd en un disco físico?

¿Cuál es la diferencia entre dd en un archivo y dd en un disco físico?

El tamaño de la imagen "openwrt-19.07.6-x86-64-combined-squashfs.img" es de 20 MB. Si cambio el nombre del archivo a "openwrt.raw", puedo importarlo a virt-manager e iniciar el sistema. Pero la partición raíz "/" no tiene espacio.

Si agrego "openwrt-19.07.6-x86-64-combined-squashfs.img" en una unidad USB y luego agrego la unidad USB a un archivo nuevo, importo el archivo de salida a virt-manager e inicio el sistema, la partición raíz tiene el tamaño de "256 MB".

dd if=openwrt-19.07.6-x86-64-combined-squashfs.img of=/dev/sde
dd if=/dev/sde of=./openwrt_with_256MB_root_partition.raw

El tamaño de "openwrt_with_256MB_root_partition.raw" es el mismo que el de la unidad USB. Pero si uso el siguiente comando:

dd if=openwrt-19.07.6-x86-64-combined-squashfs.img of=/openwrt.raw

el archivo de salida es del mismo tamaño que el archivo de entrada. Entiendo que esta acción no tiene sentido. Pero, ¿alguien puede explicar qué hace que la partición raíz de 256 MB esté disponible cuando la agrego a la unidad USB? ¿Hay alguna manera de crear un archivo de imagen con un espacio raíz de 256 MB sin la necesidad de una unidad USB física u otros discos?

Respuesta1

No sé qué hace OpenWRT hoy en día.

Sin embargo, lo que está haciendo es simplemente agregar algunos datos basura al final del archivo. Debido a que el tamaño del archivo termina siendo el tamaño del dispositivo dentro de la máquina virtual, es fácil entender el resultado.

También puedes usar truncate:

truncate -s256M openwrt-19.07.6-x86-64-combined-squashfs.img

Estrictamente hablando, esto no es lo mismo, porque da como resultado un archivo disperso, pero es mucho más rápido y suficientemente bueno.

Para obtener exactamente lo mismo, necesitas escribir algunos datos en el archivo, como este:

dd if=/dev/zero bs=1M count=236 >> openwrt-19.07.6-x86-64-combined-squashfs.img

También puedes usar indicadores avanzados en dd. 256 - 20 = 236

Otra herramienta relacionada con esto es fallocate.


Actualizar: Mirando la imagen, es así:

$ fdisk -l openwrt-19.07.6-x86-generic-combined-squashfs.img
Disk openwrt-19.07.6-x86-generic-combined-squashfs.img: 19.5 MiB, 20450816 bytes, 39943 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xf1f0223e

Device                                             Boot Start    End Sectors  Size Id Type
openwrt-19.07.6-x86-generic-combined-squashfs.img1 *      512  33279   32768   16M 83 Linux
openwrt-19.07.6-x86-generic-combined-squashfs.img2      33792 558079  524288  256M 83 Linux

(Tenga en cuenta la columna "tamaño").

Se supone que la segunda partición contiene la imagen raíz comprimida de solo lectura.yun área F2FS de lectura y escritura, no tengo idea de cómo funciona. Tal vez haya cambiado de tamaño en el primer arranque o algo así.

información relacionada