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ć?
źródło
Odpowiedzi:
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.
źródło
df
zgł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.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.
źródło
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ż.
źródło