Czym jest inode i jak przeglądać metadane?

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.

Źródło

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!

#buymeacoffee