Wstęp
Inode czyli index node to identyfikator (numer) określający metadane pliku lub katalogu. Metadane to po prostu dodatkowe informacje (zazwyczaj nieistotne z punktu widzenia użytkownika, jednak niezbędne dla systemu operacyjnego Unix/Linux, by zarządzać danymi na nośnikach pamięci).
Metadane zawierają informacje takie jak:
- Rozmiar pliku
- Nośnik, na którym plik jest przechowywany
- Użytkownik i grupa powiązana z plikiem
- Uprawnienia powiązane z plikiem
- Czas utworzenia, modyfikacji pliku
- Lokalizacja danych (nie jest to nazwa pliku!)
Metadane nie zawierają informacji o:
- nazwie pliku nadanej przez użytkownika
- samych danych w pliku (wprowadzonych przez użytkownika)
Przykład
W celu analizy metadanych utwórzmy plik o nazwie test.txt, który zawiera tekst "abc":
echo abc > test.txt
By wyświetlić index node, czyli numer identyfikujący metadane należy do polecenia ls dodać flagę -i, natomiast flaga -l wyświetli dodatkowe informacje o pliku) np.:
ls -li
W wyświetlonym rezultacie widać, że plik posiada przypisany inode o numerze 264912. Otrzymaliśmy też informacje o dacie utworzenia, rozmiarze itp.
264912 drwxr-xr-x 1 myuser mygroup 4 Jan 13 2024 test.txt
Używając polecenia stat można wyświetlić bardziej szczegółowe metadane:
stat test.txt
Rezultatem jest:
Informacje/metadane informują o organizacji pliku na nośniku danych.
W celu znalezienia pliku powiązanego z danym inode należy wydać polecenie:
find -inum 264912
Szczegóły
Nigdzie w w poprzednim zrzucie ekranowym nie pojawił się tekst "abc" stanowiący zawartość pliku, a to dlatego, że metadane określane przez inode zawierają jedynie informacje o rozmiarze pliku czy też organizacji danych w pamięci, a nie samych danych użytkownika.
Dane na dysku
magazynowane są w postaci bloków o stałym rozmiarze. Jeśli plik
przekracza rozmiarem wielkość bloku to system operacyjny znajdzie
kolejny wolny segment, na którym zmagazynuje pozostałe dane.
Co więcej inode również jest strukturą o stałym rozmiarze (zobacz poniżej tablicę adresową i podsumowanie). Struktura inode może zawierać bezpośrednie wskaźniki do bloków danych pliku, ale także pośrednie wskaźniki, które są używane w przypadku, gdy rozmiar pliku przekracza pewną ilość danych, które można przechowywać bezpośrednio w samym inode.
Indirect pointer/indirect block (wskaźnik/blok
pośredni) to mechanizm, w którym inode zawiera wskaźnik do kolejnej
struktury danych, która z kolei zawiera wskaźniki do fizycznych bloków
danych pliku. W ten sposób można dynamicznie alokować pamięć na dane
pliku w miarę potrzeb, gdy plik rośnie.
Podsumowanie
Rozmiar inode w systemie Linux zależy od używanego systemu plików. Na przykład, dla systemu ext4, domyślny rozmiar inode wynosi 256 bajtów. Jednak w zależności od konkretnych ustawień systemu plików i potrzeb, rozmiar ten może być dostosowywany podczas tworzenia systemu plików. większy rozmiar inode umożliwia przechowywanie większej ilości metadanych bezpośrednio w strukturze inode, co może być korzystne w niektórych przypadkach.
Aby otrzymać informację o rozmiarze inode (oraz rozmiarze bloku i innych szczegółowych informacjach) w Twoim systemie plików (w tym przypadku zlokalizowanym na /dev/sda1) wykonaj polecenie tune2fs:
sudo tune2fs -l /dev/sda1
Rezultat:
Powodzenia!