i-węzeł - inode

I- węzeł (węzeł indeksu) to struktura danych w systemie plików w stylu Uniksa, która opisuje obiekt systemu plików, taki jak plik lub katalog . Każdy i-węzeł przechowuje atrybuty i lokalizacje bloków dyskowych danych obiektu. Atrybuty obiektów systemu plików mogą obejmować metadane (czasy ostatniej zmiany, dostępu, modyfikacji), a także dane właściciela i uprawnienia .

Katalog to lista i-węzłów z przypisanymi im nazwami. Lista zawiera wpis dla siebie, jego rodzica i każdego z jego dzieci.

Etymologia

Na liście dyskusyjnej jądra Linuksa pojawiła się niepewność co do przyczyny „i” w „i-węzle”. W 2002 roku pytanie zostało zadane pionierowi Uniksa Dennisowi Ritchiemu , który odpowiedział:

Prawdę mówiąc, ja też nie wiem. To był tylko termin, którego zaczęliśmy używać. "Indeks" to moje najlepsze przypuszczenie, ze względu na nieco niezwykłą strukturę systemu plików, która przechowywała informacje dostępowe do plików w postaci płaskiej tablicy na dysku, z wszystkimi hierarchicznymi informacjami katalogowymi poza tym. W ten sposób i-number jest indeksem w tej tablicy, i-węzeł jest wybranym elementem tablicy. (Zapis „i-” był używany w podręczniku 1. wydania; jego myślnik był stopniowo usuwany).

Artykuł Ritchiego i Kena Thompsona z 1978 r. podtrzymuje pojęcie „indeksu” jako etymologicznego pochodzenia i-węzłów. Oni napisali:

[…] wpis w katalogu zawiera tylko nazwę powiązanego pliku i wskaźnik do samego pliku. Ten wskaźnik jest liczbą całkowitą zwaną numerem i (dla numeru indeksu) pliku. Gdy plik jest otwierany, jego numer i jest używany jako indeks do tabeli systemowej ( i-list ) przechowywanej w znanej części urządzenia, na której znajduje się katalog. Odnaleziony w ten sposób wpis ( i-węzeł pliku ) zawiera opis pliku.

Dodatkowo Maurice J. Bach napisał, że i-węzeł „jest skróceniem terminu węzeł indeksu i jest powszechnie używany w literaturze na temat systemu UNIX”.

Detale

Deskryptory plików , tablica plików i tablica i-węzłów w systemie Unix

System plików opiera się na strukturach danych dotyczących plików, a nie na zawartości tego pliku. Te pierwsze nazywane są metadanymi — danymi opisującymi dane. Każdy plik jest powiązany z i- węzłem , który jest identyfikowany przez liczbę całkowitą, często określaną jako i-numer lub numer i- węzła .

I-węzły przechowują informacje o plikach i katalogach (folderach), takie jak własność pliku, tryb dostępu (uprawnienia do odczytu, zapisu, wykonywania) i typ pliku. W wielu starszych implementacjach systemu plików maksymalna liczba i-węzłów jest ustalana podczas tworzenia systemu plików, co ogranicza maksymalną liczbę plików, które system plików może przechowywać. Typowa heurystyka alokacji dla i-węzłów w systemie plików to jeden i-węzeł na każde 2K bajtów zawarte w systemie plików.

Numer i-węzła indeksuje tablicę i-węzłów w znanej lokalizacji na urządzeniu. Z numeru i-węzła sterownik systemu plików jądra może uzyskać dostęp do zawartości i-węzła, łącznie z lokalizacją pliku, umożliwiając w ten sposób dostęp do pliku. Numer i-węzła pliku można znaleźć za pomocą ls -ipolecenia. ls -iKomenda drukuje numer i-węzła w pierwszej kolumnie raportu.

Niektóre systemy plików w stylu Uniksa, takie jak ReiserFS , btrfs i APFS , pomijają tabelę i-węzłów o stałym rozmiarze, ale muszą przechowywać równoważne dane, aby zapewnić równoważne możliwości. Dane mogą być nazwane danymi stat, w odniesieniu do stat wywołania systemowego, które dostarcza dane do programów. Typowe alternatywy dla tabeli o stałym rozmiarze obejmują drzewa B i pochodne drzewa B+ .

