Tuesday, May 20, 2014

System plików XFS dla enterprise

Ostatnimi czasy publikowane jest coraz więcej informacji na temat nowej wersji systemu Red Hat Enterprise Linux 7. Jedną z zastanawiających nowości jest domyślny system plików, którym w RHEL7 będzie XFS. Wielu użytkowników systemu GNU/Linux może to dziwić, gdyż już tak bardzo przyzwyczailiśmy się do Ext3 i Ext4, że trudno się odzwyczaić. Prędzej spodziewalibyśmy się BTRFS jako nowego domyślnego systemu plików niż XFS. Dlatego ta informacja tak pobudza ciekawość, co takiego jest w XFS, iż to właśnie on został wybrany?

Dla niektórych XFS może wydawać się nową nazwą, ale tak naprawdę system jest ten o wiele starszy od BTRFS, który wystartował w 2007 roku. System plików XFS został opracowany przez Silicon Graphics do swojego systemu IRIX, który używał XFS już od 1994 roku. Do Linuksa przeprotowano go ok. 2000 roku. Od tej pory ciągle ulepszano jego wydajność i to zapewne jest przyczyna tego że to właśnie XFS jest bardziej dopracowany niż obiecujący lecz nie dopracowany BTRFS. W XFS od dłuższego czasu znajduje się mniej błędów, niż w innych popularnych systemach plików. Kolejną różnicą do BTRFS jest to, że XFS ogranicza się do funkcjonalności mieszczących się w tradycyjnym pojęciu systemu plików, tzn. nie zamierza on oferować mechanizmu RAID czy snapshot z poziomu systemu plików. Z drugiej strony, mimo iż jest on od BTRFS starszy niemal o 20 lat to do realizacji podstawowej funkcjonalności użyto w nim równie, a może i bardziej skomplikowanych rozwiązań.

XFS może wydawać się na "staroć" ale takie rozumowanie jest błędne. Otóż ten system plików był projektem realizowanym jako daleko-wyprzedzająca wizja. Widocznie wizja, przyświecająca jego twórców była tak daleka, że dopiero przyszły czasy, w których systemy rzeczywiście będą wykorzystywać jego możliwości. Najlepiej podsumować to tak, że system plików XFS opracowany przez Silicon Graphics był wielką wizją, której celem było obsłużenie wielkich systemów plików, wielkich plików, wielkiej ilości plików i katalogów oraz wielkiej przepustowości I/O. Przy dzisiejszym "zachmurzeniu" najwięksi producenci dystrybucji GNU/Linux zostali zmuszeni do obsługi wielkich systemów plików i wybrali XFS.

Największą cechą XFS jest jego skalowalność. Ext4 jest bardzo szybki i dostatecznie dopracowany, ale do zarządzania danymi używa ciągłych struktur danych co przy większych ilościach zaczyna być problemem. Jeżeli porównasz prędkość operacji Ext4 z XFS na systemie plików o wielkości 2 TB to nie wiele będą się różnić, ale gdy zrobimy to na systemie plików o wielkości 20 TB, to zacznie wychodzić na jaw lepsze przystosowanie XFS do takich systemów. XFS od początku był projektowany na wielką skalę, i dlatego jest zaprojektowany tak, aby korzystać z różnicy budowy takich systemów plików. Do zbudowania systemu plików o wielkości 20 TB trzeba użyć wielu dysków, również maszyna będzie dysponowała wieloma procesorami/rdzeniami. XFS używa struktur AG (grupy alokacyjne) i drzew B+ do reprezentacji systemu plików. Większość operacji może wykonywać niezależnie dla konkretnego dysku twardego i AG, co dzięki dostępności wielu rdzeni pozwala wykonywać wiele operacji jednocześnie na tym samym systemie plików.

XFS wykorzystuje logiczną jednostkę danych zwaną extent, która w zależności od wielkości pliku może składać się z bloków o zmiennej wielkość. Dzięki temu, w jednym systemie plików XFS może używać małych jednostek alokacyjnych (4 kiB) i wielkich do 8 GiB. XFS używa 64-bitowej przestrzeni adresowej i 64-bitowego dziennika transakcji (file system journaling), który wykonuje operacje w sposób niepodzielny, co oznacza że operacja będzie zaksięgowana tylko w przypadku, gdy całość operacji zostanie wykonana. Kolejnym problemem z wielkimi systemami plików jest czas ich sprawdzania po niepoprawnym wstrzymaniu pracy, w XFS znacznie skrócono ten czas do minimum.

Oczywiście XFS wspiera większość podstawowych funkcji, tj. ACL, atrybuty rozszerzone, czy limity (quota). XFS oferuje nie tylko limity na użytkownika i grupę ale również na projekt, co jest raczej niespotykane w innych systemach plików. Można stworzyć jakiś projekt (ID), potem przypisać do niego określone lokalizacja (folder) i nałożyć ograniczenia.

XFS oferuje masę zaawansowanych mechanizmów podnoszących przepustowość I/O w dużych systemach plików. Czy to oznacza, że powinieneś przejść na XFS? Jeżeli nie tworzysz wielkich przestrzeni dyskowych, tylko używasz dysków 2-3 TB to nie ma sensu. Cztery dyski 2 TB, dwa w striping i na dwa kolejne RAID0 - czyli partycja o wielkości 4 TB to użycie XFS nic nie przyśpieszy. XFS należy interesować się przy 10+ TB. Oczywiście wykorzystanie XFS w przytoczonym przykładzie również nie zaszkodzi.

[1] Scalability in the XFS File System