Jak włączyć kompresję ZFS

Jak włączyć kompresję ZFS
Funkcja kompresji systemu plików kompresuje pliki przechowywane w systemie plików automatycznie, aby zapisać cenne miejsce na dyskieczce urządzenia pamięci masowej.

Podobnie jak wiele innych systemów plików, system plików ZFS obsługuje również kompresję poziomu systemu.

Korzyści z kompresji systemu plików ZFS to:

i) oszczędza przestrzenie dysku: Jak wspomniałem, gdy kompresja ZFS jest włączona, pliki przechowywane w systemie ZFS puli/plików są kompresowane, aby zapisać miejsce na dysku.

ii) Skraca czas dostępu do pliku: Procesory są obecnie bardzo szybkie. Mogą dekompresować pliki w czasie rzeczywistym. Tak więc dekompresja pliku zajmuje mniej czasu niż odzyskać go z urządzenia pamięci (i.mi., twardy dysk). Ponieważ pliki skompresowane zajmują mniej miejsca do przechowywania, można je szybciej odzyskać z urządzenia pamięci (i.mi., dysk twardy) niż nieskompresowane pliki i można je dekompresować w locie. Ogólnie zmniejsza to czas dostępu do plików i poprawia wydajność systemu plików.

W tym artykule pokaże, jak włączyć kompresję w systemach puli i plików ZFS. Pokażę również, jak działa lokalna i odziedziczona kompresja puli i systemów plików ZFS. Więc zacznijmy.

Tworzenie puli ZFS:

Aby eksperymentować z kompresją ZFS, powinieneś utworzyć test testowy pulę ZFS Pool1 z dwoma urządzeniami do przechowywania w lustrzanej konfiguracji.

W tym artykule użyje VDB I VDC Urządzenia do przechowywania do utworzenia VDEV (urządzenie wirtualne) w lustrzanej konfiguracji i użyj go do utworzenia puli Pool1.

$ sudo lsblk -e7

Aby stworzyć nową pulę Pool1 używając VDB I VDC Urządzenia przechowywania w lustrzanej konfiguracji uruchom następujące polecenie:

$ sudo zpool Utwórz -f pula 1 lustro /dev /vdb /dev /vdc

Nowa pula ZFS Pool1 powinno być tworzone za pomocą VDB I VDC Urządzenia przechowywania w lustrzanej konfiguracji, jak pokazano na zrzucie ekranu poniżej.

$ sudo zpool pula stanu 1

Tworzenie systemów plików ZFS:

Aby przetestować lokalną i odziedziczoną kompresję, musisz także utworzyć niektóre systemy plików ZFS na puli ZFS Pool1.

Podczas tworzenia puli ZFS, ZFS tworzy system plików o tej samej nazwie co nazwa puli i montaże ją automatycznie w katalogu root (/) komputera. Punkt montażu będzie miał tę samą nazwę co nazwa puli.

Na przykład pula ZFS Pool1 To utworzyłeś wcześniej, automatycznie utworzy system plików ZFS Pool1 i zamontuj to na /pula 1 katalog komputera, jak widać na zrzucie ekranu poniżej.

Lista $ sudo zfs

NOTATKA: Zadzwonię do systemu plików najwyższego poziomu Pool1 basenu Pool1 pula ZFS w tym artykule. Możesz nazwać to pulą lub systemem plików. W porządku.

Aby utworzyć nowy system plików ZFS FS1 w basenie Pool1, Uruchom następujące polecenie:

$ sudo zfs Utwórz pulę1/fs1

Jak widać, nowy system plików ZFS Pool1/FS1 jest tworzony i jest zamontowany w /basen1/fs1 informator.

Lista $ sudo zfs

Możesz utworzyć system plików FS2 w FS1 system plików, który jest w puli Pool1 następująco:

$ sudo zfs Utwórz pulę1/fs1/fs2

Jak widać, system plików FS2 jest zagnieżdżony w systemie plików Pool1/FS1.

Lista $ sudo zfs

Utwórz inny system plików FS3 w basenie Pool1 następująco:

$ sudo zfs Utwórz pulę1/fs3

System plików FS3 powinno być tworzone w basenie Pool1, Jak widać na zrzucie ekranu poniżej.

Lista $ sudo zfs

Systemy plików FS1, FS2, I FS3 powinien utworzyć następującą strukturę katalogu w puli Pool1:

$ Tree /Pool1