Nazwy plików i implikacje katalogów:

  • I-węzły nie zawierają swoich twardych linków, tylko inne metadane plików.
  • Katalogi uniksowe są listami struktur asocjacyjnych, z których każda zawiera jedną nazwę pliku i jeden numer i-węzła.
  • Sterownik systemu plików musi przeszukać katalog w poszukiwaniu określonej nazwy pliku, a następnie przekonwertować nazwę pliku na odpowiedni odpowiedni numer i-węzła.

Reprezentacja tych danych struct inodew jądrze systemu operacyjnego jest wywoływana w systemie Linux . Systemy wywodzące się z BSD używają tego terminu vnode("v" odnosi się do warstwy wirtualnego systemu plików jądra ).

Opis i-węzła POSIX

Standard POSIX nakazuje zachowanie systemu plików, na które duży wpływ mają tradycyjne systemy plików UNIX . I-węzeł jest oznaczony frazą „numer seryjny pliku”, zdefiniowany jako unikalny identyfikator pliku w systemie plików. Ten numer seryjny pliku, wraz z identyfikatorem urządzenia zawierającego plik, jednoznacznie identyfikuje plik w całym systemie.

W systemie POSIX plik posiada następujące atrybuty, które mogą być odczytane przez statwywołanie systemowe:

  • Identyfikator urządzenia (identyfikuje urządzenie zawierające plik; czyli zakres unikalności numeru seryjnego).
  • Numery seryjne plików.
  • Plik tryb , który określa typ pliku i jak właściciel pliku, jego grupa, a inni mogą uzyskać dostępu do pliku.
  • Link count wiadomo ilu twarde linki wskazują na węzła.
  • User ID właściciela pliku.
  • ID grupy pliku.
  • Identyfikator urządzenia pliku, jeśli jest to plik urządzenia .
  • Rozmiar pliku w bajtach .
  • Znaczniki czasu informujące o ostatniej modyfikacji samego i-węzła ( ctime , czas zmiany i-węzła ), ostatniej modyfikacji zawartości pliku ( mtime , czas modyfikacji ) i ostatnim dostępie ( atime , czas dostępu ).
  • Preferowany rozmiar bloku we/wy.
  • Liczba bloków przydzielonych do tego pliku.

Implikacje

Systemy plików zaprojektowane z i-węzłami będą miały następujące cechy administracyjne.

  • Pliki mogą mieć wiele nazw. Jeśli wiele nazw łączy się na stałe z tym samym i-węzłem, wówczas nazwy są równoważne; tj. pierwszy, który ma zostać utworzony, nie ma specjalnego statusu. W przeciwieństwie do dowiązań symbolicznych , które zależą od oryginalnej nazwy, a nie od i-węzła (numeru).
  • I-węzeł może nie mieć łączy. Odłączony plik jest usuwany z dysku, a jego zasoby są zwalniane do ponownej alokacji, ale usuwanie musi poczekać, aż wszystkie procesy, które go otworzyły, zakończą dostęp do niego. Obejmuje to pliki wykonywalne, które są niejawnie utrzymywane jako otwarte przez procesy je wykonujące.
  • Zazwyczaj nie jest możliwe odwzorowanie otwartego pliku na nazwę pliku, która została użyta do jego otwarcia. System operacyjny natychmiast konwertuje nazwę pliku na numer i-węzła, a następnie odrzuca nazwę pliku. Oznacza to, że funkcje biblioteczne getcwd() i getwd() przeszukują katalog nadrzędny w celu znalezienia pliku z i-węzłem pasującym do katalogu roboczego , a następnie przeszukują katalog nadrzędny tego katalogu i tak dalej aż do osiągnięcia katalogu głównego . Systemy SVR4 i Linux przechowują dodatkowe informacje, aby było to możliwe.
  • Historycznie możliwe było tworzenie twardych linków do katalogów. To sprawiło, że struktura katalogów stała się dowolnym grafem skierowanym w przeciwieństwie do skierowanego grafu acyklicznego . Możliwe było nawet, aby katalog był swoim własnym rodzicem. Nowoczesne systemy generalnie zabraniają tego mylącego stanu, z wyjątkiem tego, że rodzic roota nadal jest zdefiniowany jako root. Najbardziej godny uwagi wyjątek od tego zakazu znajduje się w systemie Mac OS X (wersja 10.5 i nowsze), który umożliwia tworzenie twardych łączy katalogów przez administratora.
  • Numer i-węzła pliku pozostaje taki sam, gdy jest on przenoszony do innego katalogu na tym samym urządzeniu lub gdy dysk jest defragmentowany, co może zmienić jego fizyczną lokalizację, umożliwiając przenoszenie i zmianę nazwy nawet podczas odczytu i zapisu bez powodowania przerw . Oznacza to również, że całkowicie zgodne zachowanie i-węzła jest niemożliwe do zaimplementowania w wielu nieuniksowych systemach plików, takich jak FAT i jego potomkowie, które nie mają sposobu na przechowywanie tej niezmienności, gdy zarówno wpis katalogu pliku, jak i jego dane są przenoszone .
  • Instalacja nowych bibliotek jest prosta dzięki systemom plików i-węzłów. Uruchomiony proces może uzyskać dostęp do pliku biblioteki, podczas gdy inny proces zastępuje ten plik, tworząc nowy i-węzeł, a dla nowego pliku będzie istniało całkowicie nowe mapowanie, dzięki czemu kolejne próby uzyskania dostępu do biblioteki otrzymają nową wersję. Ta funkcja eliminuje potrzebę ponownego uruchamiania w celu zastąpienia aktualnie mapowanych bibliotek.
  • Możliwe, że w urządzeniu zabraknie i-węzłów. W takim przypadku nie można utworzyć nowych plików na urządzeniu, mimo że może być dostępne wolne miejsce. Jest to najbardziej powszechne w przypadkach użycia, takich jak serwery pocztowe, które zawierają wiele małych plików. Systemy plików (takie jak JFS lub XFS ) unikają tego ograniczenia dzięki ekstentom lub dynamicznej alokacji i-węzłów, które mogą „rozrastać” system plików lub zwiększać liczbę i-węzłów.

