Articles

Comprensione dettagliata degli inode Linux con esempio

Linux e altri sistemi operativi Unix-like mantengono la coerenza trattando tutto come un file (anche i dispositivi hardware). La tastiera, il mouse, le stampanti, il monitor, il disco rigido, i processi, anche le directory sono trattati come file in Linux. I file normali contengono dati come testo (file di testo), musica, video (file multimediali), ecc.

Oltre ai dati normali, ci sono altri dati su questi file, come la loro dimensione, proprietà, autorizzazioni, timestamp ecc. Questi metadati relativi a un file vengono gestiti con una struttura dati nota come inode (nodo indice).

Che cos’è un inode in Linux?

Ogni file o directory Linux (da un punto di vista tecnico, non c’è vera differenza tra loro) ha un inode, e questo inode contiene tutti i metadati del file (cioè tutti i dati amministrativi necessari per leggere un file sono memorizzati nel suo inode).

Ad esempio, l’inode contiene un elenco di tutti i blocchi in cui è memorizzato un file, le informazioni sul proprietario per quel file, le autorizzazioni e tutti gli altri attributi impostati per il file.

I limiti di inode sono per filesystem e vengono decisi al momento della creazione del filesystem. La dimensione massima della directory dipende dal filesystem e quindi il limite esatto differisce.

Per migliorare le prestazioni rendere le directory più piccole ordinando i file in sottodirectory piuttosto che avere una directory di grandi dimensioni.

Che cos’è un numero inode?

Il numero inode è anche noto come numero indice. Un inode è un numero univoco assegnato a file e directory durante la creazione. Il numero di inode sarà univoco per l’intero filesystem.

Un inode è una struttura dati su un file system tradizionale in stile Unix come ext3 o ext4. memorizzazione delle proprietà di un file e delle directory.

Linux extended filesystem come ext3 o ext4 mantengono un array di questi inode chiamato inode table. Questa tabella contiene l’elenco di tutti i file in quel filesystem. I singoli inode nella tabella inode hanno un numero univoco (univoco per quel filesystem) chiamato numero inode.

Le seguenti informazioni sono memorizzate in inode:

  • Tipo di file: file regolare, directory, pipe ecc.
  • Permessi per quel file: read, write, execute
  • Link count: Il numero di hard link relativo ad un inode
  • ID Utente: il proprietario del file
  • ID di Gruppo: il gruppo proprietario
  • Dimensione del file: o numero maggiore/minore nel caso di alcuni file speciali
  • indicatore temporale: il tempo di accesso, di modifica e (inode) cambiamento tempo
  • Attributi: immutabile’ per esempio
  • elenco di controllo di Accesso: autorizzazioni per particolari gruppi di utenti
  • Link alla posizione del file
  • Altri metadati relativi al file

si noti che l’inode non memorizza il nome del file, ma il suo contenuto solo.

Diagramma di inode struttura di dati

Come controllare inode in Linux

Se si desidera guardare gli inode, su qualsiasi file system ext è possibile utilizzare comandi qui sotto per controllare le proprietà dei file di sistema e file che sono utilizzati in esso.

a. Visualizza informazioni sui dati del file

È possibile visualizzare i dati inode su un file o una directory utilizzando il comando stat.

È necessario indicare il nome del file come segue:

L’output stat indica i vari timestamp del file, la sua proprietà e le autorizzazioni e dove è memorizzato. I dati del file vengono conservati nel blocco disco, che viene mostrato nell’output del comando stat dell’inode.

Puoi scegliere di elencare solo il numero di inode di un file con l’opzione --format come di seguito:

# stat --format=%i hello530461

b. Stampa il numero indice di file

Il comando ls viene utilizzato per elencare le informazioni sui file e sulle directory. L’opzione -i con ls visualizza il numero di inode di ciascun file. Possiamo combinarlo con-l opzione per elencare le informazioni in dettaglio

# ls -iltotal 140984520170 dr-xrw-rw- 2 linoadmin linoadmin 4096 Mar 9 2013 asciiquarium_1.1263206 -rwxr-xr-x 1 linoadmin linoadmin 15436 Mar 9 2013 asciiquarium.tar.gz519187 drwxr----- 2 root root 4096 Apr 13 01:35-rwSr--r-- 1 root root 5747 Apr 25 01:45 bootstrap655799 drwxr-xr-x 2 root root 4096 May 16 17:46 course528927 drwxr-xr-x 3 root root 4096 Apr 29 00:29 environments

