Inode (czyli index node) to struktura danych systemu plików, która trzyma wszystkie metadane pojedynczego pliku poza jedną rzeczą: jego nazwą. W inode znajdziesz właściciela (UID), grupę (GID), uprawnienia, typ pliku, rozmiar w bajtach, znaczniki czasu (atime, mtime, ctime), licznik dowiązań twardych oraz wskaźniki do bloków danych na dysku. Sama treść pliku leży gdzie indziej – inode mówi tylko, gdzie jej szukać.
Najczęstsze zaskoczenie dla początkujących: nazwa pliku nie jest w inode. Nazwa żyje we wpisie katalogu (directory entry), który mapuje tekst w stylu raport.txt na numer inode. Katalog to w praktyce tabela par „nazwa → numer inode”. Dlatego ten sam plik może mieć kilka nazw w różnych miejscach – to właśnie hard linki, które wskazują na ten sam inode. Plik znika z dysku dopiero wtedy, gdy licznik dowiązań spadnie do zera i nikt go już nie trzyma otwartego.
Jak to działa w praktyce
Każdy plik dostaje unikalny numer inode w obrębie swojego systemu plików. Liczbę inode’ów ustala się przy tworzeniu systemu plików (np. mkfs.ext4) i zwykle jest ona stała. To prowadzi do klasycznej pułapki: możesz mieć mnóstwo wolnego miejsca, a system i tak krzyczy No space left on device, bo skończyły Ci się inode’y. Dzieje się tak na serwerach z milionami malutkich plików – cache, sesje PHP, kolejki mailowe.
Sprawdzisz to szybko. df -i pokaże zużycie inode’ów na każdym systemie plików, a ls -i plik wypisze numer inode danego pliku. Chcesz pełen zrzut metadanych? stat raport.txt pokaże Ci inode, uprawnienia, rozmiar i wszystkie trzy znaczniki czasu naraz. Gdy szukasz pożeracza inode’ów, find /var -xdev -printf '%h\n' | sort | uniq -c | sort -n podpowie, który katalog ma najwięcej plików.
Częste mity i pułapki
- „Usunąłem plik, więc miejsce się zwolniło” – niekoniecznie. Jeśli jakiś proces trzyma plik otwarty, inode i jego bloki żyją do zamknięcia deskryptora. Stąd sztuczki w stylu
lsof | grep deleted. - Numer inode nie jest globalny – jest unikalny tylko w obrębie jednego systemu plików. Dwa pliki na różnych partycjach mogą mieć ten sam numer.
- Skopiowanie pliku tworzy nowy inode, ale
mvw obrębie tej samej partycji zachowuje stary – zmienia tylko wpis w katalogu.
Warto kojarzyć inode z pojęciami: hard link i symlink (ten drugi to osobny plik wskazujący na ścieżkę, nie na inode), dentry (wpis katalogu), systemy plików ext4, XFS czy Btrfs, oraz VFS – warstwa jądra Linuksa, która ujednolica dostęp do różnych systemów plików. Gdy zrozumiesz inode, połowa „magii” Linuksa przestaje być magią.