[Tech] Re: File System Ext2 (+pippo story)

Gianni Casalini gianni@elenet.it
Lun 18 Mar 2002 15:20:40 CET


On Thursday 14 March 2002 06:29, you wrote:

> Date: Thu, 14 Mar 2002 00:04:28 +0100
> From: Gabriele Grilli <grilligab@tiscalinet.it>

Ciao Gabriele, mi ha fatto piacere leggere la tua risposta e trovo 
ottima l'idea di farne una dispensa.  
Ti scrivo alcuni appunti, molto poco tecnici, li metto qui in lista, 
ma se sono un problema te li mando in privato... dipende un po' dagli 
umori di tech :) Ho avuto poco tempo e non ti ho potuto rispondere 
prima.

PRE-prologo
Quando si scrive bisogna sapere per chi si scrive. Mescolare tipi di 
lettori porta a non scrivere niente di utile per nessuno.
A mio moooodestissimo avviso il problema delle dispense linux (non 
tutte intendiamoci) che si trovano in giro e' questo: nella prima 
parte dicono cose "banali" o estremamente intuitive, ad un certo 
punto c'e' uno stacco e, anche all'interno dello stesso discorso, 
introducono dei concetti (tramite dei termini) di cui si ignora tutto 
e di cui non e' stato precedentemente data nessuna definizione.
"Tanto c'e' sempre un link che lo spiega" non mi sembra un bel modo 
di scrivere. Questo e un punto di vista di un lettore a proposito 
dell'argomento dispense.


> 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.

"Serve", cosa e' uno strumento? Una serie di regole... cioe' un 
protocollo? Un pezzo di hardware? Anche il meccanismo che modifica 
fisicamente il supporto magnetico serve a questo, ma non credo che 
sia un FS...
"Utilizza delle strutture dati"....?

> (Su questo ci sono delle dispense del corso reperibili dal sito).

<SCHERZOSO MODE> 
  Ma avevi intenzione di scriverne una nuova?
</SCHERZOSO MODE>

> 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).

... te usi la parola "struttura" (secondo me inflazionata) , per 
struttura si intende: il modo in cui le singole parti di un qualcosa 
sono disposte e ordinate tra loro per costruire un qualche sistema...
Meglio per me sarebbe dire che struttura e' l'insieme delle relazioni 
tra singole parti che costituiscono un sistema, cioe' le relazioni 
che portano ad un ordine di complessita' maggiore. Magari ci sono 
altre definizioni migliori.
Dire che "un INode e' la struttura..." di sicuro e' corretto, ma se 
uno viene da win. scappa mentalmente al calduccio delle sue icone. 
Poi da quello che scrivi (se applico il significato alla parola 
"struttura") otterrei: 

"Un INode e' un insieme di relazioni [tra quali termini?], del FS 
EXT2, 'dedita' [una struttura dedita?] a memorizzare le informazioni 
di ciascuna "entita' file" (EF) -che giustamente definisci dopo-

Prova a sostituire la definizione di FS che hai dato prima a 'FS' 
all'interno del discorso...

> 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.

Un'informazione e' la notizia di una differenza. 
L'unita' fondamentale dell'informazione e' il bit.
L'insieme dei bit costituisce l'unita' informazionale o file...e 
cosi' via.
...Gregory Bateson, mi sembra in: 'Mente e Natura'... non ce l'ho 
sotto mano.
Nell'informazione tutto e' un file. Unix e' rigoroso rispetto alle 
teorie, gli altri creano metafore piu' o meno fruibili dal pubblico 
(o mi sbaglio?).

> 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.

Mi piacerebbe capire le seguenti questioni:

1. Le cose che definisci sono in qualche luogo fisico o sono 
strutture logiche? Se sono strutture logiche rimandano a qualche 
luogo fisico? (prima o poi di sicuro).
2. DOVE si trovano le cose che definisci.
La nostra realta' e' definita in termini di spazio e tempo. Se dico 
"in Italia piove" o faccio poesia o dico cose poco significative... 
per un calcolatore, invece, mi accontento di sapere "dove" si trovano 
le informazioni e che relazioni possono creare con altre 
informazioni. Il tempo che ci mettono, ad essere processate, come 
utente dico, non e' che mi interessi molto.

