Ciekawe systemy plików w Linuksie: NILFS2 i exofs

Szymon Piechowicz

Wstęp

Niniejsza prezentacja będzie o dwóch ciekawych systemach plików, które od niedawna na stałe dostępne są w Linuxie: NILFS2 (New Implementation of Log-structured File System) i exofs (Extended Object File System).

System plików w formie logu

Podstawową ideą w tego typu systemach jest traktowanie dysku jako cyklicznej listy: nowe pliki (a także nowe wersje istniejących!) zapisujemy zawsze na koniec listy. Jak dojdziemy do końca dysku, to zaczynamy od początku. Musimy w tym celu usunąć stare wersje plików, żeby odzyskać wolne miejsce.

https://www.ibm.com/developerworks/linux/library/l-nilfs-exofs/

Zalety:

Wady:

Implementacja - NILFS2:

NILFS2 jest dostępny w formie modułu do jądra od wersji 2.6.30. Jednak aby go użyć potrzebujemy jeszcze paczki z narzędziami nilfs-utils, która zawiera m. in. mkfs.nilfs2 - można ją pobrać ze strony projektu. Moduł obsługujący NILFS2 ładujemy przez: # modprobe nilfs2 Teraz możemy już utworzyć system plików i go zamontować: # mkfs -t nilfs2 /dev/sda3
# mount -t nilfs2 /dev/sda3 /mnt/nilfs
NILFS2 w regularnych odstępach czasu (bądź liczby zapisanych bajtów) tworzy checkpointy - oznaczone stany systemu plików, do których potem będzie można wrócić. Listę checkpointów można podejrzeć: # cd /mnt/nilfs
# echo "abc" > abc.txt
# echo "def" > def.txt
# lscp
CNO     DATE     TIME   MODE  FLG  NBLKINC  ICNT
 1  2011-05-17 21:53:59  cp    -     11      2
 2  2011-05-17 21:55:09  cp    -     14      3
 3  2011-05-17 21:55:17  cp    -     14      4
Kiedy brakuje miejsca, stare checkpointy są usuwane - jeśli chcemy utrwalić dany checkpoint (wtedy nazywamy go snapshotem) używamy: # mkcp // wymuś utworzenie checkpointu; tutaj bez efektu bo nie ma zmian
# mkcp -s // zamień na snapshot
# lscp
CNO     DATE     TIME   MODE  FLG  NBLKINC  ICNT
 1  2011-05-17 21:53:59  cp    -     11      2
 2  2011-05-17 21:55:09  cp    -     14      3
 3  2011-05-17 21:55:17  ss    -     14      4
Czas wypróbować możliwości NILFS2. Zmieńmy zawartość pliku: # echo "zmiana" > abc.txt
# lscp
CNO     DATE     TIME   MODE  FLG  NBLKINC  ICNT
 1  2011-05-17 21:53:59  cp    -     11      2
 2  2011-05-17 21:55:09  cp    -     14      3
 3  2011-05-17 21:55:17  ss    -     14      4
 4  2011-05-17 21:57:37  cp    i      8      4
 5  2011-05-17 21:03:53  cp    -     11      4
I zamontujmy checkpoint sprzed zmiany tylko do odczytu w osobnym folderze: # mkdir /mnt/nilfs-stary
# mount -t nilfs2 -r -o cp=3 /dev/sda3 /mnt/nilfs-stary // -o cp=3 mówi jaki checkpoint chcemy zamontować
# cat /mnt/nilfs-stary/abc.txt
abc
To oczywiście tylko próbka możliwości. Proces tworzenia i usuwania checkpointów można dostosować za pomocą wielu parametrów opisanych na stronie projektu.

Na koniec jeszcze porównanie wydajności z ext3 - sprawa pomijana we wszystkich artykułach o NILFS2 jakie czytałem: # cd /root
# time for ((i = 1; i <= 1000; ++i)); do echo $i > test.txt; done
real 0m5.595s
user 0m0.255s
sys 0m0.741s
# cd /mnt/nilfs
# time for ((i = 1; i <= 1000; ++i)); do echo $i > test.txt; done
real 0m0.519s
user 0m0.266s
sys 0m0.252s
Jak widać sam zapis jest rzeczywiście bardzo szybki.

Obiektowy system plików

W standardzie SCSI pojawiła się możliwość operowania na obiektach - całych plikach z danymi - zamiast na blokach danych. Ponieważ możliwości efektywnego składowania całych obiektów są rozwijane niezależnie od idei systemu plików, pojawiła się potrzeba zrealizowania interfejsu pomiędzy tymi dwoma systemami. Jak można to zrobić pokazano na poniższym rysunku:

https://www.ibm.com/developerworks/linux/library/l-nilfs-exofs/

Zalety:

Źródła


Janina Mincer-Daszkiewicz