Come copiare una partizione di un'immagine su una partizione di un disco fisico?

1

Alla fine ho avuto una chiavetta USB avviabile che funzionava con l'installazione di Windows 7, quando ho capito che una volta selezionata la selezione della lingua, la tastiera e il trackpad del mio Macbook Pro non funzionavano più e non avevo modo di procedere installazione.

Ho deciso di installare VirtualBox Windows 7 x64, installare i driver della tastiera e del trackpad dal pacchetto del software di supporto Bootcamp e arrestare la VM.

Ho usato VBoxManage internalcommands converttoraw ... per trasformare il disco virtuale in un .img. Per chi non ha familiarità con virtualbox, crea un'immagine completa dell'hard disk virtuale come se fosse un hard disk fisico e funziona allo stesso modo.

Ho usato fdisk per visualizzare l'immagine:

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

Ho quindi utilizzato quanto segue nel tentativo di saltare la partizione riservata del sistema e copiare semplicemente la partizione dati di Windows nella sezione designata del mio Macintosh HD:

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

Lasciandomi quanto segue:

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

Che sembra corretto, ma mi lascia con un disco Uninitialize-able che non posso montare o accedere con l'utilità del disco, quando clicco su mount, non succede nulla, anche se provo mount -t ntfs /dev/disk0s4 /Volumes/Temp-Dir-Made-With-mkdir

Qualepotrebbeessereilproblema?Stofacendoqualcosadisbagliato?Èimpossibile?

Laslice4didisk0nonereditailfilesystemdellapartizionechehoscrittosudiesso?

Grazieinanticipoperqualsiasiinformazione!

Modifica1:

@DavidÈunMacbookPro11,3chedovrebbedirtituttociòchedevisaperealriguardo.Perquantoriguardailbootcamp,l'hoscaricatodirettamentesuWindowsdalseguentedocumentodisupportoApple kbDL1720

@klanomath (Comment 1) Vero, ma è una buona informazione sapere! Per curiosità, perché 65535 è un blocco di dimensioni errate? Ho pensato che le specifiche della dimensione del blocco riguardavano solo il numero di blocchi che sono stati elaborati e scaricati sull'unità / immagine alla volta, fondamentalmente consentendo di DD più velocemente con più RAM (con la legge dei rendimenti decrescenti che entrano in vigore in alcuni casi punto ovviamente.) Mi sto sbagliando completamente nella mia comprensione del parametro bs= ?

@ user3439894 Ci ho pensato, non dovrei aver bisogno dell'MBR se utilizzo un bootloader diverso, ma ho trascurato la partizione riservata del sistema. Il problema qui è che ho già 4 partizioni sul disco rigido ... Ho dimenticato quale sia la partizione 0 (non davanti al mio Mac), la partizione 1 è Mac, la partizione 2 è la partizione di ripristino Mac e la partizione 3 è quella Ho fatto per Windows. Forse sto sbagliando tutto questo ... Il campo di addestramento è diventato un incubo, sarebbe stato bello se avesse appena preso la mia immagine e avesse fatto il lavoro per me, ma sto divagando.

    
posta DeeJayh 27.06.2016 - 11:08
fonte

1 risposta

0

Il comando corretto a dd una parte di un file raw in una partizione nel tuo caso è:

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

Il bs nel comando dd può essere interpretato come una dimensione di blocco artificiale dell'ingresso e il "file" di output. Per motivi storici e tecnici, la dimensione del blocco predefinito di dd è 512 byte.

Il motivo per usare 512 (o un intero appropriato ^ 2 multiplo / divisore) come bs è la dimensione del blocco dell'immagine e la partizione disk0s4 - che è 512 o 4096.

È possibile calcolare la dimensione del blocco (logico) del disco0 (anche senza sapere se fdisk funziona internamente con 512 o 4096 byte): 977105060 * 512 = 500 GB o 977105060 * 4096 = 4 TB. Non esiste ancora un SSD da 4 TB per MacBook Pro, quindi la dimensione del blocco deve essere 512 byte. Lo stesso vale per il tuo file img.

Ora puoi prendere in considerazione i motivi della velocità: più è grande il bs , più velocemente l'immagine verrà copiata.

Quindi un comando dd valido nel tuo caso potrebbe essere:

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

Poiché bs è solo 2 byte, devi modificare skip (salta i blocchi X a bs di if) e contare (blocchi Y à bs sono "scritti"). Poiché skip è 206848 * 512, X è 206848 * 512/2 e il conteggio è 41527296 * 512, Y è 41527296 * 512/2 e il comando precedente è:

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

Un rapido test rivela:

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)

Più grande è bs , più veloce è il comando dd .

BTW: il più grande bs di lavoro per te è 1048576 (il massimo comun divisore) perché 105906176 (= dimensione di salto in byte) / 1048576 = 101 (e 21261975552 (= dimensione di conteggio in byte) / 1048576 = 20277). 101 è primo!

Finora tutti i valori bs sono multipli di 2. Se bs non è uniforme, questo potrebbe scontrarsi con le dimensioni (di blocco) di se / di . Almeno nel tuo caso se e di hanno anche dimensioni in byte perché sono multipli di 512.

Ora dovrebbe essere ovvio il motivo per cui usare bs = 65535 fallisce: saltare e contare i numeri di blocco sono determinati da bs e non dalla dimensione naturale del blocco dell'immagine o della partizione. Un comando appropriato potrebbe essere

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

Almeno per me questo fallisce perché 1616.024 ... è un valore numerico illegale. Quindi si può supporre che tutti i numeri debbano essere valori interi!

Un bs di 65535 funziona solo se la dimensione totale di se / di e qualsiasi salto o cerca "confini" sono multipli di 65535 byte.

Se il tuo comando dd non contiene alcuna sezione skip / seek / count , puoi comunque utilizzare le dimensioni arbitrarie di bs.

Anche se il comando dd all'inizio della risposta funzionerà, probabilmente non sarà possibile avviare la partizione di Windows To Go (o di Windows Installer Ready-To-Go?). L'MBR di disk0 non conterrà la voce di avvio necessaria.

    
risposta data 27.06.2016 - 20:24
fonte

Leggi altre domande sui tag