crear imagen de una unidad USB sin partición no asignada

13

Tengo una unidad USB de 8GB conectada a mi sistema que se ve así:

[root@host]# fdisk -l /dev/sdb

Disk /dev/sdb: 8462 MB, 8462008320 bytes
255 heads, 63 sectors/track, 1028 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5c0894d9

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1           9       72261    e  W95 FAT16 (LBA)
/dev/sdb2              10         103      755055   83  Linux
[root@host]# 

Básicamente, mi partición FAT es de aproximadamente 70 MB, la partición ext2 es de aproximadamente 740 MB y el resto del espacio (~ 7 GB) no está asignado. Ahora cuando dd mi disco duro USB a través de:

dd if=/dev/sdb of=myimage.img bs=1M

el archivo de salida (myimage.img) tiene alrededor de 8 GB, que es el funcionamiento normal de dd.

Pregunta: Lo que estoy buscando es una forma de clonar directamente mi disco duro USB sin el espacio no asignado para que mi archivo de resultados sea de aproximadamente 1 GB sin comprimir en lugar de 8 GB. La razón por la que pregunto es porque el archivo de salida (myimage.img) está siendo utilizado por un programa simulador para arrancar la imagen. El simulador puede manejar archivos de 8 GB, pero no quiero desperdiciar mi espacio en disco.

modesto
fuente
1
Este es un problema similar con una solución interesante: serverfault.com/q/281628/141604
semana

Respuestas:

15

Si entiendo correctamente, desea crear una imagen desde el inicio del disco hasta el final de la última partición.

El parámetro para ddeso hace esto es count=. Su última partición termina en 103, y el recuento deberá ser 1 extra (104) y el tamaño de su unidad es 8225280 bytes (de acuerdo con la fdisk -lsalida). Entonces, simplemente puede modificar su comando de esta manera:

dd if=/dev/sdb of=myimage.img bs=8225280 count=104

Sin embargo, sugeriría que corras en su fdisk -u -l /dev/sdblugar. Los cilindros ya no son realmente relevantes en esta época, por lo que es mejor si ve que el sector cuenta para evitar errores de redondeo. Entonces tendrás que correr:

dd if=/dev/sdb of=myimage.img count=...

donde el recuento se establecerá en el número que obtuvo fdisk -u -lal final de la última partición más uno , en lugar de lo que solía ser 104. El tamaño de bloque predeterminado ddes 512 bytes, que también es la unidad que fdisk -u -lse usará en la salida.

La tabla de partición de respaldo de una partición GPT se almacena al final del disco, pero como no está utilizando GPT, estará bien.

chutz
fuente
2

Solo necesita decirle a dd que solo lea la parte del disco que le interesa. El parámetro que está buscando es count.

Entonces tome el tamaño de su cilindro de 8,225,280 y multiplique por el número de cilindros en uso de 103 y obtendrá 847,203,840 bytes. Como está utilizando un tamaño de bloque de un megabyte, convierta esos bytes a megabytes, que es 808.

Entonces tu comando es dd if=... of=... bs=1M count=808

cuello largo
fuente