web-dev-qa-db-fra.com

VMware Workstation: comment réduire la taille maximale du fichier .vmdk

J'ai un fichier disque de 150 Go (.vmdk, non préalloué) où est stockée ma machine virtuelle.

Le fichier fait actuellement 20 Go, mais il grossit chaque jour, même si je ne stocke rien de nouveau dans le système de fichiers invité.

Je cherchais depuis des heures un moyen de réduire la taille maximale de ce disque , de manière à ce qu'il n'atteigne jamais 150 Go (j'aimerais définir la limite à 30 Go et voir ce qui se passe lorsque le VM atteint cette taille).

Ce que j'ai essayé

  • Conversion de l'image disque avec VMware Converter → Cela ne fonctionne pas, l'outil permet uniquement de créer une copie complète ou un "clone lié".
  • Création d'une nouvelle machine virtuelle vierge de la taille souhaitée afin de copier les données de 20 Go sur le nouveau .vmdk → Je ne trouve pas le moyen d'effectuer la copie ni même de connecter le nouveau disque à mon VM existant que je réalise la copie en utilisant le système d'exploitation invité).
  • Recherche dans le fichier .vmx pour vérifier si la taille maximale n'a pas été définie en texte brut (ce n'est pas le cas).

Bien que cette tâche semble techniquement assez simple (il n'y a pas de réduction délicate, juste un simple changement de taille), je suis vraiment à court d'idées ici ...

Y a-t-il une solution du tout?

27
Sébastien

La procédure habituelle pour réduire la taille d'un disque .vmdk consiste à:

  1. Défragmentez le disque via l'invité, en choisissant un mode de défragmentation qui consolide l'espace vide à la fin du disque. Pour un invité Windows, vous devez vider la corbeille et désactiver le mode veille prolongée et la pagination, en les renvoyant une fois la défragmentation terminée.

  2. Mettre à zéro tout l'espace inutilisé sur le disque.
    Sous Windows, utilisez sdelete : sdelete -c.
    Pour Linux: dd if=/dev/zero of=/mytempfile && rm -f /mytempfile.

  3. Rétrécissez le disque (ce qui peut prendre beaucoup de temps).
    VMware Workstation: Menu VM/Manage/Clean up.
    Ou utilisez: vmware-vdiskmanager.exe -k [VMDK PATH].
    pour ESX: vmkfstools --punchzero [VMDK PATH].

La conversion du disque en disque cultivable en disque préalloué pourrait empêcher sa croissance. Cela peut être fait en utilisant vmware-vdiskmanager avec le paramètre -t dont les valeurs sont:

0 : single growable virtual disk
1 : growable virtual disk split in 2Gb files
2 : single preallocated virtual disk
3 : preallocated virtual disk split in 2Gb files

La commande suivante convertira le fichier .vmdk de Growable en préalloué:

vmware-vdiskmanager -r current_disk_name.vmdk -t 3 new_disk_name.vmdk

Si vous souhaitez modifier la taille du disque, vous devez le faire pendant que le disque est encore au format développable (exemples ici ).

Pour plus d'informations, reportez-vous au Guide de l'utilisateur de Virtual Disk Manager .

22
harrymc

Le fichier fait actuellement 20 Go, mais il grossit chaque jour, même si je ne stocke rien de nouveau dans le système de fichiers invité.

Parce que le système d'exploitation et ses programmes d'application utilisent temporairement beaucoup d'espace disque pour les fichiers temporaires, les fichiers de page, les fichiers de veille prolongée et les fichiers de configuration. Une fois supprimés, en fonction de la politique du système d'exploitation, de nouveaux secteurs sur le disque sont utilisés à la prochaine utilisation. La VM alloue de la mémoire pour le disque virtuel à partir d'un disque réel chaque fois qu'un nouveau secteur est utilisé sur le disque virtuel. Comme les secteurs sur le disque virtuel ne sont pas toujours réutilisés par le système d'exploitation invité, la VM considère son utilisation comme un disque et donne de l'espace à partir d'un disque réel, ce qui entraînera une croissance de l'image du disque virtuel.

Le titre de votre question risque moins d'être résolu car l'utilisation d'un tel outil sans inspection de l'image peut entraîner un désastre total. Mais vous pouvez empêcher la croissance de l’image au-delà de 30 Go. Il y a plusieurs façons d'atteindre l'objectif.

A. Utilisez seulement 30 Go partitionnés et laissez le reste comme espace libre. Si vous avez déjà partitionné plus d’espace, vous devez le réduire/le supprimer, créer une nouvelle partition, la vider avec des zéros et la perforer comme décrit par @harrymc. Comme l’espace dans la zone non partitionnée n’est jamais utilisé, le disque virtuel ne dépassera jamais 30 Go.

B. Créez un instantané et restaurez-le après utilisation. Après avoir créé la capture instantanée VM, stockez les données dans un nouveau fichier image. Si vous le restaurez, sans enregistrer ni créer de nouveaux instantanés, toutes les données modifiées sont supprimées et l'espace est libéré.

C. Créez un nouveau disque virtuel de 30 Go maximum, ajoutez-le en tant que nouveau disque dans votre machine virtuelle actuelle, déplacez toutes les données sur le nouveau disque virtuel à l'aide d'un outil de sauvegarde. Vous pouvez utiliser un Linux en direct pour le clonage.

L'option recommandée est A

6
totti

Ceci ne fonctionne que pour les VMDK épars (NON pré-alloué) Une défragmentation est nécessaire avant la réduction afin de garantir que l'espace utilisé est contigu

défragmentation sous Windows

Sur une machine virtuelle Windows, vous devez d’abord exécuter une défragmentation de disque à partir de Windows. La défragmentation dans Windows garantit que tous les espaces utilisés sont contigus. Vous pouvez ensuite réduire la taille du disque virtuel.

Réduire le disque virtuel

Pour réduire le disque virtuel:

Ouvrez le Panneau de configuration/Boîte à outils de VMware Tools:

Sous Windows:

Double-cliquez sur l'icône VMware Tools dans la barre d'état système ou cliquez sur Démarrer> Panneau de configuration> VMware Tools.

Sous Linux:

Ouvrez le terminal et lancez cette commande:

vmware-toolbox

Remarque: dans Workstation 9.x (Windows) et les versions ultérieures, la réduction est automatiquement effectuée lors du nettoyage du disque. Par conséquent, cette option est supprimée de VMware Tools Panel. Accédez à VM> Manage> Clean up Disks. Ceci n'est pas disponible dans la version Linux de VMware Workstation 9.x et versions ultérieures.

Cliquez sur l'onglet Réduire. Sélectionnez le lecteur que vous souhaitez réduire. Cliquez sur Préparer pour réduire, puis suivez les instructions à l'écran. Attention: N'arrêtez pas votre machine virtuelle ou la machine hôte pendant la réduction du disque. Aussi, n'essayez pas d'annuler le processus. L'interruption de ce processus peut causer des dommages irréparables à votre disque virtuel et il est possible que vous ne puissiez plus redémarrer votre machine virtuelle.

De base de connaissances VMWare

3
Jalal Mostafa

Pourquoi ne pas simplement définir la taille du disque impliqué à 150 Go à partir de 150 Go.

Vous devrez définir la somme de toutes les partitions sur moins de 30 Go. Vous devrez réduire la taille des partitions au fur et à mesure. Il y a beaucoup de documentation sur ce site sur la façon de réduire les partitions afin que je ne répète pas cela ici encore.

Pourquoi avez-vous créé une partition mince de 150 Go si vous n’avez pas l’espace nécessaire pour la prendre en charge à sa taille maximale? On dirait que cela ne fait que demander des ennuis.

2
mdpc

La réponse de @harrym est plutôt bonne, mais elle ne répond pas à la question. Le PO veut réduire la taille maximale . Le problème est que l'hyperviseur ne sait pas quelle quantité de la taille présentée (ou taille maximale) est effectivement utilisée par le système d'exploitation. Le compactage (vmware-vdiskmakager -k) s'applique à un vmdk évolutif. Il ne fait rien sur celui préalloué.

Donc, les étapes pour réduire le disque sont les suivantes:

  1. Redimensionner la partition sur le disque via le système d'exploitation ou via un live CD approprié
  2. Redimensionnez le périphérique vmdk en choisissant avec soin la limite pour ne couper aucun espace de partition utilisable. Vous pouvez toujours laisser plus d’espace dans l’image que vous en avez réellement besoin.

La première étape implique une procédure à partir de VM et varie en fonction du système d'exploitation invité. La deuxième étape pourrait être prise en charge par les commandes vmware mais je n’ai pas trouvé de moyen profond de le faire. Ainsi l'approche du hacky.

Voici une solution peu rapide (en raison du déplacement important de données) et sale qui a fait l'affaire. Nous aurons besoin d'un espace disponible égal à la taille maximale du périphérique .

AVERTISSEMENT: N'oubliez pas de sauvegarder les données importantes avant toute opération !!

  1. Trouvez un moyen de redimensionner la partition invité et de laisser un espace non alloué à la fin du périphérique. Deux exemples:

    À partir de l'OS invité: Windows 7

    1. Vous pouvez utiliser la fonctionnalité de redimensionnement en ligne. C'est une bonne idée de commencer par défragmenter le disque à partir de l'OS de quête.
    2. Exécutez diskmgmt.msc, sélectionnez la partition (volume) sur le disque que vous souhaitez redimensionner, cliquez avec le bouton droit de la souris -> Réduire le volume. Dans la boîte de dialogue qui apparaît, réduisez la taille selon vos besoins. Notez que, puisque la partition est en cours d'utilisation (s'il s'agit du disque système ou s'il est fortement fragmenté), il est possible que vous ne puissiez pas récupérer la plus grande partie de votre espace disponible. Possibilité de laisser de l'espace libre supplémentaire.
    3. Maintenant, nous voulons connaître les partitions terminant le secteur du disque (ou octet). En supposant qu'il s'agisse de la seule partition du périphérique, nous prenons la taille du volume telle qu'elle est affichée sur mon ordinateur -> sélectionnez le disque -> clic droit -> propriétés -> Capacité: notez le nombre en octets. (par exemple, dans mon exemple 107371032576 pour 99,9GB). Ajoutez quelques centaines de Mo pour la sécurité (+204800) (par exemple 107371237376). Pour être sûr qu'il ne soit pas nécessaire d'ajouter quelque chose qui manque, nous pouvons utiliser l'utilitaire de ligne diskpart cmd pour rechercher le décalage de la partition depuis le début du périphérique. lancez diskpart puis: list disk, sélectionnez le disque id , list part, sélectionnez la partie id , detail. Exemple:

    DISKPART> détail

    Partition 1

    Décalage en octets: 1048576

    Assurez-vous d’ajouter au moins ce nombre à la taille du disque. Nous devons maintenant convertir les octets en secteurs divisés par 512 et arrondis au maximum. Par exemple. 209709448. Notez ce numéro pour l'étape 3.

    via un cd en direct: SystemResqueCD

    1. Sinon, vous pouvez utiliser un cd resque, ( SystemResqueCD est ma proposition), téléchargez le fichier ISO amorçable, montez-le en tant que périphérique de CD-ROM virtuel sur votre VM, démarrez à partir du CD (en appuyant sur la touche Echap de l’écran de démarrage de VMWare, vous devrez peut-être essayer plusieurs fois car il apparaît très rapidement). Lorsque vous atteignez le type d’invite de commande: startx, cela devrait vous amener à l’interface graphique.
    2. Une fois sur le bureau de systemresque, démarrez gparted (par exemple depuis un terminal). Recherchez la partition à redimensionner (elle doit être clairement démontée, en cas de doute, effectuez une analyse à partir du système d’exploitation invité). Faites le redimensionnement en planifiant soigneusement vos besoins en espace.
    3. Encore une fois, nous devons trouver le décalage final en secteurs (ou en octets) de la partition. Ouvrez le terminal et écrivez un périphérique [] partagé, puis imprimez. Par exemple.

