Miesięcznik informatyków i menedżerów IT sektora publicznego

Artur Pęczak

Archiwizacja danych z narzędziem SquashFS

SquashFS to wysoce kompresowalny system plikowy tylko do odczytu wykorzystywany w celach archiwizacji. Znajduje również zastosowanie w urządzeniach, gdzie wymagana jest oszczędność miejsca na pamięci masowej, zasadniczo w systemach wbudowanych.

W systemach wbudowanych (embedded) każdy bit na nośniku jest na wagę złota, a programiści wiele uwagi poświęcają zmniejszeniu rozmiaru zapisywanych danych. Publiczne archiwa osiągają rozmiary terabajtów, ale kompresja istotnie ogranicza pojemność pamięci masowej wykorzystywanej do ich składowania. Z perspektywy archiwizacji danych SquashFS może być stosowany wszędzie tam, gdzie używano dotychczas programów tar i gzip.

Sama idea kompresowania jest powszechnie stosowana w systemach informatycznych, pozwala bowiem zauważalnie zmniejszyć ilość miejsca zajmowanego przez dane w przestrzeni dyskowej. W przypadku SquashFS mamy do czynienia z kompresją bezstratną, gdzie każdy bit danych można odtworzyć w późniejszym czasie. W zależności od typu przechowywanych danych SquashFS pozwala uzyskać współczynnik kompresji na poziomie 50% i więcej. Autorzy projektu deklarują również, że SquashFS jest bardziej elastyczny i cechuje się większą wydajnością niż tworzenie archiwów tar.

Podstawowe informacje

Zacznijmy od przedstawienia kilku parametrów technicznych SquashFS. System plików dokonuje kompresji danych (plików), węzłów oraz struktury katalogów. Obsługuje podstawowe atrybuty plików, takie jak identyfikator użytkownika (UID), identyfikator grupy (GID), datę utworzenia pliku oraz jego rozszerzone atrybuty xattr. Dzięki temu SquashFS może być stosowany m.in. w systemach zabezpieczonych mechanizmem SELinux. Maksymalny rozmiar wolumenu wynosi 16 eksabajtów (16 EiB, 2^64 bajtów). Taki sam rozmiar może mieć pojedynczy plik zapisany w systemie plikowym.

Przy użyciu SquashFS samodzielnie ustalimy rozmiar bloku. Maksymalnie wynosi on 1 MB, co w pewnych zastosowaniach pozwala uzyskać zdecydowanie wyższy stopień kompresji danych niż w przypadku użycia standardowego rozmiaru bloku 4K. Co więcej, dzięki zastosowaniu koncepcji „fragment blocks” pliki o rozmiarze mniejszym od rozmiaru pojedynczego bloku łączone są w jeden blok, aby uzyskać wyższy współczynnik kompresji. SquashFS ma także wbudowane funkcje deduplikacji danych. Bloki danych plików, które występują w innym miejscu, są identyfikowane i usuwane z systemu plikowego. W zależności od archiwizowanych danych, mechanizm deduplikacji pozwala wydajnie podnieść współczynnik kompresji danych. SquashFS umożliwia skompresowanie systemu plikowego lub pojedynczego katalogu i zapisanie go (w trybie tylko do odczytu) do oddzielnego pliku lub dedykowanego urządzenia dyskowego/woluminu. Taki zasób może być później zamontowany jako udział dyskowy lub otwarty za pomocą narzędzi trzecich. Archiwa SquashFS rozpoznawane są m.in. przez popularnego 7-Zipa.

Architektura rozwiązania

SquashFS tworzą dwa komponenty programowe: sterownik jądra systemu Linux oraz narzędzia przestrzeni użytkownika mksquashfs oraz unsquashfs, w Debianie dostępne w pakiecie squashfs-tools. W najnowszych wersjach jądra mamy do dyspozycji SquashFS 4.0 z obsługą atrybutów xattr oraz wsparciem dla kompresji zlib (format gzip), lz4, lzo oraz lzma\lzma2 (format xz). W przypadku samodzielnej rekompilacji jądra stosowne pozycje znajdziemy w menu Files systems | Miscellaneous filesystems.

Sam projekt nie jest nowy. Pierwsza wersja systemu plikowego pojawiła się pod koniec 2002 r. Od 2009 r. sterownik SquashFS został włączony do głównej linii jądra Linuksa 2.6.29. Ostatnia wersja narzędzia, czyli SquashFS 4.3 została wydana w 2014 r. i zawiera szereg udoskonaleń w zakresie stabilności i optymalizacji wydajności, a także nowe opcje kompresji oraz wersje narzędzi mk­squashfs/unsquashfs. Najważniejsze nowości tej wersji narzędzia to możliwość określenia poziomu kompresji dla kompresora gzip i lzo oraz nowy algorytm kompresji lz4. Mksquashfs używa teraz domyślnie 25% fizycznej pamięci RAM komputera. Według Wikipedii SquashFS wykorzystywany jest w wersji Live CD takich dystrybucji, jak Arch Linux, Debian, Fedora, Gentoo Linux, Linux Mint, Salix czy Ubuntu, a także w dedykowanych systemach dla routerów OpenWrt i DD-WRT, oprogramowaniu Chromecast oraz jako partycja sys temowa dla Android Nougat.

Przykłady użycia

Zastosowanie SquashFS zilustrujemy na przykładzie katalogu (archiwum) o dużym rozmiarze, którego skompresowanie może przynieść zauważalne zmniejszenie zużywanej przestrzeni dyskowej. W tym celu posłużymy się dystrybucją Debian 9.2.1 oraz narzędziami z pakietu squashfs-tools. Na początek instalujemy wymagane oprogramowanie przy użyciu polecenia apt-get install squashfs-tools. Jądro systemu Debian zawiera prekompilowane moduły do obsługi SquashFS. Dzisiaj nie ma już potrzeby rekompilacji jądra, chyba że chcemy zmienić bardziej szczegółowe ustawienia sterownika, np. dekompresję plików bezpośrednio do pliku wymiany (page cache) na dysku. Domyślnie pliki dekompresowane są do pośredniczącego bufora w pamięci komputera.

Przykładowe wywołanie programu utworzy nowy system plikowy SquashFS 4.0 zawierający dane z folderu archive i zapisze go w formie pliku o nazwie archive.sqsh:

# mksquashfs /archive /archive.sqsh

[...]

Autor zawodowo zajmuje się informatyką. Publikuje w magazynach komputerowych i serwisach internetowych.

Pełna treść artykułu jest dostępna w papierowym wydaniu pisma. Zapraszamy do składania zamówień na prenumeratę i numery archiwalne.
 
 

Polecamy

Biblioteka Informacja Publiczna

Specjalistyczne publikacje książkowe dla pracowników administracji publicznej

więcej