Dlaczego zwykle nie można zmieniać rozmiaru tabeli i-węzłów?


19

Systemy plików Unix zwykle mają tabelę i-węzłów, a liczba wpisów w tej tabeli jest zwykle ustalana w momencie tworzenia systemu plików. Czasami prowadzi to do tego, że ludzie z dużą ilością miejsca na dysku otrzymują mylące komunikaty o braku wolnego miejsca, a nawet po tym, jak odkryją, na czym polega problem, nie ma łatwego rozwiązania, co z tym zrobić.

Wydaje się jednak (dla mnie), że bardzo pożądane byłoby uniknięcie całego tego bałaganu poprzez przydzielanie i-węzłów na żądanie, całkowicie transparentnie użytkownikom i administratorom systemu. Jeśli lubisz słodkie hacki, możesz nawet sprawić, że sama tabela i-węzłów będzie plikiem, a tym samym ponownie użyjesz kodu, który już znajduje wolne miejsce na dysku. Jeśli masz szczęście, możesz nawet skończyć z i-węzłami w pobliżu samych plików, bez wyraźnej próby osiągnięcia tego wyniku.

Ale nikt (o którym wiem) tak naprawdę tego nie robi, więc prawdopodobnie brakuje mi haczyka. Wiesz, co to może być?


4
Właśnie wymyśliłeś główny katalog plików i indeks plików-11 w VMS, prekursorze głównej tabeli plików w NTFS.
JdeBP,

Wymyśliłem na nowo prekursor MFT? Chłodny!
Mark VY

Odpowiedzi:


26

Powiedzmy, że zrobiłeś tabelę i-węzłów plikiem; następne pytanie brzmi ... gdzie przechowujesz informacje o tym pliku? Potrzebne byłyby zatem „prawdziwe” i-węzły i „rozszerzone” i-węzły, takie jak tablica partycji MS-DOS. Biorąc pod uwagę, potrzebujesz tylko jednego (a może kilku - np., Aby twój dziennik był plikiem). Ale tak naprawdę miałbyś specjalne przypadki, inny kod. Jakiekolwiek uszkodzenie tego pliku byłoby również katastrofalne. I zastanów się, że przed zapisaniem w dzienniku często zapisywano pliki, np. Gdy moc uległa znacznemu uszkodzeniu. Twoje operacje na plikach musiałyby być o wiele bardziej niezawodne w porównaniu do awarii zasilania / awarii / itp. niż na np. ext2.

Tradycyjne systemy plików uniksowe znalazły prostsze (i bardziej niezawodne) rozwiązanie: wstawianie bloku i-węzła (lub grupy bloków) co X bloków. Następnie znajdziesz je za pomocą prostej arytmetyki. Oczywiście nie można dodać więcej (bez restrukturyzacji całego systemu plików). I nawet jeśli zgubisz / uszkodzisz blok i-węzła, do którego pisałeś, gdy nastąpiła awaria zasilania, traci to tylko kilka i-węzłów - znacznie lepiej niż znaczna część systemu plików.

Bardziej nowoczesne projekty wykorzystują rzeczy takie jak warianty B-drzewa . Nowoczesne systemy plików, takie jak btrfs, XFS i ZFS, nie cierpią na ograniczenia i-węzłów.


2
Kiedy mówisz „nie cierpisz z powodu ograniczeń i-węzłów”, czy to oznacza, że ​​nowe i-węzły są przydzielane całkowicie za kulisami, czy też ktoś musi uruchomić polecenie takie jak „rozwinąć tabelę-teraz-proszę”?
Mark VY,

3
@ MarkVY całkowicie za kulisami (jeśli i-węzły są naprawdę w ogóle używane).
derobert,

Okej, więc moja wiedza najwyraźniej jest daleko w tyle. Dziękuję za szczegółową odpowiedź. Nigdy nie myślałem o tym, co stanie się w przypadku utraty zasilania lub podobnego. Więc mój słodki hack jest dość niebezpieczny, chyba że „dołącz do pliku” jest już operacją atomową w systemie plików. Który, jak twierdzisz, był dość rzadki w dawnych czasach.
Mark VY,

Pamiętam XFS i btrfs bardzo rzadko cierpiący na łagodne uszkodzenie systemu plików - także ZFS? Dla niektórych nie jest to ryzyko, ale może to być ryzyko dla ważnych danych i kosztu dynamicznej alokacji. W przypadku XFS w tym sklepie problemem zerwania umowy była całkowita niezdolność do zmniejszenia systemu plików w jakikolwiek sposób.
user2066657

Btrfs może nie cierpieć z powodu ograniczeń i-węzłów, ale cierpi z powodu zupełnie innej usterki, która powoduje podobnie mylące objawy (w zasadzie brakuje miejsca na metadane, wciąż mając dużo miejsca na dane, z powodu nieefektywnego wykorzystania grup bloków). Powoduje to nie tylko zgłaszanie błędów zapełnienia dysku, gdy dfzgłasza dużo dostępnego miejsca, ale nie można tego naprawić przez usunięcie plików, ponieważ usunięcie pliku wymaga przydzielenia miejsca na metadane.
Mark

17

Wiele systemów plików ma dynamicznie alokowaną tabelę i-węzłów (lub jej moralny odpowiednik) (XFS, BTRFS, ZFS, VxFS ...)

Oryginalny uniksowy UFS miał jednak i-węzły, które zostały naprawione w czasie tworzenia systemu plików, a systemy plików z niego pochodzące (Linux EXT, Solaris UFS) często kontynuowały ten schemat. Jest solidny i łatwiejszy do wdrożenia. Tak wiele przypadków użycia jest dobrze dopasowanych, że zaprojektowanie nowego systemu plików, aby uniknąć tego jednego problemu, nie jest łatwe do uzasadnienia.


Jednak ludzie osiągnęli tak duży postęp w rozwiązywaniu problemów, które nie są łatwe do uzasadnienia.
user253751

2
Ale także duży postęp w niełatwych do rozwiązania rozwiązaniach :) Wczesne „złożone” systemy plików - NT NT ery NT, reiserfs - miały katastrofalną
awarię,

6

Istnieją systemy plików, które dynamicznie przydzielają i-węzły: z góry mojej głowy działają przynajmniej Veritas VxFS (= domyślny system plików HP-UX i jedna z opcji dostępnych w Solarisie) oraz XFS (standardowy typ systemu plików w RHEL 7) w ten sposób. Btrfs i JFS IBM również.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.