Comment effacer l'espace inutilisé avec des zéros? (ext3, ext4)
Je cherche quelque chose de plus intelligent que
cat /dev/zero > /mnt/X/big_zero ; sync; rm /mnt/X/big_zero
Comme FSArchiver recherche "l'espace utilisé" et ignore le site inutilisé mais opposé.
Objectif: je voudrais compresser les images de partition, il est donc fortement recommandé de remplir l'espace inutilisé avec des zéros.
Btw. Pour btrfs: Effacer l'espace inutilisé avec des zéros (btrfs)
Un tel utilitaire est zerofree
.
De sa description:
Zerofree trouve les blocs non alloués et non mis à zéro dans un système de fichiers ext2 ou ext3 et les remplit de zéros. Ceci est utile si le périphérique sur lequel réside ce système de fichiers est une image disque. Dans ce cas, selon le type d'image disque, un utilitaire secondaire peut être en mesure de réduire la taille de l'image disque après l'exécution de zerofree. Zerofree nécessite que le système de fichiers soit démonté ou monté en lecture seule.
La manière habituelle d'obtenir le même résultat (en mettant à zéro les blocs inutilisés) consiste à exécuter "dd", à créer un fichier plein de zéros qui occupe tout l'espace libre sur le lecteur, puis à supprimer ce fichier. Cela présente de nombreux inconvénients, ce qui élimine zéro:
- c'est lent
- il fait grandir (temporairement) l'image disque à son maximum
- il utilise (temporairement) tout l'espace libre sur le disque, de sorte que d'autres actions d'écriture simultanées peuvent échouer.
Zerofree a été écrit pour être exécuté à partir de systèmes GNU/Linux installés en tant qu'OS invités dans une machine virtuelle. Si ce n'est pas votre cas, vous n'avez certainement pas besoin de ce package.
La description du package .deb contient maintenant le paragraphe suivant, ce qui impliquerait que cela fonctionnera bien avec ext4 aussi.
Description: zéro bloc libre des systèmes de fichiers ext2, ext3 et ext4 Zerofree trouve les blocs non alloués avec un contenu de valeur non nulle dans un système de fichiers ext2, ext3 ou ext4 et les remplit de zéros ...
Une autre application de cet utilitaire consiste à compresser des images de disque qui sont une sauvegarde d'un disque réel. Un exemple typique de ceci est le vidage de la carte SD dans un BeagleBone ou un Raspberry Pi. Une fois les espaces vides mis à zéro, les images de sauvegarde peuvent être compressées plus efficacement.
Résumé des méthodes (comme mentionné dans cette question et ailleurs) pour effacer l'espace inutilisé sur ext2/ext3/ext4:
e2fsck -E discard src_fs
pour supprimer l'espace inutilisé (nécessite e2fsprogs 1.42.2 ou supérieur).zerofree src_fs
) pour écrire explicitement des zéros sur les blocs inutilisés.e2image -rap src_fs dest_fs
pour copier uniquement les blocs en cours d'utilisation (le nouveau système de fichiers doit se trouver sur un "disque" autrement mis à zéro, nécessite e2fsprogs 1.42.9 ou supérieur).fstrim /mnt/fs/
pour demander au système de fichiers de supprimer l'espace inutilisé.cat /dev/zero > /mnt/fs/zeros; sync; rm /mnt/fs/zeros
(sfill
de secure-delete utilise cette technique). Cette méthode est inefficace, non recommandée par Ted Ts'o (auteur de ext4), peut ne pas mettre à zéro certaines choses et peut ralentir les futurs fsck
s.Le démontage du système de fichiers donnera de meilleurs résultats que son montage. La suppression a tendance à être la méthode la plus rapide quand beaucoup d'espace précédemment utilisé doit être mis à zéro, mais l'utilisation de zerofree
après le processus de suppression peut parfois mettre à zéro un peu plus (selon la façon dont la suppression est implémentée sur le "disque") .
Vous devrez utiliser un outil d'image disque approprié (tel que qemu-img convert src_image dst_image
) pour permettre la récupération de l'espace mis à zéro et pour réduire la taille du fichier représentant l'image.
L'une des techniques suivantes peut être utilisée pour rendre le fichier clairsemé (donc les cycles de zéro arrêtent de prendre de la place):
cp --sparse=always src_image dst_image
.fallocate -d src_image
(nécessite util-linux v2.25 ou supérieur).De nos jours, il pourrait être plus facile d'utiliser un outil comme virt-sparsify pour effectuer ces étapes et plus en une seule fois.
zerofree
sfill
from secure-delete peut faire cela et plusieurs autres tâches connexes.
par exemple.
sfill -l -l -z /mnt/X
Il existe une arborescence source qui semble être utilisée par le projet ArchLinux sur github qui contient la source de sfill
qui est un outil inclus dans le package Secure-Delete.
Une copie de la page de manuel de sfill
est également disponible ici:
Si vous avez e2fsprogs 1.42.9, vous pouvez utiliser e2image
pour créer l'image de partition sans l'espace libre en premier lieu, vous pouvez donc ignorer l'étape de mise à zéro.
si vous ne souhaitez pas recourir à des outils supplémentaires, cette méthode devrait être plus rapide que cat /dev/zero > /mnt/fs/zeros
:
dd if=/dev/zero of="/mnt/fs/filler" bs=10485760
dd if=/dev/zero of="/mnt/fs/filler1" bs=1
rm /mnt/fs/filler
rm /mnt/fs/filler1
Vous pouvez utiliser sfill
. C'est une meilleure solution pour les volumes minces.