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.
Respuestas:
Si entiendo correctamente, desea crear una imagen desde el inicio del disco hasta el final de la última partición.
El parámetro para
dd
eso hace esto escount=
. 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 lafdisk -l
salida). Entonces, simplemente puede modificar su comando de esta manera:Sin embargo, sugeriría que corras en su
fdisk -u -l /dev/sdb
lugar. 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:donde el recuento se establecerá en el número que obtuvo
fdisk -u -l
al final de la última partición más uno , en lugar de lo que solía ser 104. El tamaño de bloque predeterminadodd
es 512 bytes, que también es la unidad quefdisk -u -l
se 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.
fuente
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
fuente