I filesystem journaling garantiscono la corruzione dopo un'interruzione di corrente?


Risposte:


21

Non ci sono garanzie Un file system di journaling è più resistente ed è meno soggetto alla corruzione, ma non immune.

Tutto un diario è un elenco di operazioni che sono state recentemente eseguite sul file system. La parte cruciale è che la registrazione prima nota viene effettuata prima delle operazioni. La maggior parte delle operazioni prevede più passaggi. L'eliminazione di un file, ad esempio, potrebbe comportare l'eliminazione della voce del file nel sommario del file system e quindi contrassegnare i settori sull'unità come liberi. Se succede qualcosa tra i due passaggi, un file system con journal può dirlo immediatamente ed eseguire la pulizia necessaria per mantenere tutto coerente. Questo non è il caso di un file system senza journal che deve cercare l'intero contenuto del volume per trovare errori.

Mentre questo journaling è molto meno incline alla corruzione rispetto al non journaling, la corruzione può ancora verificarsi. Ad esempio, se il disco rigido non funziona in modo meccanico o se le scritture sul giornale stesso non funzionano o vengono interrotte.

La premessa di base del journaling è che la scrittura di una registrazione prima nota è in genere molto più rapida rispetto alla transazione effettiva descritta. Quindi, il periodo tra il sistema operativo che ordina una scrittura (journal) e il disco rigido che lo compie è molto più breve rispetto a una normale scrittura: una finestra più stretta in cui le cose vanno male, ma c'è ancora una finestra.

Ulteriori letture


Potresti per favore approfondire un po 'il perché questo è vero? Forse potresti dare un esempio di come potrebbe verificarsi la corruzione in un determinato scenario.
Nathan Osman,

1
@ George Edison Vedi la mia risposta estesa.
Andrew Lambert,

2
L'ultimo bit non è corretto; non c'è finestra per le cose che vanno male. Dal momento che registra cosa sta per fare prima di iniziare a farlo, l'operazione può essere riavviata dopo l'interruzione di corrente, indipendentemente dal punto in cui si verifica durante l'operazione. È una questione di ordine, non di tempismo.
psusi,

@psusi c'è ancora una finestra per l'interruzione della scrittura sul diario. Le scritture di giornali possono apparire atomiche sul sistema operativo, ma sono ancora scritture sul disco.
Andrew Lambert,

5
@Sono stupiti che siano atomici perché hanno numeri di sequenza e / o checksum, quindi la voce del diario è scritta interamente o no. Se non è interamente scritto, viene semplicemente ignorato dopo il riavvio del sistema e non sono state apportate ulteriori modifiche a fs in modo che rimanga coerente.
psusi

18

No.

Il tipo di journaling più comune, chiamato journaling dei metadati, protegge solo l'integrità del file system, non dei dati. Ciò include xfse ext3/ ext4nella data=orderedmodalità predefinita .

Se un file system senza journaling subisce un arresto anomalo, verrà verificato utilizzando fsckall'avvio successivo. fsckesegue la scansione di tutti gli inode sul file system, cercando i blocchi contrassegnati come utilizzati ma non raggiungibili (ovvero senza nome file) e li contrassegna come inutilizzati. Fare questo richiede molto tempo.

Con un file system di journaling dei metadati, invece di eseguirne uno fsck, sa quali blocchi era nel mezzo del cambiamento, quindi può contrassegnarli come liberi senza cercarli nell'intera partizione.

Esiste un tipo di journaling meno comune, chiamato journaling dei dati, che è ciò che ext3fa se lo si monta con l' data=journalopzione.

Tenta di proteggere tutti i tuoi dati scrivendo non solo un elenco di operazioni logiche, ma anche l'intero contenuto di ogni scrittura sul diario. Ma poiché sta scrivendo i tuoi dati due volte, può essere molto più lento.

Come altri hanno sottolineato, anche questa non è una garanzia, perché il disco rigido avrebbe potuto dire al sistema operativo che aveva archiviato i dati, quando in realtà era ancora nella cache del disco rigido.

Per ulteriori informazioni, dai un'occhiata all'articolo Wikipedia File System Journaling e alla sezione Modalità dati della documentazione ext4 .


