Btrfs compressera-t-il automatiquement les fichiers existants lorsque la compression est activée?

26

J'ai choisi btrfs comme format de mon /système de fichiers dans le programme d'installation Ubuntu 12.04 LTS. Une fois l'installation terminée, j'ai ajouté compress=lzoaux options de montage dans /etc/fstabet redémarré.

Les fichiers existants seront-ils automatiquement compressés maintenant, ou dois-je explicitement faire quelque chose pour que cela se produise?

ændrük
la source
1
Vous n'avez pas besoin de redémarrer, vous pouvez simplement sudo mount -o remount /et les nouvelles options fstab prendront effet.
sep332
NB que vous devrez peut-être utiliser l'option compress-force ou certains fichiers resteront non compressés, peu importe ce que vous faites ...
rogerdpack
Une note concernant la force de compression. La compression normale a une fonctionnalité en ce sens que si elle détecte que la compression a peu ou pas d'avantages, cela ne dérange pas de poursuivre la compression pour ce fichier particulier (économisant ainsi le processeur gaspillé). En utilisant compress-force, il tente de toute façon une compression inutile. De bons exemples où cela s'applique sont pour les fichiers qui sont déjà compressés (multimédia, fichiers zip, etc.). En d'autres termes, la force de compression est généralement une mauvaise idée. ;)
zaTricky

Réponses:

27

Vous devrez exécuter btrfs fi defragmentpour forcer la recompression des données existantes. Sinon, seules les nouvelles données seront compressées.

De la FAQ :

... pensez à remonter avec -o compress, et soit à réécrire certains fichiers sur place, soit à exécuter btrfs fi defragmentpour tout recompresser. Cela peut prendre un peu de temps.

Norbert Fabritius
la source
défragmentation btrfs fi -r -clzo / path / to / fs
David Goodwin
2
Qu'en est-il de l' autodefragoption de montage? Cela permet-il également de compresser des fichiers non compressés lors de la défragmentation automatique?
Geremia
1
Assurez-vous d'utiliser "-r" l'indicateur récursif pour la compression dans les répertoires.
Salami du
10

J'ai fait ce que Norbert Fabritius a dit, mais je n'ai remarqué aucune compression dans les fichiers existants - df -h / avant la défragmentation de btrfs fi = 658MB | df -h / après défragmentation btrfs fi = 658 Mo. Les nouveaux fichiers sont ok. En cherchant un peu, apportez-moi cette citation:

Exécuter ceci:

# btrfs filesystem defragment ~/stuff

ne défragmente pas le contenu du répertoire.

C'est par conception. la défragmentation de btrfs fi opère sur le seul objet du système de fichiers qui lui est passé. Cela signifie que la commande défragmente uniquement les métadonnées détenues par le répertoire> objet, et non le contenu du répertoire. Si vous voulez défragmenter le contenu> du répertoire, quelque chose comme ceci serait plus utile:

# find -xdev -type f -exec btrfs fi defrag '{}' \;

Après cela, mon / il est en train d'occuper 656 Mo - rien d'énorme, mais il y a certainement une compression.

Source: https://btrfs.wiki.kernel.org/index.php/Problem_FAQ#Defragmenting_a_directory_doesn.27t_work

J'espère que cette aide.

Désolé pour mon anglais.

J. Neto
la source
1
1. Lorsque vous utilisez btrfs, n'utilisez pas ou ne faites pas confiance à df . 2. Pour un meilleur taux de compression, utilisez zlib (cependant, c'est plus lent)
ignis
3
Votre ligne de commande ne devrait-elle pas inclure defrag -clzoou defrag -czlibau lieu de simplement defrag, si vous voulez réellement compresser les choses?
jbo5112
5
Il y a un indicateur récursif "-r", vous pouvez donc le faire maintenant:btrfs fi defrag -r -czlib ~/stuff
Salami
8

Selon la documentation d'Oracle, vous pouvez compresser des fichiers existants sur un système de fichiers en ligne existant en défragmentant chaque fichier qu'il contient avec les options -c, -clzo ou -czlib. LZO est recommandé pour la vitesse.

find / -xdev \( -type f -o -type d \) -exec btrfs filesystem defragment -v -clzo -- {} +

Cela utilise la commande find pour exécuter le défragmenteur btrfs sur chaque fichier du système de fichiers racine (donné par la barre oblique juste après la commande "find" au début). Si vous avez d'autres sous-volumes, vous pouvez l'utiliser à nouveau avec le chemin d'un sous-volume (j'en ai un chez / home, par exemple) au lieu de la barre oblique unique.

Vous aurez besoin des privilèges root pour cela, alors ajoutez sudo à l'avant si vous en avez besoin.

Voir:

Geoff
la source
3

Selon https://btrfs.wiki.kernel.org/index.php/Mount_options#List_of_options, les algorithmes de compression suivants sont disponibles:


compress,compress-force
Enable compression. Starting with kernel 2.6.38 you can choose the algorithm for compression:

 - compress=zlib - Better compression ratio. It's the default and safe for olders kernels.
 - compress=lzo - Faster compression.
 - compress=no - Disables compression (starting with kernel 3.6). 

compress-force= - Enable compression even for files that don't compress well, like videos and dd images of disks. The options compress-force=zlib and compress-force=lzo works for kernels >2.6.38.

Note that old (before 2012) btrfs-progs versions will probably fail some operations (e.g. fsck) on filesystems with LZO compression. 

Remarque: Ce message est une réponse à la question supplémentaire sur le type d'algorithmes de compression disponibles, qui a été posée ci-dessous ... alors ne me blâmez pas.

Rostislav Stribrny
la source
2

Selon ArchWiki :

Conseil: la compression peut également être activée par fichier sans utiliser l' compressoption de montage; appliquer simplement chattr +cau dossier. Lorsqu'il est appliqué aux répertoires, il entraîne la compression automatique des nouveaux fichiers à mesure qu'ils arrivent.

Très agréable! Que Dieu bénisse BTRFS!

Aussi, à partir du wiki BTRFS :

Puis-je forcer la compression sur un fichier sans utiliser l' option de montage de compression ?

Oui. L'utilitaire chattrprend en charge la définition de l'attribut de fichier c qui marque l'inode pour compresser les données nouvellement écrites.

Geremia
la source
-9

La compression est activée par défaut dans Btrfs, donc à moins que vous ne l'ayez explicitement désactivé, elle doit être compressée.

Diego
la source
11
Ce n'est pas vrai, vous devez passer compression="votre algorithme de compression préféré" dans fstab pour l'activer.
turbo
@turbo Quels sont les algorithmes de compression disponibles?
Rétablir Monica - ζ--
semble qu'il y ait actuellement 2 compressions autorisées (enfin, 3 si vous comptez "aucune"): btrfs.wiki.kernel.org/index.php/…
rogerdpack