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

27

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

Le fichier est actuellement de 20 Go, mais il augmente tous les jours, même si je ne stocke rien de nouveau dans le système de fichiers invité.

Je cherche depuis des heures un moyen de réduire la taille maximale de ce disque , afin qu'il n'atteigne jamais 150 Go (je voudrais fixer la limite à 30 Go et voir ce qui se passe lorsque la machine virtuelle 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 20 Go de données sur le nouveau .vmdk → Je ne peux pas trouver un moyen d'effectuer la copie ou même de connecter le nouveau disque à ma machine virtuelle existante (afin que j'effectue la copie en utilisant l'OS 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étrécissement délicat, juste un simple changement de limite de taille), je suis vraiment à court d'idées ici ...

Y a-t-il une solution?

Sébastien
la source
1
Étant donné que les partitions sur le disque virtuel sont très probablement créées pour remplir l'espace annoncé, un «rétrécissement délicat» est en effet impliqué.
Daniel B

Réponses:

25

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

  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 l'hibernation et la pagination, en les renvoyant une fois la défragmentation terminée.

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

  3. Rétrécissez le disque (ce qui peut prendre un certain temps).
    VMware Workstation: Menu VM / Gérer / Nettoyer les disques.
    Ou utilisez: vmware-vdiskmanager.exe -k [VMDK PATH].
    pour ESX: vmkfstools --punchzero [VMDK PATH].

La conversion du disque de évolutif en préalloué pourrait arrêter sa croissance. Cela peut être fait en utilisant vmware-vdiskmanager avec le -tparamètre 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 .vmdk de évolutif en préalloué:

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

Si vous souhaitez modifier la taille du disque, cela doit être fait alors que le disque est toujours au format évolutif (exemples ici ).

Pour plus d'informations, consultez le Guide de l'utilisateur de Virtual Disk Manager .

harrymc
la source
2
Cependant, cela ne réduit pas la taille du disque annoncée en interne.
Daniel B
@DanielB: Non, cela ne réduit pas la taille maximale, juste la taille physique. La réduction de la taille maximale peut être dangereuse, car certains systèmes d'exploitation ne peuvent pas démarrer sans un certain espace libre sur le disque système.
harrymc
3
Il s'agit d'une technique utile que j'ai utilisée pour réduire l'espace occupé par le VMDK. Cependant, cela ne résout pas complètement mon problème, car si je veux garder le VMDK toujours sous, disons 30 Go, je devrai répéter périodiquement l'opération (ce qui prend effectivement beaucoup de temps).
Sébastien
Si le disque peut toujours être réduit à la taille souhaitée, ce qui signifie que la procédure ci-dessus fonctionne toujours pour réduire la taille, vous pouvez limiter la taille à l'avenir en convertissant le disque en taille fixe.
harrymc
1
@harrymc La conversion du disque en taille fixe conviendrait à mes besoins. Je n'ai tout simplement pas trouvé de moyen de le faire avec VMWare Workstation ou Converter.
Sébastien
6

Le fichier fait actuellement 20 Go, mais il grandit tous les jours, 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 d'échange, les fichiers d'hibernation et les fichiers de configuration. Une fois qu'ils sont supprimés en fonction de la politique du système d'exploitation, de nouveaux secteurs sur le disque sont utilisés la prochaine fois. La machine virtuelle alloue le stockage pour le disque virtuel à partir du disque réel chaque fois qu'un nouveau secteur est utilisé dans le disque virtuel. Comme le secteur sur le disque virtuel n'est toujours pas réutilisé par le système d'exploitation invité, la machine virtuelle pense que c'est une utilisation du disque et donne de l'espace à partir du disque réel, ce qui entraînera une augmentation de l'image du disque virtuel.

Le titre de votre question est moins susceptible d'être résolu, car l'utilisation d'un tel outil sans inspection de l'image peut entraîner une catastrophe totale. Mais vous pouvez empêcher la croissance de l'image au-delà de 30 Go. Il existe de nombreuses façons d'atteindre l'objectif.

A. Utilisez uniquement 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, puis 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éé un instantané de données de stockage VM dans un nouveau fichier image. Si vous y restaurez, sans enregistrer ou créer de nouveaux instantanés, toutes les données modifiées sont supprimées et ainsi 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 vers le nouveau disque virtuel à l'aide d'un outil de sauvegarde. Vous pouvez utiliser un Linux vivant pour le clonage.

L'option recommandée est A

totti
la source
2

Pourquoi ne pas simplement définir la taille du disque concerné entre 30 Go et 150 Go.

Vous devrez définir la somme de toutes les partitions à 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, donc je ne répéterai pas ici encore.

Pourquoi avez-vous créé une partition mince de 150 Go si vous n'aviez pas suffisamment d'espace pour la prendre en charge à sa taille maximale? On dirait que ça demande juste des ennuis.

mdpc
la source
5
Je n'ai pas personnellement créé la VM, c'est pourquoi.
Sébastien
Comment puis-je réduire le disque lui-même? J'ai les partitions dans le disque rétrécir mais vdiskmanager.exe -k [VMDK PATH]comme suggéré dans une autre réponse ne rétrécit pas le lecteur.
Aaron Franke
Le problème qui n'est pas clairement documenté, est de savoir comment redimensionner un périphérique vmdk (après avoir redimensionné la partition bien sûr). Aussi @mdpc, je pense que votre réponse n'est pas constructive. Il y a de nombreuses occasions dont vous avez besoin pour redimensionner des données sur un vm existant , il est donc inutile de pointer du doigt que la machine virtuelle doit être créée correctement.
basos
2

Il existe un moyen détourné d'utiliser VMWare Converter pour créer une nouvelle VM et une taille de VMDK plus petite, puis convertir le VMDK d'origine en VMDK nouvellement créé et plus petit.

Rétrécir VMDK

Étapes détaillées ici .

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

hanxue
la source
Il s'agit d'une machine virtuelle VMWare Workstation et ces options de copie avancées ne sont pas proposées par Converter pour ce type de machine virtuelle. Cela ne me laissera tout simplement pas changer la taille du disque.
Sébastien
2

Cela fonctionne uniquement pour les VMDK clairsemés (NON pré-alloués) Une défragmentation est requise avant de rétrécir pour garantir que l'espace utilisé est contigu

Défragmentation dans Windows

Dans 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étrécissement du disque virtuel

Pour réduire le disque virtuel:

Ouvrez le panneau de configuration / boîte à outils 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 exécutez cette commande:

vmware-toolbox

Remarque: Dans Workstation 9.x (Windows) et versions ultérieures, la réduction est automatiquement effectuée lors du nettoyage du disque. Par conséquent, cette option est supprimée du panneau VMware Tools. Accédez à VM> Gérer> Nettoyer les disques. Ce n'est pas disponible dans la version Linux de VMware Workstation 9.x et versions ultérieures.

Cliquez sur l'onglet Rétrécir. Sélectionnez le lecteur que vous souhaitez réduire. Cliquez sur Préparer pour rétrécir, puis suivez les instructions à l'écran. Attention: N'arrêtez pas votre machine virtuelle ou la machine hôte pendant que le disque rétrécit. N'essayez pas non plus d'annuler le processus. Interrompre ce processus peut causer des dommages irréparables à votre disque virtuel et vous ne pourrez peut-être pas redémarrer votre machine virtuelle.

Depuis la base de connaissances VMWare

Jalal Mostafa
la source
La lecture des réponses existantes évite d'abord les réponses en double.
harrymc
1
Désolé, de toute façon je l'ai republié avec la procédure complète et la source. Cela pourrait l'aider davantage
Jalal Mostafa
Ne répond pas non plus à l'op. OP veut réduire la limite maximale, pas la taille actuelle.
Ryuu
2

La réponse de @harrym est assez bonne, mais elle ne répond pas à la question. L'OP veut réduire la taille maximale . Le problème est que l'hyperviseur ne sait pas quelle partie de la taille présentée (aka 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 le pré-alloué.

Les étapes pour réduire le disque sont donc:

  1. Redimensionnez la partition sur le disque via le système d'exploitation ou via un CD live approprié
  2. Redimensionnez le périphérique vmdk, en choisissant soigneusement la limite pour ne pas couper d'espace de partition utilisable. Vous pouvez toujours laisser un peu plus d'espace dans l'image que nécessaire.

La première étape implique une procédure à partir de la machine virtuelle et varie selon le 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. D'où l'approche hacky.

Voici une solution non si rapide (en raison du grand volume de données impliqué) et sale qui a fait l'affaire. Nous aurons besoin d'un espace disponible égal à la taille maximale de l'appareil .

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

  1. Trouvez un moyen de redimensionner la partition invitée et de laisser de l'espace non alloué à la fin de l'appareil. Deux exemples:

    Depuis l'OS invité: Windows 7

    1. Vous pouvez utiliser la fonction de redimensionnement en ligne. C'est une bonne idée de d'abord défragmenter le disque depuis le système d'exploitation de la quête.
    2. Exécutez diskmgmt.msc, sélectionnez la partition (volume) sur le disque que vous souhaitez redimensionner, faites un clic droit-> 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 fortement fragmentée), vous ne pourrez peut-être pas récupérer la plupart de votre espace libre. Possibilité de laisser de l'espace libre supplémentaire.
    3. Maintenant, nous voulons connaître les partitions qui terminent le secteur du disque (ou octet). En supposant qu'il s'agit de la seule partition sur l'appareil, nous prenons la taille du volume telle qu'elle s'affiche 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,9 Go). Ajoutez une centaine de mégaoctets pour la sécurité (+204800) (par exemple 107371237376). Pour être sûr que nous n'avons pas besoin d'ajouter quelque chose de manquant, nous pouvons utiliser l'utilitaire de ligne cmpart diskpart pour trouver le décalage de la partition depuis le début du périphérique. exécutez diskpart puis: list disk, select disk id , list part, select part id , detail. Exemple:

    DISKPART> partie détail

    Partition 1

    Décalage en octets: 1048576

    Assurez-vous d'ajouter au moins ce nombre à la taille du disque. Maintenant, nous devons convertir les octets en secteurs en divisant par 512 et en arrondissant vers le haut (plafond). Par exemple 209709448. Notez ce numéro pour l'étape 3.

    Via un cd live: SystemResqueCD

    1. Alternativement, vous pouvez utiliser un CD de resque, ( SystemResqueCD est ma proposition), télécharger l'ISO amorçable, le monter en tant que périphérique de CD-ROM virtuel sur votre machine virtuelle, démarrer à partir du CD (en appuyant sur la touche Échap sur l'écran de démarrage de VMWare, vous devrez peut-être essayer parfois comme il apparaît très brièvement). Lorsque vous atteignez le type d'invite de commandes: startx, cela vous amènera, espérons-le, à l'interface graphique.
    2. Une fois sur le bureau de systemresque, démarrez gparted (par exemple depuis un terminal). Trouvez la partition à redimensionner (celle-ci doit être démontée proprement, en cas de doute, effectuez une analyse du système d'exploitation invité). Faites le redimensionnement, en planifiant soigneusement vos besoins d'espace.
    3. Encore une fois, nous devons trouver le décalage de fin dans les secteurs (ou octets) de la partition. Ouvrez le terminal et écrivez [ périphérique ] séparé , puis les unités, imprimez. Par exemple

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

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

Notez le secteur final et ajoutez 1. Par exemple 113455104. Notez ce numéro pour l'étape 3.

  1. Comme le hack fonctionne sur des vmdks pré-alloués (type 2) à fichier unique (nous n'avons pas essayé sur plusieurs types de fichiers), nous convertissons d'abord le fichier évolutif en pré-alloué. Nous aurons temporairement besoin d'une partition avec de l'espace physique comme taille maximale de l'appareil. (par exemple 150 Go).

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

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

    disk.vmdk disk-flat.vmdk

    le premier ne faisant que KB de long, et le second contenant les données s'étend. Ouvrez le premier (disk.vmdk) lorsque la station de travail VMWare est éteinte , avec un éditeur de texte (Notepad ++ étant ma suggestion). Trouvez 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 tant que validation, multipliez par 512 et trouvez la taille en octets, puis divisez par 1073741824 (1024 ** 3) pour trouver la taille en Go. Cela devrait être la taille de l'appareil précédent.

    Remplacez maintenant ce numéro par le numéro noté de la première étape et enregistrez le fichier. AVERTISSEMENT : 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é les 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 découper réellement les extensions. Nous utiliserons la fonctionnalité de changement de nom de vmware-vdiskmanager pour recréer le vmdk avec sa taille maintenant ajustée.

    vmware-vdiskmanager.exe -n destvmdk sourcevmdk

basos
la source
0

Pour un système d'exploitation invité vmware linux, exécutez:

sudo vmware-toolbox-cmd disk shrinkonly

Tom Hale
la source