¿Cómo copio una partición de una imagen a una partición de un disco físico?

1

Finalmente tuve una llave USB de arranque que funciona con una instalación de Windows 7 lista para usar, cuando me di cuenta de que una vez que apareció la selección de idioma, el teclado y el trackpad de mi Macbook Pro ya no funcionaban y no tenía forma de continuar con el instalar.

Decidí configurar un VirtualBox Windows 7 x64, instalar los controladores del teclado y el trackpad del paquete de software de soporte Bootcamp y apagar la máquina virtual.

Utilicé VBoxManage internalcommands converttoraw ... para convertir el disco virtual en un .img. Para aquellos que no están familiarizados con virtualbox, crea una imagen completa del disco duro virtual como si fuera un disco duro físico, y funciona igual.

Usé fdisk para ver la imagen:

sh-3.2# fdisk WINDOWS7.img 
Disk: WINDOWS7.img  geometry: 2610/255/63 [41943040 sectors]
Signature: 0xAA55
     Starting       Ending
#: id  cyl  hd sec -  cyl  hd sec [     start -       size]
------------------------------------------------------------------------
*1: 07    0  32  33 -   12 223  19 [      2048 -     204800] HPFS/QNX/AUX
2: 07   12 223  20 - 1023 254  63 [    206848 -   41734144] HPFS/QNX/AUX
3: 00    0   0   0 -    0   0   0 [         0 -          0] unused      
4: 00    0   0   0 -    0   0   0 [         0 -          0] unused

Luego utilicé lo siguiente para intentar omitir la partición reservada del sistema y simplemente copiar la partición de datos de Windows a la porción designada de mi Macintosh HD:

sh-3.2# dd if=WINDOWS7.img of=/dev/disk0s4 skip=206848 bs=65535

Dejándome con lo siguiente:

sh-3.2# fdisk /dev/disk0
Disk: /dev/disk0    geometry: 60821/255/63 [977105060 sectors]
Signature: 0xAA55
         Starting       Ending
#: id  cyl  hd sec -  cyl  hd sec [     start -       size]
------------------------------------------------------------------------
1: EE 1023 254  63 - 1023 254  63 [         1 -     409639] <Unknown ID>
2: AC 1023 254  63 - 1023 254  63 [    409640 -  684395032] <Unknown ID>
3: AB 1023 254  63 - 1023 254  63 [ 684804672 -    1269536] Darwin Boot 
4: 0B 1023 254  63 - 1023 254  63 [ 686074208 -  290768672] Win95 FAT-32

Lo que parece correcto, pero me deja con un disco capaz de no inicializar que no puedo montar o acceder con la utilidad de disco, cuando hago clic en montar, no pasa nada, incluso si intento mount -t ntfs /dev/disk0s4 /Volumes/Temp-Dir-Made-With-mkdir

¿Cuálpodríaserelproblema?¿Estoyhaciendoalgomal?¿Esestoimposible?

¿Elsegmento4deldisco0noheredaelsistemadearchivosdelaparticiónqueleescribí?

¡Graciasdeantemanoporcualquierinformación!

Editar1:

@DavidEsunMacbookPro11,3quedeberíadecirletodoloquenecesitasaberalrespecto.Encuantoalbootcamp,lodescarguédirectamentedesdeelsiguientedocumentodesoportedeApple kbDL1720

@klanomath (Comentario 1) Es cierto, ¡pero es una buena información saber! Por curiosidad, ¿por qué es 65535 un tamaño de bloque malo? Pensé que la especificación de tamaño de bloque solo tenía que ver con la cantidad de bloques que se procesaron y volcaron a la unidad / imagen a la vez, básicamente permitiéndole hacer DD más rápido con más RAM (con la ley de rendimientos decrecientes que entrará en vigor en algún momento). Por supuesto.) ¿Estoy completamente equivocado en mi comprensión del parámetro bs= ?

@ user3439894 Pensé en eso, no debería necesitar el MBR si estoy usando un cargador de arranque diferente, pero descuidé la partición reservada para el sistema. El problema aquí es que ya tengo 4 particiones en el disco duro ... Olvidé qué es la partición 0 (no delante de mi mac), la partición 1 es Mac, la partición 2 es la partición de recuperación de mac, y la partición 3 es la única Hice para las ventanas. Tal vez estoy haciendo todo esto mal ... Boot Camp se ha convertido en toda una pesadilla, hubiera sido bueno si solo tomara mi imagen e hiciera el trabajo por mí, pero estoy divagando.

    
pregunta DeeJayh 27.06.2016 - 11:08