La prima colonna fornisce il numero di inode. È possibile visualizzare l’inode di un particolare file come di seguito:

# ls -i continue.sh 519450 continue.sh

c. Visualizzare le informazioni sullo spazio inode del filesystem

Per impostazione predefinita, il comando df riassume lo spazio su disco disponibile e utilizzato. È invece possibile ricevere un report sugli inode disponibili e utilizzati passando l’opzione-i o--inodes.

Queste informazioni possono essere utili se una partizione ha molti piccoli file, che possono esaurire gli inode disponibili prima di quanto non esauriscano lo spazio disponibile su disco.

d. Elencare il contenuto del filesystem superblock

È possibile utilizzare il comandotune2fs -l per visualizzare tutte le informazioni relative all’inode.

# tune2fs -l /dev/sda6 | grep inodeFilesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isizeFree inodes: 2224350First inode: 11Journal inode: 8First orphan inode: 1575905Journal backup: inode blocks

e. Manipolare i metadati del filesystem

È possibile vedere il contenuto di un inode così come esiste su un file system Ext4 con il comando debugfs. È necessario utilizzare il comando stat disponibile nel debugger del file system per mostrare il contenuto dell’inode. Al termine, utilizzare exit per chiudere l’ambiente debugfs.

Assicurati che i file sul file system non siano accessibili mentre lavori in debugfs. Dovresti considerare di rimontare il file system usandomount -o remount /yourfilesystem

Puoi usare debugfs per ripristinare un file usando il suo inode e indicando un file

Struttura inode per la directory

Come detto sopra, anche le directory in Linux sono trattate come file. Directory è un file speciale che associa un nome di file al suo numero di inode (questa mappatura è chiamata directory entry o dentry). Quindi, quando diciamo che una directory contiene file e altre directory, intendiamo che questa directory sta mappando quei file e directory (le directory sono file speciali, quindi hanno anche bisogno di mappare i loro numeri inode) ai loro numeri inode.

Questo è il motivo per cui una directory non può contenere due file con lo stesso nome, perché non può mappare un nome con due numeri di inode diversi.

# ls -ld test/drwxr-xr-x 3 root root 4096 Apr 13 01:43 test/

Come un file viene mappato al suo inode dalla sua directory principale, quindi come viene mappata la maggior parte della directory, (cioè/ directory) al suo inode? Il numero di inode della directory/ è fisso ed è sempre 2.

Link e numero di indice in Linux

Nell’output di ls -l, la colonna che segue le autorizzazioni e prima del proprietario è il conteggio dei link. Link count è il numero di hard link a un file. Per capire i collegamenti rigidi, iniziamo con i collegamenti. Un collegamento è un puntatore a un altro file.

Nel mondo Linux, esistono due tipi di collegamenti:

a. Collegamenti simbolici (o soft link)

Il collegamento simbolico è un file separato il cui contenuto punta al file collegato. Per creare un collegamento simbolico, utilizzare il comando ln con l’opzione -s. Quando si utilizza il comando ln, assicurarsi di fare prima riferimento al nome del file originale e quindi al nome del collegamento che si desidera creare.

# ln -s /home/bobbin/sync.sh filesync

Qui ‘filesync’ è un collegamento simbolico a ‘sync.sh’. Pensalo come una scorciatoia. Modificare ‘filesync’ è come modificare direttamente il file originale, ma è davvero quello che succede. Se eliminiamo o spostiamo il file originale, il collegamento verrà interrotto e il nostro file ‘filesync’ non sarà più disponibile.

Il comando ls -l mostra che il file risultante è un collegamento simbolico. Questo è indicato dalla lettera l nella prima posizione dell’output ls -l e anche dalla freccia alla fine dell’elenco, che indica il file a cui si riferisce il nome.

# ls -l filesync lrwxrwxrwx 1 root root 20 Apr 7 06:08 filesync -> /home/bobbin/sync.sh

Il contenuto di un collegamento simbolico è solo il nome del file di destinazione. Puoi vedere che le autorizzazioni sul collegamento simbolico sono completamente aperte. Questo perché le autorizzazioni non sono gestite

Quando si confronta il collegamento simbolico e il file originale, si noterà una chiara differenza tra loro.

Il file originale è solo un nome collegato direttamente all’inode e il collegamento simbolico si riferisce al nome. La dimensione del collegamento simbolico è il numero di byte nel nome del file a cui si riferisce, poiché non sono disponibili altre informazioni nel collegamento simbolico.

b. Hard link

