Capire funzionamento file di Log, e I-node

Darèios89
Ho dei dubbi, praticamente ho letto che il file system prima di eseguire delle operazioni scrive un file di log su disco, se le operazioni saranno effettuate con successo poi sarà rimosso, altrimenti al ripristino del sistema operativo il file system andrà a leggere il file di log e se qualche operazione non è stata effettuata saprà da dove riprendere il lavoro e continuare. Fin qui è corretto? Ora la domanda è, quindi cosa contiene questo file di log? Perchè su wikipedia ho letto che contiene le operazioni che non sono ancora state completate, ma questo implica che NON contiene eventuali errori?
Quanto agli I-node, le directory hanno un puntatore ad un I-node secondo il metodo hard-link, ma dov' è contenuto? la directory ha un puntatore ad un blocco del disco che contiene l' inode, che eventualmente viene messo in memoria se un file viene usato da un programma?

I'm...confused.... :(

Risposte
claudio862
Non so esattamente per quali operazioni il (driver del) filesystem scriva nel log (o journal), ma dovrebbe funzionare come il log delle transazioni nei database. Per ogni operazione viene scritto sul log prima di iniziarla e dopo averla completata. Se avviene un errore si legge il log dalla fine all'inizio "smontando" le operazioni incomplete. Gli errori non vengono scritti nel log delle transazioni (ma è buona cosa scriverli in qualche altro log). Dovresti trovare una spiegazione dettagliata su un libro di basi di dati.

Ad esempio, spostare un file:

log("Sposto file da /fileA a /fileB");

log("Creo /fileB");
create_file("/fileB");
log("Creato /fileB");

log("Copia /fileA in /fileB");
copy_file("/fileA", "/fileB");
log("Copiato /fileA in /fileB");

log("Elimino /fileA");
delete_file("/fileA");
log("Eliminato /fileA");

log("Spostato file da /fileA a /fileB");

Se avviene un errore durante la copia del file l'ultima voce del log è "Copia /fileA in /fileB", quindi il filesystem può riprendere da lì. Oppure può risalire il log annullando le operazioni precedenti (cioè creare /fileB).
Se invece non si verificano errori il log può essere rimosso (magari in seguito, quando il disco è inutilizzato, tanto le operazioni sono segnate come complete).

Credo che la maggior parte dei filesystem usino di default il log delle transazioni solo per le operazioni sui metadati e non sui dati.
Se avviene un errore mentre si scrivono dati in un file, il suo contenuto diventa incoerente (es. è stata sovrascritta la prima metà con dati nuovi ma la seconda metà contiene dati vecchi). Però tutti gli altri file restano corretti.
Se però l'operazione modifica i metadati, cioè la struttura stessa del filesystem (es. aggiungere o togliere blocchi ad un file), in caso di errore è il filesystem stesso che diventa incoerente. Questo è un problema molto più grave, perché nelle prossime operazioni il driver del filesystem potrebbe danneggiare anche altri file.


Sugli i-node passo, non lo so.

Darèios89
Ti ringrazio :)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.