4.6.2 I file

In generale, un file contiene delle informazioni (data) ed è caratterizzato da alcune proprietà, come il tipo, la dimensione, i permessi di accesso, ..., ovvero quelli che vengono denominati metadati (metadata). Il filesystem ext2 memorizza i metadati di un file in un’apposita struttura, detta index node, o più comunemente inode, mentre le informazioni contenute nel file sono memorizzate nei blocchi, denominati anche data block.

Ogni inode ha la struttura riportata nella sez. 4.6.1 ed il numero degli inode è fissato alla creazione del filesystem (per default viene creato un inode ogni 4096 byte disponibili nella partizione considerata). Quando tutti gli inode saranno utilizzati (allocati) da altrettanti file, non sarà più possibile creare altri file anche se ci sono data block liberi.

In un inode ext2 vengono memorizzati i metadati di un file, tra cui

La dimensione massima di un file è la minore tra quella consentita dal filesystem e quella consentita dal kernel. Infatti, su architetture a 32 bit, le system call messe a disposizione dal kernel per l’accesso al filesytem utilizzano parametri esprimibili su 32 bit, e quindi possono gestire file con dimensioni inferiori o uguali a 231 - 1 = 2 147 483 647 byte (2 GiB). Con il kernel 2.4 (o successivo) è stato implementato il LFS (Large File Support), ovvero sono state messe a disposizione delle nuove system call per l’accesso al filesystem che utilizzano parametri esprimibili su 64 bit, e quindi, teoricamente, il kernel non ha problemi a gestire file di dimensioni fino a 263 - 1 = 9 223 372 036 854 775 807 byte (circa 8 EiB), per cui il limite della dimensione massima dei file dipende essenzialmente dal filesystem.

È da notare il fatto che tra i metadati di un inode non c’è il nome del file, in quanto esso viene memorizzato soltanto all’interno della directory che lo contiene (cioè nei data block relativi all’inode della directory che lo contiene). Questo permette la gestione degli hard link (v. sez. 4.6.3.3).

In un inode del filesystem ext2 sono memorizzati particolari flag (o attributi) che specificano appositi comportamenti di cui il sistema deve tenere di conto per tale inode (ognuno di essi è memorizzato in un bit del campo i_flags). Tali flag sono descritti di seguito

Tali flag possono essere gestiti per mezzo dei comandi lsattr (list attributes - man page lsattr(1)) e chattr (change attributes - man page chattr(1)).

____________________________________________________________________

Comando: lsattr
Path: /usr/bin/lsattr

SINTASSI  
$ lsattr [option] [file_name]  
DESCRIZIONE

Visualizza gli attributi di un inode del filesystem ext2.

____________________________________________________________________________________________________________________

___________________________________________________________________________________________________________________

Comando: chattr
Path: /usr/bin/chattr

SINTASSI  
$ chattr [option] file_name  
DESCRIZIONE

Modifica gli attributi di un inode del filesystem ext2.

____________________________________________________________________

In particolare, i flag Append only e Immutable possono rivelarsi utili come difesa contro eventuali malintenzionati che possono intrufolarsi nel sistema.

Generalmente un filesystem memorizza il contenuto di un file in un numero intero di blocchi, quindi se un file contiene una quantità di informazioni che non è un multiplo della dimensione di un blocco, parte dello spazio dell’ultimo blocco del file risulta inutilizzato, quindi mediamente si ha lo spreco della metà della dimensione di un blocco per ogni file (ad esempio, per memorizzare un file di 1025 byte in un filesystem in cui la dimensione dei blocchi è 1024 byte, vengono utilizzati 2 blocchi, ovvero 2048 byte, di cui gli ultimi 1023 sono inutilizzati). Per ovviare a tale inconveniente (frammentazione interna), è previsto l’utilizzo di porzioni di blocchi (i fragment), ma questa caratteristica non è attualmente utilizzata.

Il filesystem ext2 riserva alcuni inode per memorizzare informazioni particolari, ad esempio

Il primo inode utilizzato per memorizzare informazioni generiche è il numero 11.