Numéro Début Fin Taille Type Système de fichiers Drapeaux

1 2048s 113455103s 113453056s démarrage initial ntfs

Notez le secteur de fin et ajoutez 1.Eg. 113455104. Notez ce numéro pour l'étape 3.

  1. Comme le hack fonctionne sur un seul fichier préalloué (type 2) de vmdks (nous n'avons pas essayé plusieurs types de fichiers), nous convertissons d'abord l'élément évolutif en préalloué. Nous aurons temporairement besoin d'une partition avec un espace physique correspondant à la taille maximale du périphérique. (par exemple 150 Go).

    vmware-vdiskmanager.exe -r sourcevmdk -t 2 destvmdk

  2. Maintenant, la partie la plus délicate, pour le disque préalloué, il devrait y avoir 2 vmdks

    disk.vmdk disk-flat.vmdk

    le premier étant seulement KB long, et le dernier contenant les données s'étend. Ouvrez le premier (disk.vmdk) lorsque la station de travail VMWare est désactivée , avec un éditeur de texte (Notepad ++ étant ma suggestion). Trouver la ligne

    RW 113455104 FLAT "Windows 7_x64-fl-flat.vmdk" 0

    Oui, vous obtenez le point, le deuxième champ est le nombre de secteurs alloués à l'appareil. En guise de validation, multipliez par 512 et recherchez la taille en octets, puis divisez par 1073741824 (1024 ** 3) pour trouver la taille en Go. Cela devrait être la taille du périphérique précédent.

    Maintenant, remplacez ce numéro par le numéro indiqué à la première étape et enregistrez le fichier. WARNING: Une erreur ici et vous pourriez finir par rogner les données réelles utilisées sur le système de fichiers. (Mais nous avons redimensionné le fs au début de l'appareil et effectué des calculs corrects et sûrs, non?)

  3. Jusqu'à présent, aucune donnée n'a encore été touchée. Effectuez cette dernière étape pour réduire réellement les extensions. Nous allons utiliser la fonctionnalité de changement de nom de vmware-vdiskmanager pour recréer le vmdk avec sa taille maintenant réduite.

    vmware-vdiskmanager.exe -n destvmdk sourcevmdk

2
basos

Il existe un moyen détourné d’utiliser le convertisseur VMWare pour créer un nouveau VM et une taille de VMDK inférieure, puis convertit le VMDK d’origine en fichier. nouvellement créé, VMDK plus petit.

Shrink VMDK

Étapes détaillées ici .

Notez que toute modification de la taille de VMDK nécessitera également une mise à jour correspondante de la table de partition .

2
hanxue

Pour un OS invité Linux VMware, exécutez:

Sudo vmware-toolbox-cmd disk shrinkonly

0
Tom Hale