Czy w BTRFS jest jakiś sposób, aby ustawić kompresję na stałe?

Mam dysk twardy USB.

Chcę go zamontować z włączoną kompresją. Mogę to zrobić w fstab mojego systemu lub nawet używając reguł udev. Problem polega na tym, że nie mogę zamontować dysku twardego USB tylko na moim komputerze. Do tej pory wyzwalałem terminal za każdym razem, gdy go montowałem.

Następnie odkryłem chattr +c. Działa bardzo dobrze , ale Chcę używać LZO zamiast ZLIB. Czy jest jakiś sposób aby być bardziej szczegółowym i zdefiniować algorytm kompresji raz na zawsze?

Odpowiedź

btrfs skompresuje każdy plik zmieniony od momentu zamontowania jeśli używasz:

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

Jeśli chcesz zobaczyć, że WSZYSTKIE pliki są kompresowane w ten sposób, mam mały skrypt, który napisałem, aby to zrobić …

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

Powyższe działa tylko w moim katalogu $HOME – ale możesz go używać na czymkolwiek lub wszystkim, jak chcesz. Dostał również operand -n przekazany do sh w takiej postaci możesz sam zobaczyć, czym sh jest obecnie not przed usunięciem, aby to zrobić.

W każdym razie najpierw zapyta du dla plików w formacie human-readable (prawdopodobnie zbędny tutaj, ponieważ usuwamy go w następnym kroku tak czy inaczej) które są większe niż 1MB lub $((1024*1024)).

|pipes jego informacje są sed , które z wszystkiego przed początkową nazwą pliku /, "quotes" , tworzy polecenie btrfs filesystem defragment -verbose -flush-to-disk -compress-lzo \filename i przekazuje go |pipe do sudo sh w celu wykonania.

Znowu nic nie zrobi, dopóki sh --no-execute będzie działać.

Myślę, że bardzo niedawne btrfs kompilacje narzędzi w przestrzeni użytkownika defragmentują rekursywnie całe katalogi, ale jeśli tak, jest to całkiem nowa rzecz, więc zawsze musiałem robić takie rzeczy.

Komentarze

  • To ' to bardzo dobra odpowiedź. Jednak właśnie to już zrobiłem (to właśnie zasugerowałem przez " Do tej pory wyzwalałem terminal za każdym razem, gdy go montowałem. "). Chciałbym ' wiedzieć, czy istnieje sposób na powiązanie domyślnych flag montowania z FS. Jeśli nie ' nie masz roota, żadna z nich nie działa.
  • Domyślne flagi montowania? Cóż, zdecydowanie możesz użyć fstab. W przypadku btrfs możesz również montować przez subvolume, więc możesz powiązać, jak mówisz, subvolume z określonymi opcjami montowania, a z opcją user = mount, możesz go przekazać użytkownikowi. Możesz się zastanawiać – ale jak mogę utworzyć podwolumin z plików, które już mam? Jeśli utworzysz pusty podwolumin, wykonaj cp –reflink wszystko, co chcesz w nim, co powinno wykonać zadanie.
  • Również powyższe zadanie defragmentacji może być zadaniem cron …
  • compress=lzo jest wystarczające, nie ' nie trzeba ponownie kompresować skompresowanych plików binarnych, takich jak PNG.

Odpowiedź

Z tego, co przeczytałem, możesz ustawić właściwość compression w katalogu głównym woluminu na osiągnąć ten cel [0, 1]:

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

Po pobraniu identyfikatora UUID woluminu Btrfs za pomocą sudo btrfs filesystem show /mnt/your-subvolume, możesz następnie sprawdź, czy funkcja kompresji LZO jest obecnie włączona z:

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

Powinien zwrócić 1, jeśli jest włączony.

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

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

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *