Comment créer une image disque VHD à partir d'un système live Linux?

28

Une fois de plus, je dois faire appel aux experts de SuperUser, car mes autres sources (principalement Google ;-)) ne se sont pas avérées très utiles ...

Donc, fondamentalement, je voudrais créer une image VHD d'un disque physique à archiver / à accéder / peut-être même monter sur une machine virtuelle. Maintenant, il existe des dizaines d'articles et de tutoriels sur la façon de le faire sur le Web, mais aucun ne remplit exactement les conditions que j'aimerais atteindre:

  • Je voudrais le fichier de destination être un Image VHD , comme Windows 7 peut le monter en natif, même sur le réseau et que de nombreux autres programmes peuvent l’utiliser (VirtualBox, ...)
  • Le disque que je tente d’image contient une installation de Windows XP. En théorie, je pourrais donc utiliser le disk2vhd utilité, mais je voudrais trouver un solution qui ne nécessite pas de démarrer Windows XP installer (c'est-à-dire garder le disque en lecture seule)
  • Ainsi, je cherchais une solution impliquant une sorte de système live (fonctionnant à partir d'une clé USB ou du réseau)

Cependant, toutes les solutions que j'ai rencontrées utilisent soit disk2vhd ou utilisez le dd commande sous linux, qui effectue une copie complète du disque (c.-à-d. même des blocs vides) et ne produit pas de fichier VHD. Existe-t-il un outil / programme sous Linux permettant de créer directement un fichier VHD? Ou est-il possible de convertir une image disque brute créée à l'aide de dd en un fichier VHD, sans allouer d'espace pour les blocs vides? Comment procéderiez-vous?

Comme toujours, tout conseil ou commentaire est très apprécié !!

Federico
la source
Les BSD ont un outil appelé mkimg qui peut créer une image vhd parmi d’autres formats.
julian

Réponses:

29

Pour référence future, voici comment j'ai finalement procédé, avec quelques commentaires sur les divers problèmes ou pièges rencontrés:

1. Démarrer la machine avec un système live Linux

La première étape consistait à démarrer la machine contenant le disque en image, en utilisant un système live Linux.

REMARQUE: ma première idée était d’utiliser un disque USB Ubuntu Live, mais le   la machine ne supportait pas le démarrage à partir de l'USB, je l'ai donc trouvé plus facile à utiliser   un vieux Knoppix live CD .

2. Image du disque en utilisant dd et diriger les données à travers ssh

Ensuite, j'ai copié tout le contenu du disque dans une image de fichier sur mon serveur local à l'aide de dd et canaliser les données à travers ssh:

$ dd if = / dev / hdX bs = 4k conv = noerror, sync | ssh -c blowfish monutilisateur @ mon serveur 'dd de = monfichier.dd'

Quelques commentaires ici: cette méthode va lire tout le contenu du disque, donc ça peut prendre très longtemps (ça m'a pris 5h pour un disque de 80Go). Le goulot d'étranglement n'est pas le réseau, mais bien la vitesse de lecture du disque. Avant de lancer la copie, il est conseillé de vérifier les paramètres BIOS / disque / système afin de s’assurer que le disque et la carte mère fonctionnent à la vitesse la plus élevée possible (vous pouvez le vérifier en utilisant la commande hdparm -i et en effectuant un test avec hdparm -Tt /dev/hdX ).

REMARQUE: dd ne produit pas l'avancement de l'opération, mais nous pouvons le forcer à le faire en envoyant le USR1 signaler au dd traiter le PID d'un autre terminal:

$ kill -USR1 PIDofdd

3. Récupérer l'espace inutilisé

À ce stade, la machine source n'est plus nécessaire et nous travaillerons exclusivement sur le serveur de destination (sous Linux également). VirtualBox sera utilisé pour convertir l’image disque brute au format VHD, mais avant cela, nous pouvons mettre à zéro les blocs inutilisés, de sorte que VirtualBox ne leur alloue pas d’espace dans le fichier final.

Pour ce faire, j'ai monté les images en tant que périphérique de bouclage:

$ mount -o loop,rw,offset=26608813056 -t ntfs-3g /mnt/mydisk/myfile.dd /mnt/tmp_mnt
$ cat /dev/zero > zero.file
$ rm zero.file

REMARQUE: L’offset indiquant le début de la partition dans l’image disque peut être obtenu en utilisant parted sur le fichier image:

$ 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

NOTE2: Le pilote NTFS du noyau Linux par défaut fournit un accès en lecture seule. Il est donc nécessaire d'installer et d'utiliser l'espace utilisateur. ntfs-3g pilote ou écrire sur le disque va générer une erreur!

4. Créez l'image VHD à l'aide de VBoxManage

À ce stade, nous pouvons utiliser les utilitaires VirtualBox pour convertir l’image brute en fichier VHD:

VBoxManage convertfromraw myfile.dd myfile.vhd --format VHD
Federico
la source
vous devriez pouvoir monter l’image vhd en utilisant vdfuse ou qemu-nbd ou le convertir en un fichier .img (plus d'infos: askubuntu.com/questions/19430/… )
Francesco
Sur une machine lente, le cryptage de la SSH peut constituer un goulot d'étranglement. Utilisez plutôt netcat (man nc) si vous n'avez pas besoin du chiffrement.
Jeremy
Vous avez oublié de créer un cd sur le disque monté avant de créer le fichier zéro: boucle mount -o, rw, offset = 26608813056 -t ntfs-3g /mnt/mydisk/myfile.dd / mnt / tmp_mnt; cd / mnt / tmp_mnt; cat / dev / zero & gt; zero.file; rm zero.file; Vous pouvez également utiliser pv au lieu de dd pour afficher les progrès instantanés.
Smeterlink
9

J'essayais de faire exactement la même chose que l'OP (tout en sauvant une installation Windows) et j'ai fini par créer un nouvel outil, ntfsclone2vhd.

Vous feriez alors simplement quelque chose comme ceci:

ntfsclone --save-image -o - /dev/sdXX | ntfsclone2vhd - /mnt/usb/output.vhd
Yirkha
la source
1
3 ans de retard dans le jeu, mais cette page est le top hit de Google pour les mots-clés pertinents. Elle pourrait donc encore aider certaines âmes pauvres à l'avenir.
Yirkha
2
CETTE SOLUTION DOIT ÊTRE ADOPTÉE EN HAUT. C’est de loin la solution la plus simple (sans devoir make copies de Linux) que j’ai trouvé en plusieurs heures de recherche. Bravo pour avoir pris l'initiative Yirkha!
user66001
3

Une approche consiste à utiliser quelques technologies pratiques: VirtualBox et le ntfsprogs paquet.

Les versions récentes de VirtualBox vous permettent de créer des fichiers de disque dur VHD, tout en ntfsprogs fournit le ntfsclone utilitaire. Comme son nom l'indique, ntfsclone clone les systèmes de fichiers NTFS, et je pense que cela se fait au niveau du système de fichiers, en ignorant les blocs de disque inutilisés.

Donc, pour commencer, créez une nouvelle machine virtuelle dans VirtualBox et mettez en service un nouveau lecteur de fichier VHD vide. Le disque dur virtuel ne doit pas dépasser la taille des données utilisées sur le disque physique que vous voulez cloner (eh bien, rendez-le un peu plus grand, afin de laisser un peu de marge de manœuvre).

Ensuite, recherchez un live CD Linux contenant le ntfsprogs forfait, ainsi que openssh-server. J'aime System Rescue CD pour cela, mais pratiquement tous les live CD basés sur Debian ou Ubuntu devraient également fonctionner.

Démarrez la machine virtuelle VirtualBox avec le live CD Linux et démarrez sshd dans la machine virtuelle afin que vous puissiez exécuter des commandes à distance. Partitionnez le disque VHD vide, en utilisant l’outil de partitionnement que vous préférez (j’aime fdisk, mais je suis un peu vieille école).

Avec une autre copie du live CD Linux, démarrez la machine contenant le disque physique que vous voulez cloner. Je suppose que la machine virtuelle VirtualBox et cette machine sont accessibles l'un à l'autre via le réseau. Sur cette machine, exécutez la commande suivante (sur une seule ligne):

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

où:

  • /dev/sdXX est le nom de périphérique (sur la machine locale) du lecteur physique que vous voulez cloner, et
  • /dev/sdYY est le nom de périphérique (dans la VM) du lecteur de destination du disque dur virtuel.

Explication: le premier ntfsclone commande en cours d’extraction extrait une image du système de fichiers NTFS source et l’envoie via le tunnel ntfsclone La commande reçoit l’image et la restaure sur le lecteur VHD.

Une fois l'opération terminée, le fichier VHD doit contenir un clone exact fichier par fichier du disque physique d'origine (à l'exception des erreurs matérielles, telles que des secteurs défectueux, susceptibles de provoquer une interruption prématurée du processus).

Une dernière chose à faire est d’exécuter Windows. chkdsk sur le disque dur virtuel, juste pour s’assurer que le clonage ne pose aucun problème (cela ne devrait pas l’être, mais bon, je suis un peu paranoïaque à propos de ces choses).

Steven Monday
la source
Bonjour, merci beaucoup pour votre solution proposée! Finalement, j'ai utilisé une autre méthode car j'avais plusieurs partitions sur le disque à sauvegarder et ne pouvais pas utiliser facilement VirtualBox sur la machine à sauvegarder (voir ma réponse pour plus de détails), mais votre suggestion d'utiliser VirtualBox et ssh s'est avérée très utile!
Federico
1

(Je sais que c'est un ancien post, mais peut-être que cela aidera au moins les autres.)

Avez-vous vraiment besoin de pouvoir créer l’image sous Linux? Je pense que vous essayez de sauvegarder les disques durs Windows au format VHD. Je ne pense pas que les systèmes de fichiers Linux puissent être encapsulés dans un conteneur de disque dur virtuel.

Un libre SysInternals utilitaire appelé Disk2vhd créera des disques durs virtuels du système Windows XP ou plus récent en cours d’exécution. Cela devrait également fonctionner pour les lecteurs d'image USB montés.

Bernard
la source
0

J'essaie également de cloner un système Linux live récemment.

Toujours pas de solution parfaite. Suggérez deux manières d’essayer:

(1) VMware vConverter (gratuit)

Vous devez installer vsphere hypervisor (free) en tant que destination.

Je l'ai fait il y a quelques jours, aucune chance de réussir. Je suppose que j'installe vSphere sur un VirtualBox.

Ref ici: http://xrubenx.blogspot.com.au/2010/01/vmware-converter-standalone.html

(2) Utilisez celui-ci http://www.r1soft.com/tools/linux-hot-copy/

Je vais essayer hotcopy R1Soft ce week-end.

NelsonT
la source
Je ne vais pas essayer la copie à chaud pour cette raison, wiki.r1soft.com/display/LTR1D/hcp-setup
NelsonT
0

Vous pouvez également utiliser un live cd avec Windows. Ce n'est pas officiel de Microsoft mais ça marche. Vous pouvez le mettre sur un lecteur de CD ou USB.

Smeterlink
la source