Réduire la taille d’un disque virtuel Windows au format VDI (VirtualBox)

De nos jours, nous avons beau avoir accès à du stockage de données à foison, pour autant, je n’aime pas l’espace disque gaspillé pour rien (peut-être une conséquence du fait que mon 1er PC avec Windows 98 SE n’avait qu’un disque de 4 Go…).

Le contexte : j’utilise VirtualBox pour mes machines virtuelles (VM) depuis des années (après un passage il y a 15 ans par Virtual PC de Microsoft ainsi que VMware Workstation Player). J’y teste à l’occasion divers systèmes d’exploitation : Microsoft Windows, CentOS, Fedora, Ubuntu, …

Avec Windows 10 et ses mises à jour semestrielles, l’espace disque du fichier .vdi (VirtualBox Disk Image) avait pris de l’embonpoint alors que dans le système, sur le disque C: , le disque n’était pas pour autant à saturation. Je ne vais pas rentrer dans les détails de comment la mise à jour fonctionne mais, en gros, lorsque cette dernière s’exécute, Windows crée une « sauvegarde » pour pouvoir revenir en arrière en cas de pépin. Même avec un bon nettoyage de disque avec l’utilitaire intégré en allant dans les options « Nettoyer les fichiers système », même si le disque C: avait repris des couleurs, ce n’était pas le cas du fichier .vdi.

Voici la solution : il suffit de télécharger et exécuter dans la VM Windows l’utilitaire SDelete de Sysinternals (https://docs.microsoft.com/en-us/sysinternals/downloads/sdelete). A-t-on encore besoin de présenter ces derniers ? Si oui, rendez-vous par ici : https://en.wikipedia.org/wiki/Sysinternals. Via l’invite de commandes, on exécute :

sdelete -z c:

-z correspond à zero free space (good for virtual disk optimization)

Ensuite, il suffit d’exécuter la commande vboxmanage sur le système hôte de la manière suivante :

vboxmanage modifymedium --compact nom_du_fichier.vdi

Simple et efficace. Cette procédure permet de récupérer facilement quelques Go de stockage.

A l’origine, lorsque j’avais été confronté la toute première fois à cette « problématique », j’avais créé une p’tite note/un aide-mémoire dans Evernote avec les infos trouvées sur superuser.com (comme souvent – si ce n’est pas là, ça sera sur Stack Overflow de toute façon). C’était aux alentours d’octobre 2019, la date de la note Evernote faisant foi (je sais, Evernote c’est le mal, j’y ai déjà fait un énorme ménage, j’utilise en fonction des besoins soit Carnet dans Nextcloud soit tout simplement Notes dans ce dernier également). Quelques semaines après, la procédure a été publiée sur le blog de Seboss666 : https://blog.seboss666.info/2019/11/reduire-la-taille-dun-disque-vdi/ J’avais donc laissé ça de côté jusqu’à récemment suite à la mise à jour de 2 VM Windows 10 en 21H1.

Réduire la taille de la table mdl_logstore_standard_log de la DB Moodle

Hello,

Au printemps 2020, suite à l’apparition du fameux et désormais bien connu virus SARS-CoV-2 responsable de la Covid-19 et face aux bouleversements en terme d’organisation un peu partout, j’ai installé rapidement (à l’arrache pourrait-on presque dire) et temporairement le LMS Moodle sur un VPS hébergé chez OVH.

N’ayant pas spécialement beaucoup de temps à disposition, l’installation a été réalisée le plus simplement possible (création de la DB, récupération de l’archive sur le site officiel de Moodle, création du Virtual Host Apache HTTPD et génération des certificats TLS avec Let’s Encrypt). L’objectif était de rapidement disposer d’une plateforme fonctionnelle où y déposer les ressources pédagogiques pour les formations en cours de cette année scolaire.

Comme je le précisais, je n’avais pas le temps de potasser dans les moindres détails les bonnes pratiques d’une installation de Moodle en bonne et due forme, et encore moins concernant son administration ainsi que sa maintenance.

La plateforme a rapidement fait le job et c’était le principal.

Je m’apprête à décommissionner prochainement ce Moodle après ses bons et loyaux services rendus aux personnes concernées.

Récemment toutefois, sur le VPS qui l’héberge, j’ai constaté à plusieurs reprises que l’espace de stockage arrivait à saturation à cause d’une table de la DB de Moodle. J’ai un script « custom » qui sauvegarde toutes les nuits les DB, les fichiers de configuration, les contenus des dossiers Apache (j’en parlerai peut-être un de ces quatre ici…) avec une rétention locale pendant une petite poignée de jours (pour rapidement revenir en arrière d’un, deux ou trois jours) et un export chez Swiss Backup d’Infomaniak car on n’est jamais trop prudent.

Après analyse rapide de l’espace disque utilisé (avec ncdu), je constate que la table mdl_logstore_standard_log est tout simplement énorme ! Plus d’1 Go ! Une recherche rapide sur le Net et je comprends que c’est à cause du réglage par défaut de conservation des logs (pour faire simple, tout est conservé dans les logs depuis le début).

Pour changer ça : on se connecte à Moodle en tant qu’administrateur, on suit le chemin Administration du site > Plugins > Journaux > Journaux standards et il suffit de changer la valeur de « Conserver les journaux durant » (il n’est pas recommandé de choisir une valeur inférieure à 30 jours de rétention). Dans mon cas, j’ai donc choisi 35 jours.

Normalement, à ce que j’ai vu, un cron est censé faire le job après et supprimer les anciens logs devenus obsolètes.

Toutefois, pour « corriger » le souci manuellement, voici ce qu’il faut faire : on se connecte à son gestionnaire de base de données, on choisit la DB liée à Moodle puis on exécute les commandes suivantes (en ayant au préalable réalisé une sauvegarde de la DB bien entendu) :

DELETE FROM mdl_logstore_standard_log WHERE timecreated < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 30 DAY));

OPTIMIZE TABLE mdl_logstore_standard_log;

La 1ère ligne va supprimer les entrées supérieures à 30 jours de rétention et la seconde va optimiser l’espace utilisé en « récupérant » l’espace libre ainsi créé.

Le résultat est sans appel. Dans mon cas, la table fait désormais moins de 125 Mo.

Bonne année 2021 ! 🍾😷

Bon, vu qu’il reste encore quelques jours avant de clôturer le mois de janvier, en toute logique, il est encore temps de vous souhaiter une belle et heureuse année 2021 masquée !

Pas de fausse promesse pour cette nouvelle année :
je ne promets pas du tout, mais pas du tout, de mettre en ligne sur ce magnifique blog (sans doute le meilleur du monde des Zinternets) de superbes articles intéressants. J’ai de nombreuses idées mais sans doute pas assez de motivation et/ou de temps pour faire ça à un rythme régulier.

Bref, l’avenir nous dira de quoi il en sera (ou pas) !

Ciao ! 😁