Ctrl+Alt+Infra
← Tous les tutos
Tuto · Dépannage

Datastore plein : remettre les VM en route sans casse

Des VM figées avec « There is no more space for virtual disk » : la marche à suivre pour libérer de la place en urgence, dans le bon ordre, puis éviter que ça recommence.

Niveau : débutantLecture : 10 min

1.Le symptôme

Plusieurs VM se figent en même temps. Dans vCenter, elles affichent une question en attente : « There is no more space for virtual disk … You might be able to continue this session by freeing disk space on the relevant volume, and clicking Retry ». Le datastore est à 100 %.

Sous 100 %, tout fonctionne. À 100 %, toutes les VM qui ont besoin d'écrire s'arrêtent : disques en provisionnement fin qui ne peuvent plus grossir, snapshots qui ne peuvent plus s'étendre, VM qui ne peuvent plus démarrer faute de place pour leur fichier d'échange.

Ce qu'il ne faut pas faireSupprimer des fichiers au hasard dans le navigateur de datastore, surtout des fichiers -delta.vmdk ou -sesparse.vmdk : ce sont les données récentes des VM. Redémarrer l'ESXi ne libère pas d'espace non plus.

2.Qui mange la place ?

Datastore DS-PROD-01 · 2 To · 100 % Disques des VM (.vmdk) Snapshots oubliés-000001.vmdk Fichiersd'échange .vswp ISO,logs… Snapshots : le coupable n°1. Un snapshot oublié reçoit toutes les écritures et grossit sans limite. Fichiers .vswp : chaque VM allumée réserve un fichier égal à sa RAM (moins la réservation mémoire). Divers : ISO, bundles de logs, VM supprimées de l'inventaire mais pas du disque. Provisionnement fin : la somme des disques « thin » dépasse souvent la taille du datastore.
Les quatre consommateurs à vérifier, dans l'ordre où ils posent le plus souvent problème.
# Remplissage des datastores
Get-Datastore | Select-Object Name,
    @{ n = 'TailleGo'; e = { [math]::Round($_.CapacityGB) } },
    @{ n = 'LibreGo';  e = { [math]::Round($_.FreeSpaceGB, 1) } },
    @{ n = 'Libre%';   e = { [math]::Round($_.FreeSpaceGB / $_.CapacityGB * 100, 1) } } |
    Sort-Object 'Libre%'

# Snapshots présents sur le datastore plein
Get-Datastore "DS-PROD-01" | Get-VM | Get-Snapshot |
    Select-Object VM, Name, Created, @{ n = 'TailleGo'; e = { [math]::Round($_.SizeGB, 1) } } |
    Sort-Object TailleGo -Descending

3.Libérer de la place en urgence

Le but immédiat : récupérer quelques dizaines de Go pour que les VM repartent. On cherche les gains rapides et sans risque, dans cet ordre.

  1. Supprime ce qui n'est pas une VM : ISO, bundles de logs, anciens exports. Vérifie qu'aucune VM n'a l'ISO montée.
  2. Éteins une VM non critique (test, dev) : son fichier .vswp, aussi gros que sa RAM, est supprimé à l'arrêt.
  3. Déplace une petite VM éteinte vers un autre datastore (migration à froid). La migration à chaud (Storage vMotion) demande elle-même de l'espace libre et risque d'échouer.
  4. Agrandis le datastore si la baie a de la place : agrandis le LUN côté baie, puis dans vCenter, datastore → Configure → General → Increase. Vérifie aussi que le pool de la baie n'est pas lui-même plein, si le LUN est en provisionnement fin.
  5. Réponds « Retry » à la question en attente de chaque VM figée (onglet Summary de la VM). Elles reprennent là où elles s'étaient arrêtées.
Pas de consolidation tout de suiteSupprimer un gros snapshot est tentant, mais la consolidation a besoin d'espace de travail et échouera sur un datastore plein. Libère d'abord assez de place : pour un datastore vSAN, Broadcom recommande au moins 1,5 fois la taille totale des snapshots. Lance ensuite la consolidation, hors production si possible.

4.Une fois la crise passée

5.Pour ne plus jamais y retourner

# Surallocation : espace promis aux VM (thin) par rapport à la capacité
Get-Datastore | ForEach-Object {
    $prov = ($_.CapacityGB - $_.FreeSpaceGB) + ($_.ExtensionData.Summary.Uncommitted / 1GB)
    [PSCustomObject]@{ Datastore = $_.Name; Capacite = [math]::Round($_.CapacityGB)
                       Provisionne = [math]::Round($prov); Ratio = [math]::Round($prov / $_.CapacityGB, 2) }
} | Sort-Object Ratio -Descending