Come creare un'immagine disco VHD da un sistema live Linux?


29

Ancora una volta, devo ricorrere agli esperti di SuperUser, poiché le mie altre fonti (principalmente Google ;-)) non si sono rivelate molto utili ...

Quindi, fondamentalmente, vorrei creare un'immagine VHD di un disco fisico da archiviare / accedere / magari montare in una macchina virtuale. Ora, ci sono dozzine di articoli e tutorial su come farlo sul web, ma nessuno soddisfa esattamente le condizioni che vorrei raggiungere:

  • Vorrei che il file di destinazione fosse un'immagine VHD , poiché Windows 7 può montarlo in modo nativo, anche attraverso la rete e molti altri programmi possono usarlo (VirtualBox, ...)
  • Il disco che sto provando a visualizzare un'immagine contiene un'installazione di Windows XP, quindi in teoria potrei usare l' disk2vhdutilità, ma vorrei trovare una soluzione che non richieda l'avvio dell'installazione di Windows XP (ovvero mantenere il disco di sola lettura )
  • Quindi stavo cercando una soluzione che coinvolgesse una sorta di sistema live (in esecuzione da un dispositivo USB o dalla rete)

Tuttavia, tutte le soluzioni che ho trovato utilizzano disk2vhdo usano il ddcomando su Linux, che esegue una copia completa del disco (cioè anche blocchi vuoti) e non genera un file VHD. Esiste uno strumento / programma sotto Linux che può creare direttamente un file VHD? O è possibile convertire un'immagine del disco grezzo creata usando dd in un file VHD, senza allocare spazio per i blocchi vuoti? Come procederesti?

Come sempre, qualsiasi consiglio o commento è molto apprezzato !!


I BSD hanno uno strumento chiamato mkimg che può creare un'immagine vhd tra altri formati.
giuliano il

Risposte:


30

Per riferimento futuro, ecco come ho finalmente proceduto, con alcuni commenti sui vari problemi o insidie ​​riscontrate:

1. Avviare la macchina con un sistema live Linux

Il primo passo è stato avviare la macchina contenente il disco sull'immagine, usando un sistema live Linux.

NOTA: la mia prima idea è stata quella di utilizzare un disco Ubuntu Live USB, ma la macchina non supportava l'avvio da USB, quindi ho trovato più facile usare un vecchio CD live di Knoppix .

2. Immagine del disco utilizzando dde reindirizza i datissh

Quindi, ho copiato tutto il contenuto del disco in un'immagine di file sul mio server locale usando dde instradando i dati attraverso ssh:

$ dd if = / dev / hdX bs = 4k conv = noerror, sync | ssh -c blowfish myuser @ myserver 'dd of = myfile.dd'

Alcuni commenti qui: questo metodo leggerà tutto il contenuto del disco, quindi può richiedere molto tempo (mi ci sono voluti 5 ore per un disco da 80 Gb). Il collo di bottiglia non è la rete, ma 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 usando il comando hdparm -ied eseguendo un test con hdparm -Tt /dev/hdX).

NOTA: ddnon visualizza l'avanzamento dell'operazione, ma possiamo forzarlo a farlo inviando il segnale USR1 al ddPID di processo da un altro terminale:

$ kill -USR1 PIDofdd

3. Recupera lo spazio inutilizzato

A questo punto, la macchina di origine non è più necessaria e lavoreremo esclusivamente sul server di destinazione (anche su Linux). VirtualBox verrà utilizzato per convertire l'immagine del disco grezzo nel formato VHD, ma prima di farlo, possiamo azzerare i blocchi inutilizzati, in modo che VirtualBox non alloca 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 usando partedsul 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

NOTA 2: il driver NTFS del kernel Linux predefinito fornisce l'accesso in sola lettura, pertanto è necessario installare e utilizzare il ntfs-3gdriver userspace o scrivere sul disco genererà un errore!

4. Creare l'immagine VHD usando VBoxManage

A questo punto, possiamo usare le utility di VirtualBox per convertire l'immagine grezza in un file VHD:

VBoxManage convertfromraw myfile.dd myfile.vhd --format VHD

dovresti essere in grado di montare l'immagine vhd usando vdfuseo qemu-nbdo convertendola in un file .img (maggiori informazioni: askubuntu.com/questions/19430/… )
Francesco,

1
Su una macchina lenta, la crittografia di ssh può essere un collo di bottiglia. Prendi in considerazione l'utilizzo di netcat (man nc) se non ti serve la crittografia.
Jeremy,

2
Hai dimenticato di cd nel disco montato prima di creare il file zero: mount -o loop, rw, offset = 26608813056 -t ntfs-3g /mnt/mydisk/myfile.dd / mnt / tmp_mnt; cd / mnt / tmp_mnt; cat / dev / zero> zero.file; rm zero.file; Inoltre puoi usare pv invece di dd per mostrare progressi istantanei.
Smeterlink

1
Probabilmente dovresti usare una dimensione di blocco più grande con dd, ad esempio bs=4Mper accelerare significativamente il processo.
Fritz,

