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.


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.


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.