In base a quanto detto io ho capito che l'INode e'un "record" di un 
database che mi rimanda al file vero e proprio (o EF).
La sua carta di identita', il suo indirizzo ect.
Per quello che hai detto per me l'INode e' un "file" che manda ad un 
altro file. 
Dal penultimo punto intuisco che l'EF si trova fisicamente da qualche 
parte e che il sistema (o il FS? O qualche applicazione del FS?) non 
saprebbe dove pescarla se non si leggesse un bell'INode... ma forse 
sbaglio, correggimi

> 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.

Quanti sono gli inode? Da quello che dici capisco che ci sono molti 
file e pochi INode... pero' questo contrasta con la relazione 1-1... 
Non ha senso parlare dell'INode del file pippo.txt?
Forse gli INode possono essere visualizzati come il centro di una 
raggiera e all'estremita' dei raggi ci sono i file? Il raggio sarebbe 
la relazione e se lo guardo dal punto di vista dei file e' 1-1 se lo 
guardo dal punto di vista dell'INode e' 1-N.
Allora se "perdo" (non so se si possono perdere o cancellare o 
distruggere perche' ancora non ho capito di cosa sono fatti) un INode 
non trovo piu' la strada per N file?
Quello che c'e' di confuso, per me, e' che definisci un comportamento 
senza definire il soggetto. Magari in informatica e' perfettamente 
lecito, pero' non e' intuitivo per niente. Metti in conto che sono 
anche duro, ma sai i "principianti" lo sono, in qualche modo.

> 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.

INode liberi e occupati? File liberi o occupati?

> Questo implica che abbiamo una limitazione nel FS data dal numero
> massimo di INode

Questo cosa? Il fatto che indichi quali sono liberi e quali occupati, 
implica questa limitazione?

> 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.

File?
Cosa intendi per "in base alla bitmap degli INode?

> 3) spazio dati : spazio riservato alla memorizzazione di dati.

Quali dati?

> 4) Un SuperBlock che e' una tabella a sua volta contenente, fra i
> vari campi,
> l'INode della directory "/"

Il SuperBlock non ho mai capito che fosse, mi sembrerebbe strano 
cominciare ora.

Hai citato 4 strutture. Un INode e' formato di queste? Gli INode le 
formano? Insomma che c'incastrano con gli INode. Mi sfugge la 
gerarchia.

> Quello che vorrei sottolineare e' che ogni INode ha gli indirizzi
> dei blocchi contenenti le informazioni
> dell'EF 

HA gli indirizzi dei blocchi contenenti le informazioni o E' 
costituito dagli indirizzi dei blocchi contenenti le informazioni?

>e percio' l'INode puo' accedere a tali informazioni che,
> possono essere viste come sequenza di byte.

come tutte le informazioni

> 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

Scusa, ma secondo me un file di testo non usa tali informazioni, e' 
tali informazioni. Senno' non ho capito per niente cosa si intende 
per file.

> 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:

Una directory e' un file, no? Non capisco il verbo "usare" qua 
dentro... l'utente (o utilizzatore) interroga, processa, "apre" tali 
informazioni. Una directory contiene, e'... Correggimi. 

> <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.

Una curiosita', <Nome EF1>; <Nome EF2> sono cio' che appare sullo 
schermo: "."; ".."? E, magari, <Nome EF3> e' proprio: pippo.txt?

> 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.

Nei casi delle prime due voci?

[...]

> 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.
Hai tutto il mio incoraggiamento.
ciao

Gianni C.

PS una proposta: risulterebbe molto didattico il seguire la "vita" di 
un file (tipo pippo.txt), dalla creazione alla sua posizione a... 
tutto quello che puo' succedere a quel file. In fondo la storia di 
pippo.txt e' la storia di ogni file :)





Maggiori informazioni sulla lista flug-tech