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).
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.
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
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ć:
# mount -t nilfs2 /dev/sda3 /mnt/nilfs
# cd /mnt/nilfs
Kiedy brakuje miejsca, stare checkpointy są usuwane - jeśli chcemy
utrwalić dany checkpoint (wtedy nazywamy go snapshotem)
używamy:
# 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
# mkcp // wymuś utworzenie checkpointu; tutaj bez efektu bo nie ma zmian
Czas wypróbować możliwości NILFS2. Zmieńmy zawartość pliku:
# 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
# echo "zmiana" > abc.txt
I zamontujmy checkpoint sprzed zmiany tylko do odczytu w osobnym
folderze:
# 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
# mkdir /mnt/nilfs-stary
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.
# 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
Na koniec jeszcze porównanie wydajności z ext3 - sprawa pomijana we
wszystkich artykułach o NILFS2 jakie czytałem:
# cd /root
Jak widać sam zapis jest rzeczywiście bardzo szybki.
# 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
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:
Janina Mincer-Daszkiewicz |