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