1 respuesta

0

El comando adecuado para dd una parte de un archivo en bruto a una partición en su caso es:

dd if=WINDOWS7.img of=/dev/disk0s4 skip=206848 bs=512 count=41527296

El bs en el comando dd puede interpretarse como un tamaño de bloque artificial de la entrada y el "archivo" de salida. Por razones históricas y técnicas, el tamaño de bloque predeterminado de dd es 512 Byte.

La razón para usar 512 (o un entero apropiado ^ 2 múltiple / divisor) como bs es el tamaño de bloque de su imagen y la partición disk0s4, que es 512 o 4096.

El tamaño de bloque (lógico) del disco0 se puede calcular (incluso sin saber si fdisk funciona con 512 o 4096 Byte internamente): 977105060 * 512 = 500 GB o 977105060 * 4096 = 4 TB. Todavía no existe un SSD de 4 TB para MacBook Pro, por lo tanto, el tamaño del bloque debe ser de 512 bytes. Lo mismo es válido para su archivo img.

Ahora puede tener en cuenta los motivos de velocidad: cuanto más grande es bs , más rápido se copiará la imagen.

Por lo tanto, un comando dd válido en su caso puede ser:

dd if=WINDOWS7.img of=/dev/disk0s4 skip=X bs=2 count=Y

Dado que bs es solo de 2 bytes, debe modificar omitir (omite X bloques à bs de si) y contar (Y bloques à bs están "escritos"). Dado que skip es 206848 * 512, X es 206848 * 512/2 y el recuento es 41527296 * 512, Y es 41527296 * 512/2 y el comando anterior es:

dd if=WINDOWS7.img of=/dev/disk0s4 skip=52953088 bs=2 count=10630987776

Una prueba rápida revela:

dd if=/dev/zero of=~/Desktop/output.file bs=1 count=1048576
1048576 bytes transferred in 1.593527 secs (658022 bytes/sec)
dd if=/dev/zero of=~/Desktop/output.file bs=2 count=524288
1048576 bytes transferred in 0.800444 secs (1309993 bytes/sec)
dd if=/dev/zero of=~/Desktop/output.file bs=4 count=262144
1048576 bytes transferred in 0.384188 secs (2729331 bytes/sec)
dd if=/dev/zero of=~/Desktop/output.file bs=1024 count=1024
1048576 bytes transferred in 0.001932 secs (542700705 bytes/sec)

Cuanto mayor sea bs , más rápido se ejecutará el comando dd .

BTW: El bs más grande que trabaja para usted es 1048576 (el mayor divisor común) porque 105906176 (= omitir tamaño en Byte) / 1048576 = 101 (y 21261975552 (= contar tamaño en Byte) / 1048576 = 20277). ¡101 es primo!

Hasta ahora, todos los valores de bs son múltiplos de 2. Si bs es desigual, esto puede colisionar con los tamaños (de bloque) de if / of . Al menos en su caso, if y of tienen incluso tamaños de bytes porque son múltiplos de 512.

Ahora debería ser obvio por qué falla bs = 65535: los números de bloqueos omitidos y contados están determinados por bs y no por el tamaño de bloque natural de su imagen o partición. Un comando adecuado puede ser

dd if=WINDOWS7.img of=/dev/disk0s4 skip=1616.024... bs=65535 count=324436.950...

Al menos para mí esto falla porque 1616.024 ... es un valor numérico ilegal. ¡Así que uno puede asumir que todos los números deben ser valores enteros!

Un bs de 65535 solo funciona si el tamaño total de if / of y cualquier salto o búsqueda de "límites" son múltiplos de 65535 Byte.

Si su comando dd no contiene ninguna parte de omitir / buscar / contar puede usar tamaños bs arbitrarios.

Aunque el comando dd al principio de la respuesta funcionará, probablemente no podrá iniciar la partición de Windows To Go (o Windows Installer Ready-To-Go?). El MBR de disk0 no contendrá la entrada de arranque necesaria.

    
respondido por el klanomath 27.06.2016 - 20:24

Lea otras preguntas en las etiquetas