Réduire la taille d’un disque virtuel au format VDI
Après mon changement d’OS sur le PC du boulot, j’avais notamment transféré la machine virtuelle Linux que j’utilisais pour récupérer notamment l’environnement SSH, Git, et Bash de manière générale. Et en regardant l’espace utilisé sur le système hôte, j’y ai vu un gros souci : la taille du disque virtuel. J’ai donc cherché à corriger ça.
L’image approchait les 40Go :
1 2 3 4 5 6 7 8 9 |
$ ll total 75949920 drwxr-xr-x 4 seboss666 seboss666 4096 04.10.2019 09:25 ./ drwxr-xr-x 3 seboss666 seboss666 4096 04.10.2019 08:54 ../ drwxr-xr-x 2 seboss666 seboss666 4096 04.10.2019 08:54 Logs/ drwxr-xr-x 2 seboss666 seboss666 4096 05.06.2019 09:25 Snapshots/ -rw------- 1 seboss666 seboss666 8603 04.10.2019 09:25 SebLBNvm.vbox -rw------- 1 seboss666 seboss666 8603 04.10.2019 09:06 SebLBNvm.vbox-prev -rwxrwxrwx 1 seboss666 seboss666 40155217920 04.10.2019 09:06 SebLBNvm.vdi* |
Pourtant, une fois dans la VM, la consommation n’est pas si importante :
1 2 3 |
$ df -h / Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur /dev/mapper/lubuntu--vg-root 38G 7,3G 29G 21% / |
L’explication est simple, le disque virtuel a beau être alloué de manière dynamique, par le passé j’ai pratiquement rempli cet espace, et le fichier ne se réduit pas de lui-même une fois le ménage effectué. C’est un fait bien connu des administrateurs de bases de données qui doivent exécuter des tâches de maintenance pour éviter que les tables explosent.
Pour réduire la taille, mes premières recherches m’ont conduit à une procédure qui demande de passer par deux étapes de conversion, VDI->VMDK, puis VMDK->VDI. On commence par faire la première passe, de VDI à VMDK. Alors avant de vous montrer la commande, il faut passer par une commande supplémentaire, zerofree, qui permet de réécrire des zéros sur l’espace libre, parce que sinon :
1 2 3 |
$ vboxmanage clonehd --format vmdk SebLBNvm.vdi SebLBNvm.vmdk 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Clone medium created in format 'vmdk'. UUID: 17f3ff3e-d23d-4091-a68d-00e9173de795 |
Voyons le résultat :
1 2 3 4 5 6 7 8 9 10 |
$ ll total 75949920 drwxr-xr-x 4 seboss666 seboss666 4096 04.10.2019 09:25 ./ drwxr-xr-x 3 seboss666 seboss666 4096 04.10.2019 08:54 ../ drwxr-xr-x 2 seboss666 seboss666 4096 04.10.2019 08:54 Logs/ drwxr-xr-x 2 seboss666 seboss666 4096 05.06.2019 09:25 Snapshots/ -rw------- 1 seboss666 seboss666 8603 04.10.2019 09:25 SebLBNvm.vbox -rw------- 1 seboss666 seboss666 8603 04.10.2019 09:06 SebLBNvm.vbox-prev -rwxrwxrwx 1 seboss666 seboss666 40155217920 04.10.2019 09:06 SebLBNvm.vdi* -rw------- 1 seboss666 seboss666 37617532928 04.10.2019 09:25 SebLBNvm.vmdk |
Comme on le voit, le résultat n’est pas très efficace. zerofree est un utilitaire qui s’exécute en mode rescue ou via un live cd/usb, et demande paradoxalement de remonter en read-only le volume concerné.
En cherchant un peu plus à propos de zerofree et des réductions d’image disque, je suis tombé sur le Saint Graal, spécifique au format VDI, la commande vboxmanage dispose d’une option « compact » qui fait exactement le boulot sans se taper la double conversion. Un gain de temps appréciable, et un résultat intéressant :
1 2 3 4 5 6 7 8 9 |
$ vboxmanage modifymedium disk "./SebLBNvm.vdi" --compact 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% $ l total 50365484 drwxr-xr-x 2 seboss666 seboss666 4096 04.10.2019 09:53 Logs/ drwxr-xr-x 2 seboss666 seboss666 4096 05.06.2019 09:25 Snapshots/ -rw------- 1 seboss666 seboss666 8603 04.10.2019 10:29 SebLBNvm.vbox -rw------- 1 seboss666 seboss666 8603 04.10.2019 09:25 SebLBNvm.vbox-prev -rwxrwxrwx 1 seboss666 seboss666 11418992640 04.10.2019 10:59 SebLBNvm.vdi* |
Ah ben c’est mieux. Alors évidemment, pour m’assurer que c’est peinard j’ai fait un backup du fichier avant, et je ne peux que recommander de faire cette sauvegarde au préalable.
Les formats de disques virtuels, tout un monde
Je pourrais presque faire un article complet sur les principaux formats de disque virtuel, de leurs avantages et inconvénients, les implications sur la consommation, les performances, et l’aspect ouvert ou non des formats. Mais bon, déjà là vous avez une petite bidouille si vous êtes dans une chasse à l’espace disque et que vous travaillez avec des machines virtuelles. Ici, le format était celui de Virtualbox, et donc j’ai utilisé les outils fournis avec, mais vous pouvez sinon vous tourner vers l’utilitaire qemu-img que j’avais évoqué il y a cinq ans (déjà !).
Sinon tu actives SSD sur tes disques, puis le TRIM dans ton fichier de configuration, je ne crois pas que cela soit possible via le GUI. Et tu n’as plus qu’à faire un fstrim via ta VM. Même principe pour le qcow2 sous quemu.