Miałem problem (nowy dla mnie) w zeszłym tygodniu. Mam system plików ext4 (Fedora 15). Aplikacja działająca na serwerze nagle przestała działać. Nie mogłem znaleźć problemu na pierwszy rzut oka.
df
pokazało 50% dostępnej powierzchni. Po przeszukaniu około godziny zobaczyłem post na forum, w którym używał ten facet df -i
. Opcja wyszukuje użycie i-węzłów. W systemie brakowało i-węzłów, prosty problem, którego nie zdawałem sobie sprawy. Partycja miała tylko 3,2 mln i-węzłów.
Teraz moje pytania brzmią: czy mogę sprawić, aby system miał więcej i-węzłów? Czy należy / można go ustawić podczas formatowania dysku? Z iloma i-węzłami 3,2M ile plików mogę mieć?
Odpowiedzi:
Wygląda na to, że masz dużo więcej plików niż zwykle.
Nie wiem, czy istnieje rozwiązanie umożliwiające dynamiczną zmianę rozmiaru tabeli i-węzłów. Obawiam się, że musisz wykonać kopię zapasową danych, utworzyć nowy system plików i przywrócić dane.
Aby stworzyć nowy system plików z tak ogromną tabelą i-węzłów, musisz użyć opcji „-N” programu mke2fs (8).
Polecam najpierw użyć opcji „-n” (która nie tworzy fs, ale wyświetla przydatne informacje), aby uzyskać szacunkową liczbę i-węzłów. W razie potrzeby użyj „-N”, aby utworzyć system plików z określonymi numerami i-węzłów.
źródło
mke2fs -i
aby określić liczbę i-węzłów. Jego dokumentacja wskazuje, że „nie jest możliwe zwiększenie liczby i-węzłów w systemie plików po jego utworzeniu”.-i
Opcje określają rozmiar i-węzła, a nie ich liczbę.-N
Opcja ustawia węzłów numerycznych.Jako inne obejście można zasugerować rozważenie spakowania ogromnych kolekcji plików do nieskompresowanego (!)
tar
Archiwum, a następnie użycia goarchivemount
do zamontowania go jako systemu plików. Archiwum tar jest lepsze do udostępniania niż obraz systemu plików i zapewnia podobną wydajność podczas tworzenia kopii zapasowej w chmurze lub innym magazynie.Jeśli kolekcja ma być tylko do odczytu,
squashfs
może być opcją, ale wymaga pewnych opcji włączonych w jądrze, axz
kompresja jest dostępna również dla tar o tej samej wydajności.źródło
Dzięki 3,2 miliona i-węzłów możesz mieć łącznie 3,2 miliona plików i katalogów (ale wiele dowiązań twardych do pliku używa tylko jednego i-węzła).
Tak, można to ustawić podczas tworzenia systemu plików na partycji. Opcje
-T usage-type
,-N number-of-inodes
lub-i bytes-per-inode
wszystkie mogą ustawić liczbę i-węzłów. Zwykle używam-i
, po porównaniu danych wyjściowychdu -s
ifind | wc -l
dla podobnej kolekcji plików i dopuszczeniu pewnego luzu.Nie, nie można tego zmienić w istniejącym systemie plików. Jednak:
resize2fs
do rozwinięcia systemu plików. To z grubsza dodaje więcej i-węzłów proporcjonalnie do dodanej przestrzeni. Jeśli chcesz uniknąć wyczerpania się i-węzłów przed przestrzenią, zakładając, że przyszłe pliki będą miały mniej więcej ten sam rozmiar, ustaw odpowiednio wysoki procent zarezerwowanego bloku za pomocątune2fs -m
.źródło
Mam alternatywne rozwiązania dla tej sytuacji. Powiedzmy, że masz 1000 i-węzłów na partycji 10G. Jednak ze względu na limit i-węzłów nie należy wykorzystywać całej przestrzeni partycji . Ale w tych rozwiązaniach będziesz mógł wykorzystać pozostałą przestrzeń partycji bez jej formatowania .
do stałego montażu
źródło
$
) w celu wyraźnego rozróżnienia między poleceniami a danymi wyjściowymi (jeśli byłyby to tylko polecenia, podpowiedź jest zwykle pomijana). Zmieniłem też SHOUTING w odważnym podkreśleniu fazy, co moim zdaniem zamierzałeś. Możesz cofnąć zmiany, jeśli wprowadzę w błądOstatnio napotkałem ten problem podczas korzystania z aktualizacji apt lub aptitude.
Wydane polecenie:
Ujawniono, że większość plików znajduje się w podfolderach dla kilku wersji jądra:
Usunięto te podfoldery i problem i-węzła został naprawiony.
źródło
du
polecenia. W powyższym przykładzie użyto katalogu głównego systemu plików, patrząc tylko na przestrzeń. Dane wyjściowe są sortowane potokowo, aby pokazać, które katalogi zawierały najwięcej plików. W powyższym przykładzie nie ma liczenia dla plików, czyli części „ile plików” pytania.du
Jednak źródłem wyjściowym były jądra ; np. wiele małych plików, podfolderów z poprzednich kompilacji, ta rzecz idealnie nadaje się do usunięcia w celu uwolnienia i-węzłów. Wciąż pozostaje ręczny, ludzki przegląddu
wyników,/usr/src/linux-headers
był wtedy oczywisty.wypróbuj
du -s --inodes * 2>/dev/null |sort -g
cd do ostatniego katalogu wyjściowego i powtórz.Pełne ujawnienie: nie wszystkie
--inodes
flagi wsparcia systemu operacyjnego dla polecenia du (mój Mac OS nie ma), ale wiele systemów Linux obsługuje .źródło