GNU/Linux >> Tutoriels Linux >  >> Linux

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

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

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

La première étape consistait à démarrer la machine contenant le disque à imager, à l'aide d'un système live Linux.

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

2. Créez une image du disque en utilisant dd et dirigez les données vers ssh

Ensuite, j'ai copié tout le contenu du disque dans une image de fichier sur mon serveur local en utilisant dd et acheminer les données via ssh :

$ dd if=/dev/hdX bs=4k conv=pas d'erreur,sync | ssh -c blowfish [email protected] 'dd of=myfile.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 vraiment la vitesse de lecture du disque. Avant de lancer la copie, je conseille de vérifier les paramètres BIOS/disque/système pour s'assurer que le disque et la carte mère fonctionnent à leur vitesse la plus élevée possible (ceci peut être vérifié à l'aide de la commande hdparm -i et en lançant un test avec hdparm -Tt /dev/hdX ).

REMARQUE :dd n'affiche pas la progression de l'opération, mais nous pouvons le forcer à le faire en envoyant le USR1 signal au dd traiter le PID depuis un autre terminal :

$ kill -USR1 PIDofdd

Remarque :Versions plus récentes de dd prend en charge le status=LEVEL choix (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. 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, afin 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 :Le décalage 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

REMARQUE 2 :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 l'écriture sur le disque génère 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 un fichier VHD :

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

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 pour cela, ntfsclone2vhd .

Vous feriez alors simplement quelque chose comme ceci :

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

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, tandis que ntfsprogs fournit le ntfsclone utilitaire. Comme son nom l'indique, ntfsclone clone les systèmes de fichiers NTFS, et je crois qu'il le fait au niveau du système de fichiers, en sautant les blocs de disque inutilisés.

Donc, pour commencer, créez une nouvelle machine virtuelle dans VirtualBox et approvisionnez-la en un nouveau lecteur de fichier VHD vide. Le disque VHD n'a besoin que d'être aussi grand que la taille des données utilisées sur le disque physique que vous souhaitez cloner (en fait, agrandissez-le un peu, pour permettre une certaine marge de manœuvre).

Ensuite, trouvez un live CD Linux contenant le ntfsprogs package, ainsi que openssh-server . J'aime System Rescue CD pour cela, mais à peu près n'importe quel CD live basé sur Debian ou Ubuntu devrait é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 de manière appropriée, en utilisant l'outil de partitionnement que vous préférez (j'aime le vieux fdisk , mais je suis un peu old school).

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

ntfsclone --save-image -o - /dev/sdXX |
    ssh [email protected] 'ntfsclone --restore-image --overwrite /dev/sdYY -'

où :

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

Explication :Le premier ntfsclone La commande dans le pipeline extrait une image du système de fichiers NTFS source et l'envoie via le tunnel ssh, tandis que la seconde ntfsclone 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 pour fichier du disque physique d'origine (à l'exception de toute erreur matérielle, comme des secteurs défectueux, qui pourrait entraîner l'arrêt prématuré du processus).

Une dernière chose que vous voudrez peut-être faire est d'exécuter un Windows chkdsk sur le lecteur VHD, juste pour s'assurer que le clonage n'a posé aucun problème (cela n'aurait pas dû, mais bon, je suis un peu paranoïaque à propos de ces choses).


Linux
  1. Comment augmenter le nombre d'inodes de disque sous Linux

  2. Comment créer une clé USB amorçable Linux à partir de la ligne de commande Linux

  3. Linux - Comment créer un fichier image de partition formaté à partir de zéro ?

  4. Comment créer une image personnalisée à partir d'un conteneur Docker

  5. Comment monter une image disque multi-partition sous Linux ?

Comment créer une vidéo à partir d'images sous Linux

Comment créer une clé USB en direct d'Antergos Linux

Comment monter un fichier de disque dur virtuel (VHD) dans Ubuntu Linux ?

Comment chiffrer le système de fichiers racine sous Linux

Comment créer des partitions de disque sous Linux

Comment créer des fichiers dans le système Linux :Un guide ultime