Systemy plików ZFS są jak katalogi, które tworzysz w dowolnym innym systemie plików. Mogą być zagnieżdżone w sobie. Zwykle są zamontowane w punkcie góry basenu (i.mi.,/pula 1 do basenu Pool1). Możesz skonfigurować ZFS, aby zamontować je w dowolnym miejscu na komputerze, jak każdy inny system plików. To jest temat innego artykułu.

Teraz powinieneś mieć podstawowe zrozumienie, w jaki sposób systemy plików są zagnieżdżone w ZFS. To wystarczy, aby zrozumieć lokalną i odziedziczoną kompresję ZFS w nadchodzących sekcjach tego artykułu.

Włączanie kompresji na pulach ZFS:

Jeśli włączysz kompresję na puli ZFS, kompresja zostanie również włączona we wszystkich systemach plików tej puli ZFS.

Możesz dowiedzieć się, czy kompresja jest włączona w puli ZFS Pool1 Z następującym poleceniem:

$ sudo zfs dostaw pulę kompresyjną 1

Kompresja nie jest domyślnie włączona na pule ZFS, jak widać na zrzucie ekranu poniżej.

W ten sam sposób możesz sprawdzić, czy kompresja jest włączona na FS1, FS2, I FS3 systemy plików. Kompresja nie jest domyślnie włączona w systemach plików ZFS.

$ sudo zfs otrzymuj pulę kompresyjną 1/fs1
$ sudo zfs otrzymuj pulę kompresyjną 1/fs1/fs2
$ sudo zfs otrzymuj pulę kompresyjną 1/fs3

Możesz włączyć kompresję na basenie Pool1 ustawiając kompresja własność puli NA następująco:

$ sudo zfs set kompresja = na puli1

Jak widzisz, kompresja jest włączony (NA) i jest to lokalny własność puli Pool1.

NOTATKA: Jeśli nieruchomość jest lokalny, Oznacza to, że właściwość jest ustawiona bezpośrednio w puli lub systemie plików. Nie jest odziedziczony po swoim nadrzędnym (pula lub system plików).

$ sudo zfs dostaw pulę kompresyjną 1

Teraz, jeśli sprawdzisz kompresja własność FS1, FS2, I FS3 Systemy plików należy zobaczyć, że kompresja jest włączona (NA) we wszystkich z nich, a własność jest odziedziczone po puli1.

Ponieważ nie ustawiłeś kompresja właściwość dla FS1, FS2, I FS3 Systemy plików, tak jest dziedziczny z basenu Pool1.

$ sudo zfs otrzymuj pulę kompresyjną 1/fs1
$ sudo zfs otrzymuj pulę kompresyjną 1/fs1/fs2
$ sudo zfs otrzymuj pulę kompresyjną 1/fs3

Możesz wyłączyć kompresja Tylko dla FS1 system plików poprzez ustawienie kompresja własność FS1 system plików do wyłączony następująco:

$ sudo zfs set kompresja = poza puli1/fs1

Jak widzisz, kompresja jest niepełnosprawny (wyłączony) dla FS1 system plików. Teraz, że kompresja właściwość jest ustawiona lokalnie dla FS1 system plików. Nie będzie odziedziczony po puli Pool1.

$ sudo zfs otrzymuj pulę kompresyjną 1/fs1

FS2 System plików jest dzieckiem FS1 system plików. Więc odziedziczył kompresja własność z FS1 system plików (nadrzędny), jak widać na zrzucie ekranu poniżej.

$ sudo zfs otrzymuj pulę kompresyjną 1/fs1/fs2

Jak włączyłeś kompresję na puli Pool1, właściwość jest automatycznie dziedziczona przez wszystkie zagnieżdżone systemy plików (dziecko - FS1, FS2, I FS3) Pool1 (rodzic). W ten sposób właściwości są dziedziczone w systemach plików ZFS - Systemy plików dziecięcych otrzymują ich właściwości z systemów plików nadrzędnych lub puli, chyba że wyraźnie ustawiasz określone właściwości dla systemu plików dziecięcych.

Jeśli oszalałeś z gniazdowaniem systemów plików ZFS bez wcześniejszego planowania, może być bardzo trudne do zarządzania kompresją w puli ZFS. Więc nie zwariuj z gniazdowaniem systemów plików ZFS.

Włączanie kompresji w systemach plików ZFS:

Możesz także włączyć kompresję w określonych systemach plików ZFS. Włączmy kompresję na FS3 System plików ZFS, który utworzyłeś wcześniej.

W tym momencie kompresja jest włączona dla FS3 System plików ZFS, ponieważ kompresja jest włączona w puli Pool1, Jak widać na zrzucie ekranu poniżej.

