Finns det något sätt i BTRFS att ställa in komprimering permanent?

Jag har en USB-hårddisk.

Jag vill montera den med komprimering aktiverad. Jag kan göra i mitt system eller ens använda udev-regler. Problemet är att jag inte bara monterar min USB-hårddisk på min dator. Fram till nu brukade jag utlösa en terminal varje gång jag monterade den.

Sedan upptäckte jag chattr +c. Detta fungerar mycket bra men Jag vill använda LZO istället för ZLIB. Finns det något sätt för att vara mer specifik och definiera komprimeringsalgoritmen en gång för alla?

Svar

btrfs komprimerar varje fil som ändrats sedan den var monterad om du använder:

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

Om du vill se till att ALLA filer komprimeras på det här sättet har jag ett litet skript som jag skrev för att göra det …

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

Ovanstående fungerar bara i min $HOME katalog – men du kan använda den på vad som helst eller vad du vill. Det fick också -n operand till sh som det är så du kan själv se vad sh för närvarande är not gör innan du tar bort den för att be den göra.

Hur som helst, först frågar den du för filer i human-readable format (förmodligen överflödigt här eftersom vi tar bort det i nästa steg hur som helst) som är större än 1MB eller $((1024*1024)).

Det |pipes dess information till sed vilka remsor av allt före det ledande /, "quotes" filnamnet, bygger kommandot btrfs filesystem defragment -verbose -flush-to-disk -compress-lzo \filename och överlämnar en |pipe till sudo sh att utföra.

Återigen kommer det inte att göra någonting så länge som sh --no-execute är i kraft.

Jag tror att vissa mycket senaste btrfs användarutrymmeverktygsbyggningar defragmenterar hela kataloger rekursivt, men i så fall är det en ganska ny sak, så jag har var alltid tvungen att göra saker som detta.

Kommentarer

  • Det ' är ett mycket trevligt svar. Men det här är vad jag redan gjorde (detta antydde jag av " Fram till nu brukade jag utlösa en terminal varje gång jag monterade den. "). Jag ' vill veta om det finns något sätt att associera standardmonteringsflaggor med FS. Om du inte ' inte har rot fungerar inget av dessa.
  • Standardmonteringsflaggor? Du kan definitivt använda fstab. Och med btrfs kan du montera med delvolym också, så du kan associera, som du säger, en delvolym med specifika monteringsalternativ och med användaren = monteringsalternativ kan du ge det till användaren. Du kanske undrar – men hur gör jag en delvolym av de filer jag redan har? Om du skapar en tom undervolym så cp –flänka allt du vill ha i den som ska göra jobbet.
  • Defrag-jobbet ovan kan också vara ett cron-jobb …
  • compress=lzo räcker, du behöver inte ' för att komprimera komprimerade binära filer som PNG.

Svar

Från vad jag läser kan du ställa in egenskapen compression på roten till undervolymen uppnå detta [0, 1]:

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

Efter att ha tagit din Btrfs-undervolym UUID med sudo btrfs filesystem show /mnt/your-subvolume kan du sedan bekräfta att LZO-komprimeringsfunktionen för närvarande är aktiverad med:

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

Den ska returnera 1 om den är aktiverad.

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

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

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *