Czy btrfs automatycznie kompresuje istniejące pliki, gdy kompresja jest włączona?


26

Jako format mojego /systemu plików wybrałem btrfs w instalatorze Ubuntu 12.04 LTS. Po zakończeniu instalacji dodałem compress=lzoopcje montowania /etc/fstabi uruchomiłem ponownie.

Czy istniejące pliki zostaną teraz automatycznie skompresowane, czy też muszę jawnie coś zrobić, aby tak się stało?


1
Nie musisz restartować, możesz po prostu sudo mount -o remount /i nowe opcje fstab zaczną obowiązywać.
— sep332

Uwaga: może być konieczne użycie opcji kompresji lub niektóre pliki nadal pozostaną nieskompresowane bez względu na to, co robisz ...
— rogerdpack

Uwaga dotycząca siły ściskającej. Normalny kompres ma tę cechę, że jeśli wykryje, że kompresja nie przynosi żadnych korzyści, nie zawraca sobie głowy kontynuowaniem kompresji dla tego konkretnego pliku (oszczędzając w ten sposób zmarnowany procesor). Używając siły kompresji, i tak próbuje bezużytecznej kompresji. Dobre przykłady, w których ma to zastosowanie, dotyczą plików już skompresowanych (multimedia, pliki zip itp.). Innymi słowy, siła ściskająca jest ogólnie złym pomysłem. ;)
— zaTricky

Odpowiedzi:


27

Będziesz musiał uruchomić, btrfs fi defragmentaby wymusić rekompresję istniejących danych. W przeciwnym razie tylko nowe dane zostaną skompresowane.

Z FAQ :

... rozważ ponowne podłączenie -o compressi przepisanie określonych plików w miejscu lub uruchomienie, btrfs fi defragmentaby wszystko ponownie skompresować. To może zająć chwilę.


btrfs fi defragment -r -clzo / path / to / fs
— David Goodwin

2
Co z autodefragopcją montowania? Czy to również powoduje, że kompresuje on wcześniej nieskompresowane pliki podczas automatycznej defragmentacji?
— Geremia,

1
Upewnij się, że używasz „-r” flagi rekurencyjnej do kompresji w katalogach.
— Salami,

10

Zrobiłem to, co powiedział Norbert Fabritius, ale nie zauważyłem żadnej kompresji w istniejących plikach - df -h / before btrfs fi defragment = 658MB | df -h / po defragmentacji btrfs fi = 658 MB. Nowe pliki są w porządku. Szukając trochę, przynieś mi ten cytat:

Uruchamianie tego:

# btrfs filesystem defragment ~/stuff

nie defragmentuje zawartości katalogu.

To jest z założenia. btrfs fi defrag działa na pojedynczym obiekcie systemu plików przekazywanym do> it. Oznacza to, że polecenie defragmentuje tylko metadane przechowywane przez katalog> obiekt, a nie zawartość katalogu. Jeśli chcesz zdefragmentować zawartość> katalogu, coś takiego byłoby bardziej przydatne:

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

Po tym mój / on zajmuje 656 MB - nic wielkiego, ale na pewno jest kompresja.

Źródło: https://btrfs.wiki.kernel.org/index.php/Problem_FAQ#Defragmenting_a_directory_doesn.27t_work

Mam nadzieję, że to pomoże.

Przepraszam za mój angielski.


1
1. Korzystając z btrfs, nie używaj ani nie ufaj df . 2. Aby uzyskać lepszy współczynnik kompresji, użyj zlib (jednak jest wolniejszy)
— ignis

3
Czy twoja linia poleceń nie powinna zawierać, defrag -clzoczy defrag -czlibzamiast tego defrag, jeśli chcesz kompresować?
— jbo5112,

5
Istnieje flaga rekurencyjna „-r”, więc możesz to zrobić teraz:btrfs fi defrag -r -czlib ~/stuff
— Salami

8

Zgodnie z dokumentacją Oracle można kompresować istniejące pliki w istniejącym systemie plików online, defragmentując każdy plik w nim za pomocą opcji -c, -clzo lub -czlib. LZO jest zalecane ze względu na prędkość.

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

Używa polecenia find do uruchomienia defragmentatora btrfs na każdym pliku w głównym systemie plików (podanym ukośnikiem zaraz po poleceniu „find” na początku). Jeśli masz inne podwoluminy, możesz użyć go ponownie ze ścieżką podwolumny (na przykład mam w / home) zamiast pojedynczego ukośnika.

Będziesz do tego potrzebować uprawnień roota, więc jeśli chcesz, dodaj sudo z przodu.

Widzieć:


3

Według https://btrfs.wiki.kernel.org/index.php/Mount_options#List_of_options dostępne są następujące algorytmy kompresji:


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. 

Uwaga: ten post jest odpowiedzią na dodatkowe pytanie, jakie typy algorytmów kompresji są dostępne, które zostały zadane poniżej ... więc nie obwiniaj mnie.


2

Według ArchWiki :

Wskazówka: Kompresję można również włączyć dla każdego pliku bez korzystania z compressopcji montowania; po prostu zastosuj chattr +cdo pliku. Po zastosowaniu do katalogów spowoduje, że nowe pliki będą automatycznie kompresowane w miarę ich dostarczania.

Bardzo dobrze! Niech Bóg błogosławi BTRFS!

Ponadto z wiki BTRFS :

Czy mogę wymusić kompresję pliku bez korzystania z opcji kompresji ?

Tak. Narzędzie chattrobsługuje ustawienie atrybutu pliku c, który oznacza i-węzeł w celu kompresji nowo zapisanych danych.


-9

Kompresja jest domyślnie włączona w Btrfs, więc jeśli nie zostanie ona wyraźnie wyłączona, należy ją skompresować.


11
Nieprawda, musisz przekazać compression=„swój ulubiony algorytm kompresji” w fstab, aby go włączyć.
— turbo

@turbo Jakie algorytmy kompresji są dostępne?
— ζ--

wygląda na to, że obecnie są dozwolone 2 kompresje (cóż, 3 jeśli policzysz
— rogerdpack
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.