Inlining

Sensowne może być przechowywanie bardzo małych plików w samym i-węźle, aby zaoszczędzić miejsce (nie jest potrzebny blok danych) i czas wyszukiwania (nie jest potrzebny dalszy dostęp do dysku). Ta funkcja systemu plików nosi nazwę inline. W przypadku nowoczesnych systemów plików nie można już dłużej zakładać ścisłej separacji danych i-węzłów i plików.

Jeśli dane pliku mieszczą się w przestrzeni przeznaczonej na wskaźniki do danych, można wygodnie wykorzystać tę przestrzeń. Na przykład ext2 i jego następcy przechowują dane dowiązań symbolicznych (zwykle nazwy plików) w ten sposób, jeśli dane nie przekraczają 60 bajtów ("szybkie dowiązania symboliczne").

Ext4 ma opcję systemu plików o nazwie, inline_dataktóra pozwala ext4 na wykonywanie inline, jeśli jest włączona podczas tworzenia systemu plików. Ponieważ rozmiar i-węzła jest ograniczony, działa to tylko dla bardzo małych plików.

W systemach nieuniksowych

  • NTFS ma główną tabelę plików (MFT) przechowującą pliki w B-drzewie. Każdy wpis ma „fileID”, analogiczny do numeru i-węzła, który jednoznacznie odnosi się do tego wpisu. We wpisie znajdują się trzy znaczniki czasu, identyfikator urządzenia, atrybuty, liczba odwołań i rozmiary plików, ale w przeciwieństwie do POSIX, uprawnienia są wyrażane przez inny interfejs API. Układ na dysku jest bardziej złożony. Wcześniejsze systemy plików FAT nie miały takiej tablicy i nie były w stanie tworzyć twardych dowiązań .
    • NTFS ma również koncepcję wstawiania małych plików do wpisu MFT.
    • Pochodny ReFS ma homologiczną MFT. ReFS ma 128-bitowy identyfikator pliku; to rozszerzenie zostało również przeniesione do NTFS, który pierwotnie miał 64-bitowy identyfikator pliku.
  • Ten sam interfejs API GetFileInformationByHandle podobny do statystyk może być używany w woluminach udostępnionych klastra i SMB 3.0 , więc te systemy prawdopodobnie mają podobną koncepcję identyfikatora pliku.

Zobacz też

Bibliografia

Linki zewnętrzne