web-dev-qa-db-fra.com

Effacez l'espace inutilisé avec des zéros (ext3, ext4)

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)

76

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.

MISE À JOUR # 1

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 ...

Autres utilisations

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.

82
enzotib

Résumé des méthodes (comme mentionné dans cette question et ailleurs) pour effacer l'espace inutilisé sur ext2/ext3/ext4:

Remise à zéro de l'espace inutilisé

Le système de fichiers n'est pas monté

  • Si le "disque" de votre système de fichiers est alloué de manière dynamique (par exemple, un SSD moderne prenant en charge TRIM, un fichier VM dont le format prend en charge la rareté, etc.) et votre noyau dit que le périphérique de bloc le comprend, vous peut utiliser e2fsck -E discard src_fs pour supprimer l'espace inutilisé (nécessite e2fsprogs 1.42.2 ou supérieur).
  • Utilisation de zerofree (par exemple zerofree src_fs) pour écrire explicitement des zéros sur les blocs inutilisés.
  • En utilisant 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).

Le système de fichiers est monté

  • Si le "disque" sur lequel se trouve votre système de fichiers est alloué de manière mince (par exemple, un SSD moderne prenant en charge TRIM, un fichier VM dont le format prend en charge la rareté, etc.), votre noyau dit que le périphérique de bloc le comprend et enfin le pilote du système de fichiers ext le prend en charge, vous pouvez utiliser fstrim /mnt/fs/ pour demander au système de fichiers de supprimer l'espace inutilisé.
  • En utilisant 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 fscks.

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") .

Rendre le fichier image plus petit

L'image est dans un format dédié VM

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'image est un fichier brut

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.

Sources

33
Anon

sfill from secure-delete peut faire cela et plusieurs autres tâches connexes.

par exemple.

sfill -l -l -z /mnt/X

MISE À JOUR # 1

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:

15
cas

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.

8
psusi

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
0
eadmaster

Vous pouvez utiliser sfill . C'est une meilleure solution pour les volumes minces.

0
user64219