Skôr je to spôsobené tým, že XFS journaluje len metadata (nie dáta samotné). Blok plný núl zrejme znamená, že XFS prealokovalo nejaký nový blok/extent, táto transakcia prebehla, ale už nestihol prejsť samotný zápis (a pôvodné dáta ležia niekde inde na partícii). AFAIK jediný FS, ktorý môže journalovať aj dáta súborov, je ext3 (ordered mode), čo ale zase spôsobí, že sa môže kľudne stať, že bude súbor zapísaný napoly (po hraniciach blokov).
Tento problém sa dá jednak riešiť cez transakčné FS API, ktoré je "z bežných FS" implementované v Reiser4 a NTFS (tuším ešte ZFS?). Teoreticky by niečo podobné bolo jednoducho implementovať do log-structured FS (a la JFFS2), ale tie nie sú vhodné pre bežné (seekovacie) disky.
Typicky sa transakcie na FS riešia copy-on-write s tým, že po uzavrení "user" transakcie (z aplikácie) nasleduje FS-metadata transakcia, ktorá "poprehadzuje pointre" zo starých dát na nové dáta (typicky veľmi rýchle).
Transakčné FS API je fajn...ale prišlo tak neskoro, že to už prakticky skoro nikto nevyužije - pr. databázy si riešia transakcie vo vlastnej réžii. Kto chce, vyrobí si "poor man's transaction" "simuláciou" copy-on-write - všetky súbory zapíšem s novými menami, zmažem staré a premenujem novo zapísané (neni to samozrejme atomické, ale pre bežné desktop aplikácie dostačujúce, plus niektoré aplikácie to fakt tak robia).