Qualche tempo fa, si è discusso di ext4 che potenzialmente lasciava file vuoti dopo uno smontaggio impuro, riassunto abbastanza bene in questo articolo . Fondamentalmente, a causa dell'allocazione ritardata, le scritture possono essere conservate nella cache di scrittura per un tempo molto più lungo dell'intervallo di commit predefinito del journal ext (5 secondi).
I problemi sembrano essere stati risolti in una patch che forza l'allocazione dei blocchi in determinate situazioni, forzando i dati su disco dopo al massimo 5 secondi per impostazione predefinita.
Mi chiedo cosa succede quando un'applicazione sovrascrive parti esistenti di un file, senza troncare o aggiungere il file stesso. Sarà forzato anche su disco entro 5 secondi?
Sembra una situazione diversa rispetto all'aggiunta a un file: quando si aggiunge, la dimensione del file cambia, che è una modifica dei metadati; pertanto, entro 5 secondi sarà necessario un commit del journal e, a causa dei dati = ordinati, i dati dovranno essere scritti prima a causa di problemi di sicurezza (altrimenti parti del file cancellati di altri utenti potrebbero essere mostrate al proprietario dell'aggiunta file).
Quando si sovrascrive solo i dati del file, non vi è alcun motivo per cui la scrittura dei dati debba avvenire prima del commit del journal dei metadati, poiché i vecchi dati appartengono allo stesso utente di quello nuovo. Quindi la scrittura avviene prima del commit o può essere ritardata più a lungo dell'intervallo di commit del journal? In tal caso, per quanto tempo?
Aggiornamento: so che tutto ciò è irrilevante quando si fa la cosa giusta, cioè usando fsync (). (Questo è stato il motivo principale di tutte le discussioni su ext4 e la perdita di dati - il problema riguardava solo le applicazioni non fsync () ing, o non nei momenti giusti.) Non sto scrivendo la mia applicazione, chiedo perché non so se tutte le mie applicazioni fanno la cosa giusta, e voglio sapere un lasso di tempo approssimativo per tali scritture "pericolose". Il motivo per cui mi viene chiesto è che il mio driver grafico causi regolarmente il panico del kernel e voglio sapere se devo preoccuparmi di più degli ultimi 5 secondi di scrittura dei dati.