df
et ls
Signaler différentes tailles de ma machine hôte en raison de la différence entre la taille allouée et la quantité d'espace réellement utilisée dans le système de fichiers ext4. Le problème est que les deux signalent la mauvaise taille. qemu-img
N'apportez pas non plus l'espace réel utilisé à l'intérieur du système de fichiers de l'invité (également ext4).
sur l'hôte :
# qemu-img info sdb.raw
image: sdb.raw
file format: raw
virtual size: 2.0T (2173253451776 bytes)
disk size: 1.9T
# ls -larth sdb.raw
-rw-r--r-- 1 hypervisor hypervisor 2.0T Mar 6 13:47 sdb.raw
# du -sh sdb.raw
1.9T sdb.raw
# fdisk -l sdb.raw
Disk sdb.raw: 2 TiB, 2173253451776 bytes, 4244635648 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: E6242A7E-1253-E74A-9389-68654A21E4F4
Device Start End Sectors Size Type
sdb.raw1 2048 4244635614 4244633567 2T Linux filesystem
sur l'invité (/ dev/vdb1) :
# df -h
Filesystem Size Used Avail Use% Mounted on
dev 32G 0 32G 0% /dev
run 32G 496K 32G 1% /run
/dev/vda2 220G 100G 111G 48% /
tmpfs 32G 0 32G 0% /dev/shm
tmpfs 32G 0 32G 0% /sys/fs/cgroup
tmpfs 32G 26M 32G 1% /tmp
/dev/vdb1 2.0T 761G 1.2T 41% /root
tmpfs 6.3G 0 6.3G 0% /run/user/1002
Comme vous pouvez le constater, je n'utilise que 761g sur le système invité et il y a encore 1,2 t disponible. Malgré que, qemu-img
dit que j'utilise 1,9 t. Quelle est la raison? Y'a t'il un moyen d'arranger cela? J'aimerais voir l'espace utilisé actuellement sur la machine hôte. Je sais que cela peut être atteint parce que cela fonctionnait correctement avant que je remplissais sdb.raw
Avec les données - QEMU a signalé la bonne taille de disque en fonction de l'espace utilisé à l'intérieur du disque. Malheureusement, cela n'a fonctionné qu'une seule façon - lorsque l'espace utilisé augmente progressivement. Après avoir supprimé certains fichiers et réduit l'espace utilisé de 1,9 t à 761 g, la taille rapportée par qemu-img
n'a pas changé à une valeur inférieure, il restait à 1,9 t.
qemu-img
et du
_ les deux signalent l'espace alloué réel du point de vue de l'hôte. Ils ne peuvent pas savoir/comprendre si le système d'exploitation veut vraiment utiliser cet espace ou si, comme dans Votre cas, il a été libéré par l'utilisateur.
Pour informer l'hôte que votre invité a une tonne d'espace libre dont vous avez besoin pour fstrim
votre système de fichiers invités et Vous devez être sûr que votre La pile de périphériques QEMU/Guest Block passe correctement TRIM/discard
demandes. Pour ce faire, vous devez:
utilisez un pilote de périphérique de bloc QEMU avec support de garniture/défausse. Exemple de tels lecteurs sont virtio-scsi
, scsi
et sata/ahci
. Tous ces pilotes exposent des dispositifs de bloc utilisant le classique /dev/sd[abcd...]
nomenclature. D'autre part, il apparaît que votre invité utilise un pilote uni virtio
(avec /dev/vd[abcd...]
noms), qui comporte non prend en charge la garniture/rejeter. Vous pouvez vérifier si votre pilote prend en charge les rejets en émettant lsblk -D
;
activer le relatif Libvirt Domain discard=unmap
option ;
Enfin, votre hôte doit utiliser un système de fichiers avec hole_punching
Prise en charge d'EXT4 (que vous utilisez) et XFS.
Vous pouvez lire ici pour plus d'informations supplémentaires.
Si toutes les conditions préalables sont vraies, émettant fstrim <mount_point>
À l'intérieur de votre invité désaffectera automatiquement l'espace inutilisé sur l'hôte. Assurez-vous de comprendre que la taille du fichier logique/apparent restera inchangée (c'est-à-dire: elle affichera 2.0 TB jamais après fstrim
), mais en utilisant qemu-img
ou du
_ révélera la taille de fichier réelle (plus petite) allouée.
Si les conditions préalables ne sont pas remplies, vous devez décompact votre fichier image via virt-sparsify
ou qemu-img convert
Après avoir nettoyé votre espace libre avec zéros (IE: dd if=/dev/zero of=bigfile bs=1M count=<almost_all_free_space>; rm bigfile
).
Assurez-vous de comprendre ce que signifie les étapes ci-dessus: faire toute erreur peut corrompre irrémédiablement votre fichier image. et assurez-vous d'avoir une sauvegarde de savoir avant de tenter toute opération sur votre fichier image disque! *
C'est le comportement attendu. Comme vous l'avez écrit, "Après avoir supprimé certains fichiers et réduit l'espace utilisé de 1,9 t à 761g" - l'image virtuelle brute ne peut pas "collecter des ordures" automatiquement et que l'espace réel restera écrit et attribué même pour supprimer des fichiers. La solution de contournement est d'effectuer (double) conversion RAW> QCow2 (> RAW).
Plus détaillé expliqué ici - https://balau82.wordpress.com/2011/05/08/qemu-raw-images-real-size/ et ici - https: // teckpiezo .Com/Tech-Insights/Raw-VS-QCow2-Disk-IMAGES-IN-QEMU-KVM /