ext4 e fsync(2)
Ted Ts'o ovviamente ha ragione, finché fsync(2) non è stata completata non c'è nessuna garanzia che un file sia stato scritto.
D'altra parte, ext3 normalmente (cioè se si usa il journaling con data=ordered) garantisce che se si scrive un file temporaneo e lo si sposta sull'originale con rename(2) questa sia una operazione atomica e in caso di crash ci si ritrovi con il vecchio o il nuovo file ma comunque integri, e spesso ci si fa conto anche se non bisognerebbe.
A chi scrive programmi che riscrivono un file dopo averlo aperto e troncato invece posso solo dire che ogni perdita di dati sarà giusta, ovvia e meritata.
Il suo workaround mi sembra un ottimo compromesso, qui c'è la spiegazione dettagliata: 1, 2, 3.