51 05/04/2026 07/04/2026 8 min

Cos’è un inode

In Linux, un inode è la struttura dati che rappresenta un file nel filesystem. Non contiene il nome del file: contiene i metadati e i riferimenti ai blocchi di dati. Il nome è solo un’etichetta nella directory, mentre l’inode è l’identità reale dell’oggetto file.

Quando un processo apre un file, il filesystem risolve prima il nome, poi segue il puntatore all’inode e da lì accede ai dati. Per questo due nomi diversi possono puntare allo stesso inode: sono due hard link allo stesso contenuto.

Cosa memorizza un inode

Un inode conserva informazioni essenziali per il filesystem:

  • tipo di file
  • permessi e bit speciali
  • UID e GID del proprietario
  • dimensione del file
  • timestamp di accesso, modifica e cambio metadati
  • numero di link
  • puntatori ai blocchi dati

In pratica, l’inode dice chi è il file, come si accede e dove sono i dati. Il nome, invece, vive nella directory che lo contiene.

Nome del file e inode non sono la stessa cosa

Questo è il punto che confonde più spesso. Se fai:

ls -li

vedi il numero inode associato a ogni nome. Quel numero è l’identificatore interno del file nel filesystem. Se rinomini il file, il nome cambia ma l’inode resta lo stesso. Se sposti il file dentro lo stesso filesystem, anche qui l’inode in genere resta invariato: cambia solo la voce di directory che lo punta.

Se invece copi il file, di solito ottieni un nuovo inode, perché la copia è un nuovo oggetto con nuovi metadati e nuovi blocchi dati.

Perché gli inode sono importanti

Gli inode diventano cruciali in diagnostica e amministrazione. I casi tipici sono questi:

  • spazio disco esaurito: puoi avere ancora spazio libero ma finire gli inode disponibili
  • hard link: più nomi puntano allo stesso contenuto
  • file cancellati ma ancora aperti: lo spazio non si libera finché il processo non chiude l’inode
  • permessi e ownership: dipendono dall’inode, non dal nome
  • filesystem danneggiato: i problemi spesso emergono a livello di inode prima che a livello di file “visibile”

In hosting e server Linux, capire gli inode è utile soprattutto quando i sintomi sono strani: disco “pieno” senza grandi file visibili, log che continuano a crescere anche dopo il delete, oppure file che sembrano spariti ma occupano ancora spazio.

Numero di inode e capacità del filesystem

Ogni filesystem ha una quantità finita di inode. Su filesystem come ext4, il numero di inode viene in larga parte deciso al momento della creazione del filesystem. Questo significa che puoi esaurire gli inode anche se hai ancora gigabyte liberi.

La situazione tipica è un server con milioni di file piccoli: cache, maildir, sessioni, log frammentati, file temporanei. In questi casi il limite non è lo spazio in blocco, ma il numero di inode disponibili.

Per verificare la situazione:

df -i

L’output mostra inode totali, usati e liberi per ogni filesystem. Se la percentuale di uso inode è alta, il problema è reale anche se df -h mostra spazio libero.

Hard link: più nomi, stesso inode

Un hard link è un secondo nome che punta allo stesso inode. Non è una copia: è lo stesso file visto da due percorsi diversi.

Con un hard link:

  • modificare un nome modifica il contenuto visto dall’altro
  • cancellare un nome non elimina i dati finché esiste almeno un altro link
  • il contatore dei link nell’inode scende solo quando elimini un nome

Puoi verificarlo con:

ls -li file1 file2

Se il numero inode è identico, i due nomi puntano allo stesso oggetto. Il campo dei link, spesso mostrato da ls -l, indica quanti nomi rimangono associati a quell’inode.

Attenzione: gli hard link funzionano solo all’interno dello stesso filesystem. Non puoi creare un hard link tra filesystem diversi.

Soft link e inode

Il symlink è diverso: non punta allo stesso inode del file target, ma è un file separato con un proprio inode che contiene il percorso di destinazione.

Quindi:

  • un hard link = stesso inode del file originale
  • un symlink = inode distinto che contiene un path

Questo dettaglio è importante quando fai troubleshooting. Se cancelli il target di un symlink, il link rimane ma diventa rotto. Se cancelli un hard link, il contenuto resta accessibile tramite gli altri nomi.

File cancellati ma ancora aperti

Uno dei casi più comuni in produzione è questo: cancelli un file di log enorme, ma lo spazio non torna libero. Il motivo è che il processo lo ha ancora aperto. Il nome è sparito dalla directory, ma l’inode è ancora referenziato dal processo.

Per vedere i file eliminati ma ancora aperti puoi usare:

lsof | grep deleted

Finché il processo mantiene aperto il descrittore, il filesystem non può liberare i blocchi associati all’inode. La soluzione è riavviare o far ruotare correttamente il processo che tiene aperto il file, non semplicemente fare rm.

Inode, directory e lookup dei file

Le directory in Linux sono file speciali che contengono associazioni tra nomi e inode. Quando digiti un percorso, il kernel attraversa la gerarchia delle directory, cerca il nome in ogni directory e ottiene il relativo inode. Da lì accede ai dati.

Questo spiega perché:

  • rinominare un file è in genere un’operazione veloce
  • spostare un file nello stesso filesystem spesso è rapido
  • la cancellazione rimuove il riferimento nella directory, non necessariamente i dati subito

Il filesystem decide poi quando liberare davvero i blocchi, in base al numero di link e ai riferimenti aperti.

Comandi utili per lavorare con gli inode

I comandi più pratici sono questi:

ls -li

Mostra il numero inode accanto ai file.

stat file

Mostra inode, dimensione, permessi, ownership e timestamp.

df -i

Mostra l’utilizzo degli inode per filesystem.

find /path -inum 123456

Cerca i file che corrispondono a un inode specifico.

find /var/log -type f -size +100M

Non usa direttamente gli inode, ma aiuta a individuare file che consumano spazio e meritano verifica con stat o ls -li.

Con find -inum puoi anche scovare hard link multipli allo stesso oggetto, utile quando devi capire perché un file “cancellato” sembra ancora presente altrove.

Inode e spazio occupato

Un inode non corrisponde a una quantità fissa di byte di dati utente. È una struttura di metadati. I file piccoli, però, possono consumare comunque un inode ciascuno, anche se occupano pochissimo spazio reale su disco.

Questo porta a due tipi di saturazione:

  • spazio blocchi pieno: non hai più byte disponibili
  • inode pieni: non puoi più creare nuovi file, anche se lo spazio c’è

In ambienti con tante piccole entità, come mail server, repository con molte migliaia di file, cache applicative o sistemi di logging aggressivi, il secondo caso è spesso quello che blocca tutto per primo.

Come si interpreta un inode in pratica

Quando analizzi un file, l’inode ti aiuta a capire se stai guardando lo stesso oggetto da due nomi diversi, se il file è stato realmente sostituito o solo rinominato, e se il filesystem ha abbastanza capacità per nuovi oggetti.

Un esempio tipico:

stat /var/log/app.log

Se ruoti il log e l’app continua a scrivere sul vecchio inode, il file nuovo resta vuoto mentre il vecchio continua a crescere sotto un nome ormai eliminato. È un caso classico di rotazione log fatta male o processo non ricaricato.

Altro esempio: un deploy che sostituisce un binario o un file di configurazione può lasciare processi con file ancora aperti sul vecchio inode. Il contenuto in uso non cambia finché il processo non riapre il file.

Limiti e differenze tra filesystem

Il concetto di inode è comune, ma l’implementazione varia. ext4, XFS, btrfs e altri filesystem gestiscono inode e metadati in modo diverso. Cambiano la distribuzione dei metadati, la crescita, la gestione dello spazio e alcune caratteristiche operative.

Quello che non cambia è il ruolo concettuale: l’inode resta l’identità del file nel filesystem, mentre la directory associa nomi a identità.

Per questo, quando fai troubleshooting su Linux, ragionare in termini di inode è spesso più preciso che ragionare solo in termini di path.

Quando ti serve davvero pensarci

Non serve guardare gli inode ogni giorno, ma devi averli presenti quando vedi uno di questi segnali:

  • filesystem pieno senza file grandi evidenti
  • log che non liberano spazio dopo la cancellazione
  • molti file piccoli e creazione di nuovi file che fallisce
  • comportamenti strani dopo rename, rotate o deploy
  • hard link usati per compatibilità o ottimizzazione

In questi casi, il numero inode, il numero di link e i file aperti dal processo sono spesso l’indizio giusto per arrivare alla causa.

In sintesi operativa

L’inode è il record che descrive un file in Linux. Il nome del file è solo una voce di directory; l’inode contiene i metadati e i riferimenti ai dati. Capire questa separazione aiuta a diagnosticare spazio disco, hard link, file cancellati ma ancora aperti, rotazione log e saturazione di filesystem con tanti file piccoli.

Se devi fare una verifica rapida, i tre comandi più utili sono ls -li, stat e df -i. Da lì capisci subito se stai guardando lo stesso inode, se i link sono più di uno e se il filesystem ha ancora inode disponibili.

Assunzione: ho trattato inode in ottica Linux su filesystem tradizionali, con esempi pratici validi per diagnostica e amministrazione standard.

FAQ veloce sugli inode

Un inode contiene il nome del file?
No. Il nome sta nella directory, non nell’inode.

Rinominare un file cambia inode?
Di norma no, cambia solo la voce di directory.

Eliminare un file libera subito spazio?
Solo se non ci sono altri link e nessun processo lo tiene aperto.

Posso finire gli inode anche con spazio libero?
Sì. È un problema comune con molti file piccoli.

Hard link e symlink sono la stessa cosa?
No. L’hard link punta allo stesso inode, il symlink è un file separato con un path dentro.