Właściwość kompresji dla FS3 System plików jest dziedziczony po puli Pool1.

$ sudo zfs otrzymuj pulę kompresyjną 1/fs3

Jeśli wyłączysz kompresję na basenie Pool1, Kompresja zostanie również wyłączona dla systemu plików ZFS FS3.

$ sudo zfs set kompresja = poza puli1

Jak widzisz, kompresja jest również wyłączony (wyłączony) dla systemu plików FS3 jak odziedziczył po puli Pool1. Jeśli włączysz kompresję dla FS3 System plików lokalnie, to się nie stanie.

$ sudo zfs otrzymuj pulę kompresyjną 1/fs3

Aby umożliwić kompresję dla FS3 system plików, ustaw właściwość kompresji FS3 system plików do NA następująco:

$ sudo zfs set kompresja = na puli1/fs3

Jak widzisz, kompresja jest włączony (NA) dla FS3 system plików lokalnie.

Jeśli chcesz, możesz wyłączyć kompresja dla FS3 System plików w następujący sposób:

$ sudo zfs set kompresja = poza pulę1/fs3

Kompresja powinna być wyłączona dla FS3 system plików, jak widać na zrzucie ekranu poniżej.

$ sudo zfs otrzymuj pulę kompresyjną 1/fs3

Sprawdzanie, jak dobrze są kompresowane dane:

Po włączeniu kompresji w puli ZFS lub systemie plików będziesz chciał wiedzieć, jak dobrze dane przechowywane w puli ZFS lub systemie plików są kompresowane. W tej sekcji pokażę ci, jak to zrobić.

Zniszczmy basen ZFS Pool1, który właśnie stworzyłeś, i odtworzymy go, aby wszystko było prostsze.

Aby zniszczyć pulę ZFS Pool1, Uruchom następujące polecenie:

$ sudo zpool niszczy pulę1

Teraz utwórz pulę ZFS Pool1 Ponownie za pomocą VDB I VDC Urządzenia pamięci w konfiguracji lustrzanej w następujący sposób:

$ sudo zpool Utwórz -f pula 1 lustro /dev /vdb /dev /vdc

Włącz kompresję na basenie Pool1 następująco:

$ sudo zfs set kompresja = na puli1

Kompresja powinna być włączona dla puli ZFS Pool1.

$ sudo zfs dostaw pulę kompresyjną 1

Możesz zobaczyć współczynnik kompresji puli ZFS Pool1 Z następującym poleceniem:

$ sudo zfs get compressratio pula 1

W tej chwili basen Pool1 jest pusty. Tak więc współczynnik kompresji wynosi 1.00x. Oznacza to, że żadne dane są jeszcze ściśnięte.

Jak widać, tylko 108 kb danych jest używane z puli Pool1.

Lista $ sudo zfs

Skopiujmy /itp katalog do puli ZFS Pool1.

$ sudo cp -r/ etc/ pula 1/

Jak widać, /itp Katalog jest kopiowany do puli ZFS Pool1.

$ ls /pula 1

Zauważ, że rozmiar /itp katalog na puli jest 4.2 MB1. Lecz tylko 3.26 MB2 przestrzeni jest używane z basenu Pool1.

$ sudo du -sh /pula 1
Lista $ sudo zfs

W rzeczywistości /itp katalog jest 11 MB pod względem wielkości, jak widać na zrzucie ekranu poniżej.

$ sudo du -sh /itd

Współczynnik kompresji jest mniej więcej 1.93x. Jest to bardzo dobry współczynnik kompresji. Im wyższy współczynnik kompresji, tym więcej miejsca na dysku zaoszczędzisz przy kompresji ZFS.

$ sudo zfs get compressratio pula 1

ZFS obsługiwał algorytmy kompresji:

W chwili pisania tego pisma ZFS obsługuje następujące algorytmy kompresji danych:

i) LZJB: Ten algorytm jest zoptymalizowany pod kątem wydajności. Zapewnia również przyzwoity współczynnik kompresji danych.

ii) LZ4: Ten algorytm jest zamiennikiem LZJB algorytm. Zapewnia szybszą kompresję i dekompresję. Współczynnik kompresji jest umiarkowanie wyższy niż LZJB algorytm.

iii) gzip: Używa tego samego algorytmu kompresji, co gzip Komenda. gzip Algorytm kompresji obsługuje różne poziomy kompresji. Poziom kompresji może wynosić 1-9. Możesz użyć GZIP-N (N jest poziomem), aby zdefiniować poziom dla gzip Algorytm kompresji. Jeśli nie określisz poziomu dla gzip Algorytm kompresji, ZFS używa poziomu 6 (GZIP-6) domyślnie.

