Existe-t-il un moyen dans BTRFS de définir la compression de manière permanente?

Jai un disque dur USB.

Je veux le monter avec la compression activée. Je peux le faire dans le fstab de mon système ou même en utilisant les règles udev. Le problème est que je ne vais pas monter mon disque dur USB uniquement sur mon ordinateur. Jusquà présent, je déclenchais un terminal à chaque fois que je le montais.

Ensuite, jai découvert chattr +c. Cela fonctionne très bien mais Je souhaite utiliser LZO au lieu de ZLIB. Existe-t-il un moyen pour être plus précis et définir lalgorithme de compression une fois pour toutes?

Réponse

btrfs compressera chaque fichier modifié depuis son montage si vous utilisez:

mount -o compress-force=lzo /dev/btrfsdev /mnt/btrfsmnt 

Si vous voulez voir à ce que TOUS les fichiers soient compressés de cette façon, jai un petit script que jai écrit pour le faire …

du -ht +$((1024*1024)) "$HOME" |\ sed -rn "s/^[^/]*(.*)/btrfs fi defrag -fvclzo "\1"/p" |\ sudo sh -n 

Ce qui précède ne fonctionne que sur mon répertoire $HOME – mais vous pouvez lutiliser sur nimporte quoi ou sur tout comme vous le souhaitez. L’opérande -n est également transmis à sh tel quel vous pouvez voir par vous-même ce que sh est actuellement not faire avant de le supprimer pour lui dire de le faire.

Quoi quil en soit, il interroge dabord du pour les fichiers au format human-readable (probablement redondant ici puisque nous le supprimons à létape suivante de toute façon) qui sont plus grands que 1MB ou $((1024*1024)).

Il |pipes ses informations à sed qui supprime tout ce qui précède la /, "quotes" nom de fichier, crée la commande btrfs filesystem defragment -verbose -flush-to-disk -compress-lzo \filename et le remet un |pipe à sudo sh pour lexécuter.

Encore une fois, il « ne fera rien tant que sh --no-execute est en vigueur.

Je pense que certains les versions très récentes de l’outil de l’espace utilisateur btrfs défragmentent des répertoires entiers de manière récursive, mais si cest le cas, c’est une chose assez nouvelle, donc je il fallait toujours faire des choses comme ça.

Commentaires

  • Cest ' une très belle réponse. Cependant, cest ce que jai déjà fait (cest ce que jai laissé entendre par " Jusquà présent, javais lhabitude de déclencher un terminal à chaque fois que je le montais. "). Je ' aimerais savoir sil existe un moyen dassocier des drapeaux de montage par défaut au FS. Si vous navez pas ' root, rien de tout cela ne fonctionne.
  • Drapeaux de montage par défaut? Eh bien, vous pouvez certainement utiliser fstab. Et avec btrfs, vous pouvez également monter par sous-volume, vous pouvez donc associer, comme vous le dites, un sous-volume avec des options de montage spécifiques et avec loption user = mount, vous pouvez le donner à lutilisateur. Vous vous demandez peut-être – mais comment créer un sous-volume à partir des fichiers que jai déjà? Si vous créez un sous-volume vide, cp – reflink tout ce que vous voulez qui devrait faire le travail.
  • De plus, le travail de défragmentation ci-dessus pourrait être un travail cron …
  • compress=lzo est suffisant, vous navez ' pas besoin de recompresser les fichiers binaires compressés comme PNG.

Réponse

Daprès ce que jai lu, vous pouvez définir la propriété compression à la racine du sous-volume sur atteindre ceci [0, 1]:

sudo btrfs property set /mnt/your-subvolume compression lzo 

Après avoir récupéré votre UUID de sous-volume Btrfs avec sudo btrfs filesystem show /mnt/your-subvolume, vous pouvez alors valider que la fonction de compression LZO est actuellement activée avec:

cat /sys/fs/btrfs/<UUID>/features/compress_lzo 

Elle devrait renvoyer 1 si elle est activée.

[0] https://btrfs.wiki.kernel.org/index.php/Compression

[1] https://www.berthon.eu/2016/setting-shared-folder-compression-on-synology-nas-btrfs/

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *