Per riferimento futuro, ecco come ho proceduto alla fine, con alcuni commenti sui vari problemi o trabocchetti incontrati:
1. Avvia la macchina con un sistema live Linux
Il primo passo è stato avviare la macchina contenente il disco di cui creare l'immagine, utilizzando un sistema live Linux.
NOTA:la mia prima idea era quella di utilizzare un disco USB Ubuntu Live, ma la macchina non supportava l'avvio da USB, quindi ho trovato più semplice utilizzare un vecchio Knoppix live CD .
2. Immagina il disco usando dd
e convogliare i dati attraverso ssh
Quindi, ho copiato tutto il contenuto del disco in un'immagine del file sul mio server locale utilizzando dd
e reindirizzare i dati attraverso ssh
:
$ dd if=/dev/hdX bs=4k conv=noerror,sync | ssh -c blowfish [email protected] 'dd of=myfile.dd'
Alcuni commenti qui:questo metodo leggerà tutto il contenuto del disco, quindi può richiedere molto tempo (mi ci sono volute 5 ore per un disco da 80 GB). Il collo di bottiglia non è la rete, ma in realtà la velocità di lettura del disco. Prima di avviare la copia, consiglio di controllare i parametri BIOS/disco/sistema per assicurarsi che il disco e la scheda madre funzionino alla massima velocità possibile (questo può essere verificato utilizzando il comando hdparm -i
ed eseguendo un test con hdparm -Tt /dev/hdX
).
NOTA:dd
non mostra lo stato di avanzamento dell'operazione, ma possiamo forzarlo a farlo inviando USR1 segnale al dd
elaborare PID da un altro terminale:
$ kill -USR1 PIDofdd
Nota:versioni più recenti di dd
supporta il status=LEVEL
opzione (man dd
)
status=LEVEL
The LEVEL of information to print to stderr; 'none' suppresses everything but error messages, 'noxfer' suppresses
the final transfer statistics, 'progress' shows periodic transfer statistics
3. Recupera lo spazio inutilizzato
A questo punto, la macchina di origine non è più necessaria e lavoreremo esclusivamente sul server di destinazione (che esegue anche Linux). VirtualBox verrà utilizzato per convertire l'immagine del disco non elaborata nel formato VHD, ma prima di farlo, possiamo azzerare i blocchi inutilizzati, in modo che VirtualBox non allochi spazio per loro nel file finale.
Per fare ciò, ho montato le immagini come dispositivo di loopback:
$ mount -o loop,rw,offset=26608813056 -t ntfs-3g /mnt/mydisk/myfile.dd /mnt/tmp_mnt
$ cat /dev/zero > zero.file
$ rm zero.file
NOTA:L'offset che indica l'inizio della partizione all'interno dell'immagine del disco può essere ottenuto utilizzando parted
sul file immagine:
$ parted /mnt/mydisk/myfile.dd
(parted) unit
Unit? [compact]? B
(parted) print
Model: (file)
Disk /mnt/mydisk/myfile.dd: 80026361856B
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 32256B 21936821759B 21936789504B primary ntfs boot
2 21936821760B 80023749119B 58086927360B extended lba
5 26608813056B 80023749119B 53414936064B logical ntfs
NOTA2:Il driver NTFS del kernel Linux predefinito fornisce l'accesso in sola lettura, quindi è necessario installare e utilizzare lo spazio utente ntfs-3g
driver o la scrittura sul disco genererà un errore!
4. Crea l'immagine VHD usando VBoxManage
A questo punto, possiamo utilizzare le utility di VirtualBox per convertire l'immagine raw in un file VHD:
VBoxManage convertfromraw myfile.dd myfile.vhd --format VHD
Stavo cercando di fare esattamente la stessa cosa dell'OP (durante il salvataggio di un'installazione di Windows) e ho finito per creare un nuovo strumento per questo, ntfsclone2vhd
.
Dovresti quindi semplicemente fare qualcosa del genere:
ntfsclone --save-image -o - /dev/sdXX | ntfsclone2vhd - /mnt/usb/output.vhd
Un approccio consiste nell'utilizzare un paio di utili tecnologie:VirtualBox e ntfsprogs
pacchetto.
Le versioni recenti di VirtualBox consentono di creare file su disco rigido VHD, mentre ntfsprogs
fornisce il ntfsclone
utilità. Come suggerisce il nome, ntfsclone
clona i filesystem NTFS e credo che lo faccia a livello di filesystem, saltando i blocchi del disco inutilizzati.
Quindi, per iniziare, crea una nuova VM in VirtualBox e fornisci una nuova unità di file VHD vuota per essa. L'unità VHD deve essere grande solo quanto la dimensione dei dati in uso sull'unità fisica che desideri clonare (beh, in realtà, rendila un po' più grande, per consentire un po' di spazio di manovra).
Successivamente, trova un CD live di Linux che contenga il ntfsprogs
pacchetto, così come openssh-server
. Mi piace System Rescue CD per questo, ma praticamente qualsiasi live CD basato su Debian o Ubuntu dovrebbe funzionare altrettanto bene.
Avvia la VirtualBox VM con il live CD di Linux e avvia sshd
all'interno della VM in modo da poter eseguire comandi su di essa da remoto. Partiziona l'unità VHD vuota in modo appropriato, utilizzando qualsiasi strumento di partizionamento che preferisci (mi piace il semplice vecchio fdisk
, ma sono un po' vecchia scuola).
Con un'altra copia del live CD di Linux, avvia la macchina contenente il disco fisico che vuoi clonare. Presumo che la VM VirtualBox e questa macchina siano accessibili l'una all'altra tramite la rete. Su questa macchina, esegui il seguente comando (tutto su una riga):
ntfsclone --save-image -o - /dev/sdXX |
ssh [email protected] 'ntfsclone --restore-image --overwrite /dev/sdYY -'
dove:
/dev/sdXX
è il nome del dispositivo (sul computer locale) dell'unità fisica che desideri clonare e/dev/sdYY
è il nome del dispositivo (nella VM) dell'unità di destinazione VHD.
Spiegazione:Il primo ntfsclone
comando nella pipeline estrae un'immagine del filesystem NTFS sorgente e la invia attraverso il tunnel ssh, mentre il secondo ntfsclone
Il comando riceve l'immagine e la ripristina nell'unità VHD.
Una volta completata l'operazione, il file VHD dovrebbe contenere un clone esatto file per file del disco fisico originale (salvo eventuali errori hardware, come settori danneggiati, che potrebbero causare l'interruzione prematura del processo).
Un'ultima cosa che potresti voler fare è eseguire un chkdsk
di Windows sull'unità VHD, solo per garantire che la clonazione non abbia introdotto alcun problema (non avrebbe dovuto, ma ehi, sono un po 'paranoico su queste cose).