13

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 esso ntfsclone2vhd,.

Dovresti semplicemente fare qualcosa del genere:

ntfsclone --save-image -o - /dev/sdXX | ntfsclone2vhd - /mnt/usb/output.vhd

1
3 anni di ritardo al gioco, ma questa pagina è il principale successo di Google per le parole chiave pertinenti, quindi potrebbe ancora aiutare alcune anime povere in futuro.
Yirkha,

2
QUESTA SOLUZIONE DEVE ESSERE VOTATA ALL'INIZIO. È di gran lunga la soluzione più semplice (a parte dover makecopiare Linux) che ho trovato in molte ore di ricerca. Bravo per aver preso l'iniziativa Yirkha!
user66001,

3

Un approccio consiste nell'utilizzare un paio di tecnologie utili: VirtualBox e il ntfsprogspacchetto.

Le versioni recenti di VirtualBox consentono di creare file del disco rigido VHD, mentre ntfsprogsfornisce l' ntfscloneutilità. Come suggerisce il nome, ntfscloneclona i filesystem NTFS e credo che lo faccia a livello di filesystem, saltando blocchi di dischi inutilizzati.

Quindi, per iniziare, crea una nuova VM in VirtualBox e esegui il provisioning di una nuova unità di file VHD vuota. L'unità VHD deve essere grande solo quanto la dimensione dei dati in uso sull'unità fisica che si desidera clonare (beh, in realtà, renderla un po 'più grande, per consentire un po' di spazio).

Quindi, trova un CD live Linux che contenga il ntfsprogspacchetto e openssh-server. Mi piace System Rescue CD per questo, ma praticamente dovrebbe funzionare anche qualsiasi CD live basato su Debian o Ubuntu.

Avviare la VM VirtualBox con il CD live di Linux e avviarla sshdall'interno della VM in modo da poter eseguire i comandi su di essa da remoto. Partiziona il disco rigido virtuale vuoto in modo appropriato, usando lo strumento di partizionamento che preferisci (mi piace semplicemente vecchio fdisk, ma sono in qualche modo vecchia scuola).

Con un'altra copia del CD live di Linux, avviare la macchina contenente il disco fisico che si desidera clonare. Presumo che la VirtualBox VM e questa macchina siano accessibili l'una all'altra sulla rete. Su questa macchina, eseguire il comando seguente (tutto su una riga):

ntfsclone --save-image -o - /dev/sdXX |
    ssh root@VirtualBox-VM 'ntfsclone --restore-image --overwrite /dev/sdYY -'

dove:

  • /dev/sdXX è il nome del dispositivo (sul computer locale) dell'unità fisica che si desidera clonare e
  • /dev/sdYY è il nome del dispositivo (nella VM) dell'unità di destinazione VHD.

Spiegazione: Il primo ntfsclonecomando nella pipeline estrae un'immagine del filesystem NTFS di origine e la invia attraverso il tunnel ssh, mentre il secondo ntfsclonecomando riceve l'immagine e la ripristina sull'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 anticipata del processo).

Un'ultima cosa che potresti voler fare è eseguire un Windows chkdsksull'unità VHD, solo per assicurarti che la clonazione non abbia introdotto alcun problema (non dovrebbe avere, ma ehi, sono un po 'paranoico su queste cose).


Ciao, grazie mille per la tua soluzione proposta! Alla fine, ho usato un altro metodo poiché avevo diverse partizioni sul disco per il backup e non potevo facilmente usare VirtualBox sulla macchina per eseguire il backup (vedi la mia risposta per i dettagli), ma il tuo suggerimento per usare VirtualBox e ssh si è rivelato molto utile!
Federico

1

(So ​​che questo è un vecchio post, ma forse questo aiuterà almeno gli altri.)

Hai davvero bisogno di essere in grado di creare l'immagine sotto Linux? Penso che stai cercando di eseguire il backup dei dischi rigidi di Windows su VHD. Non penso che i file system Linux possano essere incapsulati in un contenitore VHD.

Un servizio gratuito di Sysinternals utility chiamata Disk2vhd creerà VHD del attualmente in esecuzione Windows XP o sistema più recente. Questo dovrebbe funzionare anche per l'imaging di unità USB montate.


0

Di recente provo anche a clonare un sistema Linux live.

Ancora nessuna soluzione perfetta. Suggerisci 2 modi in cui puoi provare:

(1) VMware vConverter (gratuito)

Devi installare vsphere hypervisor (gratuito) come destinazione.

L'ho fatto giorni fa, senza fortuna per riuscire. Immagino che installi vSphere su un VirtualBox.

Rif qui: http://xrubenx.blogspot.com.au/2010/01/vmware-converter-standalone.html

(2) Utilizzare questo http://www.r1soft.com/tools/linux-hot-copy/

Proverò la hotcopy R1Soft questo fine settimana.


Per questo non proverò hot-copy, wiki.r1soft.com/display/LTR1D/hcp-setup
NelsonT

0

Puoi anche usare un cd live con windows. Non è ufficiale di Microsoft ma funziona. Puoi metterlo su un disco cd o usb.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.