Is er een manier in BTRFS om compressie permanent in te stellen?

Ik heb een USB HDD.

Ik wil het mounten met compressie ingeschakeld. Ik kan doen in de fstab van mijn systeem of zelfs met udev-regels. Het probleem is dat ik mijn USB-harde schijf niet alleen op mijn computer monteer. Tot nu toe activeerde ik een terminal elke keer dat ik hem koppelde.

Toen ontdekte ik chattr +c. Dit werkt heel goed maar Ik wil LZO gebruiken in plaats van ZLIB. Is er een manier om specifieker te zijn en het compressie-algoritme voor eens en voor altijd te definiëren?

Antwoord

btrfs comprimeert elk bestand dat is gewijzigd sinds het is aangekoppeld als je gebruikt:

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

Als je ervoor wilt zorgen dat ALLE bestanden op deze manier worden gecomprimeerd, heb ik een klein script dat ik heb geschreven om het te doen …

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

Het bovenstaande werkt alleen op mijn $HOME directory – maar je kunt het op alles of alles gebruiken zoals je wilt. Het heeft ook de -n operand meegegeven aan sh zoals het is u kunt zelf zien wat sh momenteel not doen alvorens het te verwijderen om het te vertellen.

Hoe dan ook, het vraagt eerst du voor bestanden in human-readable formaat (waarschijnlijk overbodig omdat we dat in de volgende stap verwijderen hoe dan ook) die groter zijn dan 1MB of $((1024*1024)).

Het |pipes zijn informatie naar sed die uit alles vóór het voorloop /, "quotes" de bestandsnaam, bouwt het btrfs filesystem defragment -verbose -flush-to-disk -compress-lzo \filename commando en geeft het een |pipe aan sudo sh om uit te voeren.

Nogmaals, het zal “niets doen zolang sh --no-execute van kracht is.

Ik denk dat sommige zeer recente btrfs gebruikersruimtetool builds defragmenteren hele mappen recursief, maar als dat zo is, is het een vrij nieuw ding, dus ik moest altijd dit soort dingen doen.

Opmerkingen

  • Dat ' is een heel mooi antwoord. Dit is echter wat ik al deed (dit is wat ik suggereerde door " Tot nu toe activeerde ik een terminal elke keer dat ik hem koppelde. "). Ik ' zou graag willen weten of er een manier is om standaard montage vlaggen te associëren met de FS. Als je geen ' root hebt, werken deze niet.
  • Standaard mountvlaggen? Nou, je kunt zeker fstab gebruiken. En met btrfs kun je ook mounten op subvolume, dus je zou, zoals je zegt, een subvolume kunnen associëren met specifieke mount-opties en met de user = mount-optie zou je het aan de gebruiker kunnen geven. Je vraagt je misschien af – maar hoe maak ik een subvolume van de bestanden die ik al heb? Als je een leeg subvolume maakt, cp –reflink dan alles wat je wilt dat de job zou moeten doen.
  • Ook de defragmentatie-job hierboven zou een cron job kunnen zijn …
  • compress=lzo is voldoende, ' hoeft u gecomprimeerde binaire bestanden zoals PNG niet opnieuw te comprimeren.

Answer

Van wat ik heb gelezen, kun je de eigenschap compression in de root van het subvolume instellen op bereik dit [0, 1]:

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

Nadat je je Btrfs-subvolume UUID hebt gepakt met sudo btrfs filesystem show /mnt/your-subvolume, kun je valideer dat de LZO-compressiefunctie momenteel is ingeschakeld met:

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

Het zou 1 moeten retourneren als het is ingeschakeld.

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

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

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *