i-węzły, porównanie zajętego miejsca dla wielu małych plików (xfs, btrfs, ext4)

9

Mam partycję ext4 (LVM na maszynie wirtualnej) z dużą ilością małych plików , które muszę przedłużać co 3-4 miesiące.

Jeśli chodzi o ilość miejsca używanego przez i-węzły.

Czy jeden z systemów plików xfs, btrfs lub ext4 zajmuje mniej miejsca?

Innymi słowy, czy przejście na btrfs lub xfs spowoduje, że partycja zapełni się i-węzłami wolniej niż ext4?

Abadys
źródło
jeśli używasz ext4 i spodziewasz się przechowywać głównie małe typy, powinieneś utworzyć go z mkfs.ext4 -t newsnajlepszymi wynikami. Sugeruję również przetestowanie - utwórz (na przykład na lvm lub na sprzężeniu zwrotnym) każdy z plików po kolei i zacznij kopiować do niego swoje prawdziwe pliki, aż się zapełni. Kiedy się zapełni, zrób df -i(lub find | wc -l), aby dowiedzieć się, który z nich przechował większość twoich plików - w ten sposób będziesz wiedział na pewno.
Matija Nalis,
1
@MatijaNalis, -Tz wielką literą T. Plik konfiguracyjny ma również inne przydatne opcje
ilkkachu
@ilkkachu poprawne, dzięki. Powinno byćmkfs.ext4 -T news
Matija Nalis
Jak małe są pliki?
drudru

Odpowiedzi:

6

Na początek pierwsze pytanie: tak, jeden z tych systemów plików zajmuje mniej miejsca. Nawet bez dalszych szczegółów mało prawdopodobne jest, aby wszyscy zajmowali dokładnie tyle samo miejsca, biorąc pod uwagę, że mają różne implementacje. Tak więc jeden musi zużywać mniej miejsca niż wszystkie inne.

Btrfs ma dynamiczny przydział i-węzłów, więc nie ma potrzeby wypełniania się tak jak w przypadku tabel i-węzłów dla ext4 (rozmiar, dla którego ustawia się czas tworzenia systemu plików ext4).

XFS jest dynamiczny w podobny sposób, ale ma limit (procent systemu plików, który może być użyty dla i-węzłów), więc tam, czy wypełnisz swój limit i-węzła, zależy od ustawionego procentu, a także liczby plików / rozmiarów plików

Anthon
źródło
Dziękuję za szybką odpowiedź! Wygląda na to, że XFS jest obecnie najbezpieczniejszym wyborem. Czy ten procent wykorzystania i-węzła można zmieniać dynamicznie? a jeśli nie, to czy można przewidzieć, ile będzie potrzebne?
abadys
1
Powinieneś być w stanie to zrobić zxfs_growfs -m XX
Anthon
3

Tak i pamiętaj, że wszystko zależy od twoich potrzeb:

Btrfs (wymawiane jako Butter FS, Better FS lub B-Tree FS)

Biorąc pod uwagę, że btrfs będą w stanie rozciągać się na wiele dysków twardych, jest to bardzo dobry pomysł, że może obsługiwać 16 razy więcej miejsca na dysku niż ext4 . Maksymalny rozmiar partycji systemu plików btrfs to 16 eksbibajtów, a także maksymalny rozmiar pliku to także 16 eksbibajtów.

Maksymalna liczba plików: 2 ** 64

XFS

XFS jest wysokiej klasy 64-bitowy system plików. XFS obsługuje maksymalny rozmiar systemu plików wynoszący 8 ekbibajtów dla 64-bitowego systemu plików. Teraz RHEL 7.0 używa XFS jako domyślnego systemu plików, w tym obsługi XFS dla /bootpartycji.

Maksymalna liczba plików: 2 ** 64

EXT4

Ext4 jest dobrze znany ze względu na wprowadzenie ulepszeń prędkości ponad ext3. Ext4 ma pewne ograniczenia. Maksymalny rozmiar pliku to 16 tebibajtów (czyli około 17,6 terabajtów). Największy wolumin / partycja, jaką możesz mieć przy pomocy ext4, to 1 ekbibajt. Podobnie jak w najnowocześniejszych systemach plików, jest to system plików z kronikowaniem, co oznacza, że ​​będzie prowadzić kronikę miejsca, w którym pliki znajdują się głównie na dysku, oraz wszelkich innych zmian, które wystąpią na dysku. Niezależnie od wszystkich jego funkcji nie obsługuje przezroczystej kompresji, przezroczystego szyfrowania ani deduplikacji danych. Migawki są obsługiwane technicznie, ale taka funkcja jest w najlepszym razie eksperymentalna.

Maksymalna liczba plików: 4 miliardy

XFS vs Btrfs

XFS nie ma żadnej macierzy RAID, podczas gdy Btrfs RAID nie jest jeszcze całkowicie stabilny i jest na początku. XFS jest coraz bardziej dojrzały niż Btrfs , ale nie możemy zaprzeczyć, że Btrfs jest potężnym i dobrze rozwijającym się systemem plików.

Na razie XFS jest moim wyborem - zwłaszcza, że ​​jest to domyślny FS na RHEL 7 - chyba że naprawdę potrzebuję Btrfs.

FarazX
źródło
1
Ma to ogólnie dobre informacje o systemach plików, ale nie widzę tu szczególnego problemu małych plików.
ilkkachu
@ilkkachu „duża ilość małych plików” co to znaczy? Chodzi o i-węzły, ponieważ wszystkie pliki są tworzone za pomocą i-węzłów, a i-węzeł to struktura danych używana do reprezentowania obiektu systemu plików. Myślę, że wyjaśniłem wszystkie potrzeby autora, a także wspomniałem o maksymalnej liczbie plików.
FarazX,
2

Przypuszczam, że problemem, jaki masz, nie jest to, że partycja sama zapełnia się i-węzłami, ale kończy się liczba i-węzłów w systemie plików. ext4 rezerwuje i-węzły statycznie podczas tworzenia systemu plików, ale można ustawić liczbę za pomocą opcjimkfs.ext4 :

-i bajty-na-i-węzeł
Określ stosunek bajtów / i-węzłów. mke2fs tworzy i-węzeł dla każdego bajtu na bajt miejsca na dysku. Im większy stosunek bajtów do i-węzłów, tym mniej powstanie i-węzłów.

-N liczba-i-węzłów
Zastępuje domyślne obliczenie liczby i-węzłów, które powinny być zarezerwowane dla systemu plików (na podstawie liczby bloków i stosunku bajtów do i-węzłów). To pozwala użytkownikowi bezpośrednio określić liczbę pożądanych i-węzłów.

Podręcznik wyraźnie stwierdza, że ​​stosunek liczby bajtów na i-węzeł nie może zostać zmieniony po utworzeniu FS, ale całkowita liczba zostanie przeskalowana, aby osiągnąć współczynnik, jeśli rozmiar FS zostanie zmieniony.

Możesz także ustawić rozmiar każdego i-węzła. Domyślnie jest to 256 bajtów w „większości” systemów plików, ale można ją zmniejszyć do 128 (domyślnie w „małych” systemach plików). Dodatkowa przestrzeń jest używana do przechowywania rozszerzonych atrybutów (np. Etykiet SELinux), więc jeśli nie potrzebujesz ich, powinno być bezpiecznie zmniejszyć rozmiar do minimum.

-I rozmiar i-węzła
Podaj rozmiar każdego i-węzła w bajtach. Wartość wielkości i-węzła musi być potęgą 2 większą lub równą 128.

df -ipowinien pokazywać liczbę przydzielonych i użytych i-węzłów. Przy domyślnych opcjach, jedna partycja 30 GB, na którą patrzyłem, miała jeden i-węzeł na każde 16 kB, ale jeśli twoje pliki są bardzo małe, możesz ustawić, powiedzmy, -i 4096mieć jedną i-węzeł na każdy blok danych w systemie.

Jeśli twoje pliki są mniejsze niż 4096, możesz również chcieć zmniejszyć rozmiar bloku systemu plików, ponieważ wszystkie zwykłe pliki i tak wymagają jednego pełnego bloku danych. (To znaczy na ext4. Nie wiem, czy inne obecne systemy plików pakują małe pliki).

-b rozmiar bloku
Podaj rozmiar bloków w bajtach. Prawidłowe wartości wielkości bloku to 1024, 2048 i 4096 bajtów na blok. Jeśli zostanie pominięty, rozmiar bloku jest heurystycznie określony przez rozmiar systemu plików i oczekiwane użycie systemu plików (patrz opcja -T).

mkfs.ext4ma również -T <type>opcję, która może być użyta jako skrót dla niektórych lub wszystkich z nich. Ustawienia są /etc/mke2fs.confwłączone, co w moim Debianie czyni np. mkfs.ext4 -T smallRównoważnym

mkfs.ext4 -b 1024 -I 128 -i 4096

Co może nie być złym zestawem opcji dla wielu małych plików (i bez xattrów).

Jeśli twoje pliki są mniejsze niż jeden KB, system plików może nie być najlepszym sposobem na zapisanie danych, ale może warto rozważyć coś takiego jak baza danych lub system specyficzny dla aplikacji.

ilkkachu
źródło