[Tech] File System Ext2

Gabriele Grilli grilligab@tiscalinet.it
Gio 14 Mar 2002 00:04:28 CET


PROLOGO
Un File System (FS) serve per memorizzare delle informazioni su un
supporto e,
per fare cio' utilizza delle strutture dati che memorizza nel supporto
stesso, diviso in blocchi.
(Su questo ci sono delle dispense del corso reperibili dal sito).

FILE SYSTEM EXT2
Quanto indicato di seguito si riferisce al FS EXT2 e quindi non varra'
per gli altri
che utilizzano altre strutture +/- efficienti e generiche.

INODE e Entita' File
Un INode e' la struttura, del FS EXT2, dedita a memorizzare le
informazioni
di ciascuna "entita' file" (EF).

Una "entita' file" e' un file (comunemente detto), una directory, uno
special file oppure
un link, simbolico o fisico. Ho scelto questo termine perche' con file
si intende, troppo spesso,
quegli oggetti che contengono dei dati, escludendo le directory.

In base a quanto detto, l'INode contiene tutte le info relative a
ciascuna EF :
tipo di EF
data di creazione/Modifica,
dimensione,
permessi
indirizzi dei blocchi contenenti le informazioni dell'EF
e altre informazioni.

L'INode e EF sono collegati mediante relazioni,
volendo fare un paragone con i database: le EF stanno in relazione 1-1
con gli INode,
viceversa gli INode stanno in relazione 1-N con le EF questo per dire
che a nomi diversi di
file, per esempio puo' corrispondere lo stesso INode e quindi gli stessi
dati.

A questo punto si puo' fare una panoramica di alcune strutture dati che
servono a EXT2:
1) bitmap degli INode: indica quali sono liberi e quali occupati.
Questo implica che abbiamo una limitazione nel FS data dal numero
massimo di INode
2) Tabella degli INode : contiene le informazioni relative a ciascuna
EF, in base alla
bitmap degli INode possiamo sapere quali sono usati e quali no.
3) spazio dati : spazio riservato alla memorizzazione di dati.
4) Un SuperBlock che e' una tabella a sua volta contenente, fra i vari
campi,
l'INode della directory "/"

Quello che vorrei sottolineare e' che ogni INode ha gli indirizzi dei
blocchi contenenti le informazioni
dell'EF e percio' l'INode puo' accedere a tali informazioni che, possono
essere viste come sequenza di byte.
Tali informazioni quindi possono venire processate in un modo oppure in
un altro a seconda del tipo di EF
a cui l'INode si riferisce.
Un file di testo, usera' tali informazioni come sequenza di caratteri,
spetta all'utilizzatore usare la giusta
applicazione per aprirlo, infatti usando un editor di immagini non si
otterrebbe la semantica corretta
cioe' il giusto significato dei dati.
Una directory usera' tali informazioni, una di seguito all'altra,
secondo lo specifico formato indicato di seguito:
<INode relativo a EF1><Lunghezza del Nome EF1 + 1><Nome EF1>
<INode relativo a EF2><Lunghezza del Nome EF2 + 1><Nome EF2>
<INode relativo a EF3><Lunghezza del Nome EF3 + 1><Nome EF3>
Di solito le prime due voci si riferiscono alle directory "." e ".."
quindi non sono altro che dei collegamenti a se stessi e al padre.
Se noi analizzassimo tali informazioni con un editor di immagini
otterremmo lo stesso risultato errato come nel
caso precedente.
In entrambi i casi modificare tali informazioni porta ad avere dei dati
incomprensibili e, soprattutto nel secondo caso
ad un danneggiamento dei file dentro la directory.

BIBLIOGRAFIA

[1] Per chi vuol sapere tutto --> The Linux Kernel -
http://www.linuxdoc.org/LDP/tlk/tlk.html
[2] Per chi vuole un'infarinatura --> Struttura di un sistema Linux: il
file system ed il kernel  - http://www.ctt.it/linuxware/corsoprog.html



Piu' avanti il discorso proseguira' con la differenza fra Ext2 e VFS,
distinzione fra le varie EF.
Quello che pensavo era di scrivere questi appunti per fare delle
dispense per il sito, relative al corso " Struttura di un
sistema Linux: il file system" dato che ancora manca.






Maggiori informazioni sulla lista flug-tech