https://github.com/vi/outoforderfs
Насколько я понимаю, при внезапном отключении носителя могут потеряться недавно записанные блоки, при чём из-за всяких кэшей потеря может затронуть не самый последний, а более ранний блок (при этом более поздний запишется).
Моя утилита позволяет поэкспериментировать с такими потерями. Запись каждого блока откладывается на случайное количество миллисекунд. При прерывании утилиты не успевшие записаться блоки пропадают (то есть остаются старыми, как до записи).
outoforderfs файл_с_образом_ФС файл_точка_монтирования размер_блока максимальная_задержка_в_миллисекундах максимальное_число_задержанных_блоков
# dd if=/dev/zero bs=4096 count=1000 of=sf.dat
# yes | mkfs.ext4 sf.dat
# touch mp.dat
# outoforderfs sf.dat mp.dat 4096 20000 10000000 &
[1] 9317
# mkdir -p m
# mount -t ext4 -o loop mp.dat m/
# yes | nl > m/test.txt
^C
# umount m
# kill %%
#
352 dirty blocks lost
[1]+ Done outoforderfs sf.dat mp.dat 4096 20000 10000000
# mount -o loop -t ext4 sf.dat m/
# ls -lh m/test.txt
-rw-r--r-- 1 root root 2.7M Mar 20 23:53 m/test.txt
# hd m/test.txt | grep -m 2 '00 00 00' -C 2
000013e0 35 36 36 09 79 0a 00 00 00 00 00 00 00 00 0a 20 |566.y. 567.y. |
000013f0 00 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 00 | 568.y. 569.y|
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000000 00 00 00 00 30 09 79 0a 00 00 00 00 00 00 00 00 | 1480.y. 1481.y|
--
000063e0 0a 00 00 00 00 00 00 00 00 0a 20 20 32 38 34 33 |. 2842.y. 2843|
000063f0 09 79 0a 00 00 00 00 00 00 00 00 0a 20 20 32 38 |.y. 2844.y. 28|
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000000 00 00 00 0a 00 00 00 00 00 00 00 00 0a 20 20 33 |0.y. 3301.y. 3|