56 votes

Quel est le moyen le plus rapide de fusionner toutes les instantanés dans VirtualBox ?

J'ai un VDI avec un certain nombre de snapshots pris à partir de celui-ci - disons, 50 ou 70 snapshots. Je veux avoir un VDI simple avec un état actuel. Ces snapshots prennent beaucoup trop d'espace disque et ne sont pas nécessaires en tant que snapshots.

Je sais que si j'appelle

VBoxManage clonehd thedisk.vdi thedisk-full.vdi
(50-70 fois) VBoxManage clonehd {uuid-of-snapshot}.vdi thedisk-full.vdi --existing

Je vais obtenir ce que je veux. Mais cela prend beaucoup de temps (plus de 5 heures compte tenu de ma configuration matérielle et d'une taille de disque initial de 16 Go).

Et, bien sûr, j'ai essayé VBoxManage snapshot delete et c'est étrange : ça ne fonctionne pas sur une machine arrêtée, ça peut échouer sur une machine en cours d'exécution et une fois que ça échoue, tous les appels ultérieurs échoueront également.

Y a-t-il un moyen de créer un VDI simple à partir d'un certain nombre de snapshots - plus rapidement?

$ VBoxManage --version
3.2.14r75509

(j'ai posé la question sur ServerFault mais j'ai décidé que cet endroit est plus approprié pour cette question)

60voto

Andrey Regentov Points 1346

Trouvé la solution. C'est aussi simple que la dernière étape des commandes que j'ai écrites ici. I.e.

VBoxManage clonehd chemincomplet/{uuid-de-la-dernière-snapshot}.vdi ledisque-complet.vdi

Je devrais donc cloner seulement la dernière snapshot, pas chaque snapshot de la chaîne. Et c'est des milliers de pour cent plus rapide.

L'uuid peut être trouvé en utilisant VBoxManage list hdds | grep NomVm | tail

Dans l'interface graphique (sur Windows), sélectionnez la VM, choisissez Snapshots en haut à droite, faites un clic droit sur la snapshot que vous voulez, choisissez Cloner..., et sélectionnez Clonage Complet dans la boîte de dialogue.

25voto

Stuart Rackham Points 371

Voici une technique (testée sur VirtualBox 4.3.4) qui utilise la commande 'Clone' pour fusionner et compacter toutes les instantanés vers une nouvelle VM contenant un seul fichier VDI :

  1. Renommez la VM afin de pouvoir réutiliser son nom actuel pour la VM clonée (vous pouvez modifier le nom de la VM depuis l'onglet 'Général' des paramètres 'Basiques').

  2. Cliquez avec le bouton droit sur la VM et exécutez la commande 'Clone...':

    • Définissez le nom sur le nom original de la VM.
    • Acceptez les valeurs par défaut restantes i.e. Type de clonage : 'Clonage complet'; Instantanés : 'État actuel de la machine'.
  3. Supprimez l'ancienne VM (cliquez avec le bouton droit sur la VM et exécutez la commande 'Supprimer...').

3voto

Robert Garner Points 101

Vous pouvez essayer d'exporter vers OVF puis importer le fichier généré.

Comme expliqué ici:

OVF ne peut pas décrire les instantanés qui ont été pris pour une machine virtuelle. Par conséquent, lorsque vous exportez une machine virtuelle qui a des instantanés, seul l'état actuel de la machine sera exporté, et les images de disque dans l'export auront un état "aplati" identique à l'état actuel de la machine virtuelle.

En conséquence, vous aurez une machine virtuelle clonée avec l'état actuel sans autres instantanés.

0voto

golimar Points 1172

Cette opération signifie lire et écrire de très gros fichiers sur le même disque physique. La seule façon d'accélérer cela est de placer ces fichiers dans différents disques en modifiant les chemins dans votre commande VBoxManage. Si la machine n'a qu'un seul disque, vous pouvez utiliser un disque dur externe USB ou même un disque dans une autre machine via un partage réseau (en fonction de la vitesse de votre réseau)

-3voto

Claudio Points 1

Certains ont un LAN de 10Gib/s, donc il peut transférer plus d'un gigaoctet par seconde, donc cela ne sera pas un goulot d'étranglement.

Certains ont un LAN de 1 Gib/s, donc il peut transférer plus de 100 mégaoctets par seconde, donc cela ne sera pas un goulot d'étranglement (à moins que vous n'ayez un SSD vraiment rapide).

Les disques mécaniques, lorsqu'ils lisent et écrivent sur le même disque en même temps (ou très fragmenté), descendent à près de 20 mégaoctets par seconde, tandis que sur un disque non fragmenté, la lecture seule ou l'écriture seule peuvent dépasser les 100 mégaoctets par seconde.

Vous parlez de la lenteur du LAN, mais pas de l'USB (2.0, sans parler du 1.1 ou du 1.0) qui est beaucoup plus lent.

Ce que je suggérerais serait : Utilisez l'USB 3.1 Gen2 de Type C ou un eSATA / SATA / SAS

Mais toujours : Utilisez un deuxième disque assez rapide.

Et toujours : Cloner sur un autre disque et copier de nouveau le fichier est beaucoup plus rapide que d'utiliser seulement un des disques, sauf s'il s'agit d'un SSD ou d'un disque dur avec des bras à têtes multiples indépendants (ils peuvent lire et écrire en même temps sur deux endroits de la surface, chaque tête ayant son propre bras, très cher, environ >9876€).

Le mieux est de cloner seulement le disque dur virtuel de l'état que vous souhaitez, puis vérifier que cela fonctionne, puis RESTORE le niveau supérieur (supprimera toutes les instantanés), puis retirer le HDD de stockage et connecter le nouveau.

Donc les étapes, pour perdre tous les anciens états dans un schéma sans instantanés arborescents :

  1. Cloner d'un disque dur à un autre, éviter les goulets d'étranglement
  2. Créer une nouvelle machine, connecter ce disque, le déconnecter, le configurer en inmutable
  3. Tester si cela fonctionne (puisque c'est inmutable) vous aurez le même état
  4. Si vous avez besoin qu'il ne soit pas inmutable, le déconnecter, le remettre à normal, etc.
  5. Supprimer les anciennes instantanés de la machine (RESTORE d'abord)
  6. Supprimer la machine de test temporaire
  7. Recopier sur le disque le disque virtuel
  8. Attacher le disque cloné

Mais gardez toujours à l'esprit que les instantanés peuvent être comme un arbre complet, un nœud peut avoir plus d'un enfant, chaque enfant peut avoir plus d'un enfant, etc.

Pour travailler avec des arbres d'instantanés, pensez toujours à SUPPRIMER comme la suppression d'un nœud sans affecter le reste des nœuds (seul l'état est perdu, mais ni le parent ni l'enfant ne seront affectés, les données seront fusionnées sur tous les premiers enfants de sous-niveau, donc un processus lent) et à RESTAURER comme détruisant tous ses enfants sur tous les sous-niveaux (perdre tous les états après celui que vous restaurez, cela supprime uniquement les fichiers, donc un processus vraiment rapide, juste quelques secondes).

Voilà !

P.D. : Quels noms horribles VBOX a donnés à ces deux opérations (supprimer juste un nœud = SUPPRIMER ; supprimer tous les nœuds enfant sur tous les sous-niveaux = RESTAURER)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X