All links of one day
in a single page.
<Previous day - Next day>

rss_feedDaily RSS Feed
floral_left The Daily Shaarli floral_right
——————————— Sunday 27, August 2017 ———————————

Récupérer l'espace disque non utilisé dans un fichier qcow2 avec un système virtualisé winwin

Au boulot, nous avons une machine virtuelle KVM avec winwin 10 comme système invité. Le disque dur de cette machine virtuelle se matérialise sur le stockage de l'hyperviseur par un fichier qcow2.

Par défaut, le format qcow2 produit des sparse files : le fichier image n'aura pas la taille du disque dur entier (exemple : 50G) mais celle de la quantité maximale de données réellement écrite par le système invité (33G, par exemple).

Winwin 10 et les mises à jour occupent 33G. On peut utiliser le nettoyage de disque pour virer les sauvegardes qui sont réalisées automatiquement avant les mises à jour. Cela permet de récupérer 18G. Pourtant, sur l'hyperviseur, la taille réelle du qcow, obtenue avec ls -s, est toujours de 33G (d'où mon « maximale » dans le paragraphe précédent ;) ). Comment récupérer ces 18G dans le fichier image ?

Le système invité doit être éteint, puis :

$ sudo apt-get install qemu-utils kpartx ntfs-3g

$ sudo modprobe nbd max_part=8
$ sudo qemu-nbd -c /dev/nbd0 winwin.qcow2

$ sudo kpartx -av /dev/nbd0
add map nbd0p1 (254:6): 0 1024000 linear 43:0 2048
add map nbd0p2 (254:7): 0 102082870 linear 43:0 1026048
add map nbd0p3 (254:8): 0 1742848 linear 43:0 103110656

$ sudo ntfswipe -av /dev/mapper/nbd0p2
[…]
37700389936 bytes were wiped (excluding undelete data)

$ sudo kpartx -dv /dev/nbd0

$ sudo qemu-nbd --disconnect /dev/nbd0
$ sudo modprobe -r nbd

$ sudo fallocate -d winwin.qcow2

Attention : ntfswipe va consommer l'intégralité de l'espace disque de la partition winwin. Sur l'hyperviseur, assure-toi d'avoir suffisamment d'espace pour que le qcow puisse grossir jusqu'à sa taille maximale configurée sinon ntfswipe affichera Failed to sync device /dev/mapper/nbd0p2: Erreur d'entrée/sortie.

Comment sais-je qu'il faut travailler sur la deuxième partition ? J'ai pu monter chaque partition et regarder son contenu avec mount /dev/mapper/nbd0p<X> /mnt + ls lh /mnt, tout simplement.

Après cela, le fichier qcow2 occupe réellement 15G sur le stockage de l'hyperviseur. \o/

Notes en vrac :

  • La commande cp est suffisamment intelligente pour copier toute seule un fichier contenant des zones vides (sparse file) (sinon, il faut ajouter --sparse=always), mais ce n'est pas le cas de caja, le gestionnaire de fichiers de MATE, qui copie donc la taille maximale configurée… ;

  • Avec un GNU/Linux comme invité (et un système de fichiers ext), on aurait fait tout pareil, mais en utilisant zerofree -v /dev/mapper/nbd0p<X> au lieu de ntfswipe.
-