1
+1 per la distinzione tra corruzione del file system e corruzione dei dati. Quella piccola distinzione è piuttosto faticosa in pratica.
SplinterReality,

Scusa la mia totale ignoranza, ma data=journalcome caratteristica non ha alcun senso?
Boehj,

Ancora una volta, il sistema operativo sa quando l'unità memorizza nella cache i dati e li costringe a svuotarli quando necessario al fine di mantenere un fs coerente. Il tuo file di dati, ovviamente, può essere perso o danneggiato se l'applicazione che lo stava scrivendo in caso di interruzione dell'alimentazione non lo stava facendo con attenzione, e questo vale anche se usi data = journal.
psusi

@psusi Non importa come attento il programma è in scrittura dei dati, un sacco di dischi rigidi in silenzio danneggiare i dati sulla lettura stackoverflow.com/q/34141117/3338098
user3338098

@ user3338098, i drive che corrompono silenziosamente i dati sono orribilmente rotti e non dovrebbero mai essere usati, e sono una conversazione completamente diversa dalla corruzione causata dal software che fa la cosa sbagliata.
psusi,

8

Un filesystem non può garantire la coerenza del suo filesystem se si verifica un'interruzione di corrente, perché non sa cosa farà l'hardware.

Se un disco rigido esegue il buffering dei dati per la scrittura ma comunica al sistema operativo che ha scritto i dati e non supporta le barriere di scrittura appropriate, possono verificarsi scritture fuori servizio in cui una scrittura precedente non ha colpito il piatto, ma una successiva ha. Vedi questa risposta predefinita del server per maggiori dettagli.

Inoltre, la posizione della testa su un HDD magnetico è controllata con elettromagneti. Se il potere si interrompe nel mezzo di una scrittura, è possibile che alcuni dati continuino a essere scritti mentre le teste si muovono, corrompendo i dati su blocchi che il filesystem non ha mai pensato di essere scritto.


Il firmware dell'unità non è abbastanza intelligente da sospendere la scrittura quando si ritrae la testa?
Nathan Osman,

@George: dipenderà dall'unità. C'è molto là fuori e non sai quanto bene il tuo disco (economico) fa le cose.
Camh,

1
Il disco rigido indica al sistema operativo se utilizza una cache write-behind e il sistema operativo adotta misure per garantire che vengano scaricate nell'ordine corretto. Inoltre, le unità sono progettate in modo tale che quando l'alimentazione si interrompe, smettono di scrivere. Ho visto alcuni casi in cui il settore in fase di scrittura al momento della perdita di potenza diventa corrotto perché non ha finito di aggiornare l'ecc (ma può essere facilmente riscritto correttamente), ma non ho mai sentito parlare di settori casuali danneggiati dalla perdita di potenza.
psusi,

3

ZFS, che è vicino ma non esattamente un filesystem journaling, garantisce in modo progettuale contro la corruzione dopo un'interruzione di corrente.

Non importa se una scrittura in corso viene interrotta nel mezzo in quanto in tal caso, il suo checksum sarà sicuramente errato, quindi il blocco verrà ignorato. Poiché il file system viene copiato in scrittura, i dati corretti (o metadati) precedenti sono ancora presenti sul disco e verranno invece utilizzati.


2

La risposta è nella maggior parte dei casi no:

  • Come già detto da mikel , la maggior parte dei file system di journaling può proteggere solo i metadati dei file (informazioni come il nome di un file, le sue dimensioni, le sue autorizzazioni, ecc.), Non i dati dei file (il contenuto del file). Ciò accade perché la protezione dei dati dei file provoca un file system molto lento (praticamente inutile).
  • Poiché il journal è anche un tipo speciale di file archiviato sul disco rigido, può essere danneggiato dopo un'interruzione di corrente. Pertanto, se il journal è danneggiato, il file system non può completare le transazioni incomplete che si stavano verificando quando si è verificata un'interruzione di corrente.

Quali eventi potrebbero portare a un diario corrotto? L'unica cosa a cui potevo pensare erano i settori danneggiati: c'è qualcos'altro?
Nathan Osman,

Esatto, i guasti hardware sono il solito caso.
sakisk,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.