GZIP-1: Poziom 1 GZIP - najszybszy, ale najniższy współczynnik kompresji.

GZIP-2: Poziom 2 GZIP - wolniej niż poziom 1, ale wyższy współczynnik kompresji niż poziom 1.

GZIP-3: Poziom 3 GZIP - wolniej niż poziom 2, ale wyższy współczynnik kompresji niż poziom 2.

GZIP-4: Poziom 4 GZIP - wolniej niż poziom 3, ale wyższy współczynnik kompresji niż poziom 3.

GZIP-5: Poziom 5 GZIP - wolniej niż poziom 4, ale wyższy współczynnik kompresji niż poziom 4.

GZIP-6: Poziom 6 GZIP - wolniej niż poziom 5, ale wyższy współczynnik kompresji niż poziom 5.

GZIP-7: Poziom 7 GZIP - wolniej niż poziom 6, ale wyższy współczynnik kompresji niż poziom 6.

GZIP-8: Poziom 8 GZIP - wolniej niż poziom 7, ale wyższy współczynnik kompresji niż poziom 7.

GZIP-9: Poziom 9 GZIP - najwolniejszy, ale najwyższy współczynnik kompresji.

iv) Zle: Ten algorytm jest zoptymalizowany pod kątem kompresji zer.

LZJB jest domyślnym algorytmem kompresji danych systemu plików ZFS.

Jeśli masz LZ4_Compress funkcja włączona w puli ZFS, wówczas domyślnym algorytmem kompresji danych będzie LZ4.

Aby sprawdzić, czy LZ4_Compress Funkcja jest włączona na puli ZFS Pool1, Uruchom następujące polecenie:

$ sudo zpool get Feature@LZ4_Compress Pool1

Jak widać, LZ4_Compress Funkcja jest włączona na puli ZFS Pool1.

Możesz ustawić inny algorytm kompresji na puli lub systemie plików ZFS w następujący sposób:

$ sudo zfs set kompresja =

Zastępować z jednym z ZFS obsługiwanych algorytmów kompresji i z puli lub systemem plików ZFS, w którym chcesz włączyć kompresję za pomocą algorytmu kompresji .

Na przykład, aby włączyć kompresję i użyć GZIP-9 Algorytm kompresji na basenie Pool1, Uruchom następujące polecenie:

$ sudo zfs set kompresja = gzip-9 pula 1

Jak widzisz, GZIP-9 Kompresja jest włączona na puli Pool1.

$ sudo zfs dostaw pulę kompresyjną 1

Teraz utwórz system plików ZFS FS3 na puli ZFS Pool1 następująco:

$ sudo zfs Utwórz pulę1/fs3

W ten sam sposób możesz włączyć kompresję na FS3 System plików ZFS za pomocą Zle Algorytm kompresji w następujący sposób:

$ sudo zfs set kompresja = ZLE BAUL1/FS3

Jak widzisz, Zle Kompresja jest włączona w systemie plików ZFS FS3.

$ sudo zfs otrzymuj pulę kompresyjną 1/fs3

Czy powinienem włączyć kompresję ZFS?

Rozmiar każdego rodzaju pliku nie jest zmniejszony po skompresji. Wideo (ja.mi., MP4), audio (i.mi., Mp3) i obraz (i.mi., Pliki JPEG), na przykład. Zamiast zmniejszenia ich rozmiaru, czasami stają. To jest minus kompresji systemu plików.

Jeśli przechowujesz wideo, audio i obrazy tylko w systemie puli/plików ZFS, kompresja może nie dać wielu korzyści. Ale jeśli przechowujesz pliki tekstowe i inne ściśliwe pliki (i.mi., Dokument Word, wykonywalne pliki binarne/programy), a następnie włączenie kompresji w systemie puli/plików ZFS jest tego warte. Zaoszczędzi dużo miejsca na dysku i poprawi wydajność systemu puli/plików ZFS.

Wniosek:

W tym artykule pokazałem, jak włączyć kompresję w pulach ZFS i systemach plików. Pokazałem również, jak sprawdzić współczynnik kompresji pul ZFS i systemu plików, aby dowiedzieć się, jak skutecznie są kompresowane dane. Omówiłem dostępne algorytmy kompresji ZFS i pokazałem, jak włączyć kompresję w pulach ZFS i systemach plików za pomocą określonych algorytmów kompresji obsługiwanych przez ZFS.

Bibliografia:

[1] Manpage of ZFS