Per avere un’idea di cosa sia un hard link, è importante capire che l’identità di un file è il suo numero di inode, non il suo nome. Un hard link è un nome che fa riferimento a un inode. Significa che se’ file1 ‘ha un hard link chiamato’ file2′, allora entrambi questi file si riferiscono allo stesso inode. Quindi, quando crei un collegamento rigido per un file, tutto ciò che fai è aggiungere un nuovo nome a un inode.

Per fare ciò, utilizzare il comando ln senza opzione.

# ls -l /home/bobbin/sync.sh -rw-r----- 1 root root 5 Apr 7 06:09 /home/bobbin/sync.sh
# ln /home/bobbin/sync.sh synchro

Ora confrontiamo i due file

La cosa interessante degli hard link è che non c’è differenza tra il file originale e il link: sono solo due nomi collegati allo stesso inode.

Come devi aver notato, a differenza dei soft link, gli hard link non sono file speciali. Ora, il conteggio dei collegamenti è il numero che un file è stato collegato in modo rigido. Quindi un conteggio dei collegamenti aumenta dopo aver creato un collegamento rigido come puoi vedere nella figura sopra. Questi hard link hanno due limitazioni:

  • Le directory non possono essere collegate in modo rigido. Linux non consente a questo di mantenere la struttura ad albero aciclica delle directory.
  • Non è possibile creare un collegamento fisso tra i filesystem. Entrambi i file devono essere sullo stesso filesystem, perché diversi filesystem hanno diverse tabelle di inode indipendenti (due file su filesystem diversi, ma con lo stesso numero di inode saranno diversi).

Come trovare hard link in Linux

È possibile recuperare tutti i nomi di file che puntano a un numero di inode. Significa che è possibile recuperare hard link perché è l’unico tipo di collegamento in cui possiamo avere alcuni nomi di file che puntano allo stesso contenuto (inode). Si può fare con il -inum opzione di comando trova, come di seguito

# find / -inum 517333/home/bobbin/sync.sh/root/synchro

Con questo, si può sapere a che punto di nomi di file per i dati, così, di recuperare tutti gli hard link relativo a un determinato numero di inode

Linux operazioni con i file e la sua relazione con gli inode

la Maggior parte delle operazioni (come ad esempio la copia) eseguita su un soft link, viene alterato il file collegato (con l’eccezione di rm o mv comandi, che rimuovere (o spostare) i soft link)

Qui ci sono alcune operazioni di file in cui gli inode giocare il loro ruolo fondamentale:

un. copia file

Quando copiamo un file, viene creato un nuovo file con un nuovo inode.

# cp myfile ..
# ls -li myfile ../myfile2501 -rw------- 1 raghu raghu 36 Jun 25 20:12 myfile3746 -rw------- 1 raghu raghu 36 Jan 11 12:05 ../myfile

b. sposta file

Quando si sposta su file system, il comando mv procede come comando cp sopra, con l’eccezione che il file originale viene rimosso dalla sua posizione. Ma quando si sposta all’interno di un filesystem, l’inode non cambia, viene modificata solo la mappatura della directory dell’inode, i dati effettivi sul disco rigido (contenuto del file) non si muovono.

# ls -li samplefile.txt2497 -rw------- 1 raghu raghu 22 Jun 25 20:12 samplefile.txt

Ora spostiamo il file e controlliamo il risultato

# mv samplefile.txt ..
# ls -li ../samplefile.txt2497 -rw------- 1 raghu raghu 22 Jun 25 20:12 ../samplefile.txt

c. rimuovi i file

Quando viene emesso il comando rm, prima controlla il conteggio dei collegamenti del file. Se il conteggio dei collegamenti è maggiore di 1, rimuove quella voce della directory e diminuisce il conteggio dei collegamenti. Tuttavia, i dati sono presenti, né l’inode è interessato. E quando il conteggio dei collegamenti è 1, l’inode viene eliminato dalla tabella inode, il numero inode diventa libero e i blocchi di dati che questo file stava occupando vengono aggiunti all’elenco dei blocchi di dati gratuiti.

# ls -li myfile myfile.hardlink2501 -rw------- 2 raghu raghu 36 Jun 25 2012 myfile2501 -rw------- 2 raghu raghu 36 Jun 25 2012 myfile.hardlink

Eliminiamo il file e controlliamo il risultato

# rm myfile.hardlink
# ls -li myfile2501 -rw------- 1 raghu raghu 36 Jun 25 2012 myfile

Puoi vedere che il numero di inode è diminuito.

Conclusione

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *