LINUX.ORG.RU

OutOfOrderFS - утилита для экспериментов с реакцией ФС на сбои

 , ,


0

3

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|


Последнее исправление: vi0 (всего исправлений: 3)

У меня тоже есть такая утилита — сдохшая батарейка в ноуте и битый адаптер питания.
Каждый раз — эксперимент: сколько строк кода я потеряю, если неудачно двину ногой?

mersinvald ★★★★★
()

Круто, надо погонять

false ★★★★★
()

OutOfOrderFS - утилита для экспериментов с реакцией ФС на сбои

Поздравляю, ты изобрёл XFS

devl547 ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

ты автор этой утилиты?

Да:

Моя утилита позволяет

--------------------

Оно работает через FUSE?

Метки: filesystem, fuse, rust

vi0
() автор топика
Ответ на: комментарий от RiseOfDeath

Оно работает через FUSE?
Она, случайно, не на расте написана? :)

Для порядку: это, случайно, не файловая система? =)

t184256 ★★★★★
()
Ответ на: комментарий от t184256

Это, случайно, не файловая система?

Собственно файловой системой OutOfOrderFS назвать нельзя (там только один файл фиксированного размера). Тег filesystem, потому что утилита предназначена для тестирования других ФС.

vi0
() автор топика
Ответ на: комментарий от devl547

ты изобрёл XFS

Этой байке 100 лет в обед - я гонял XFS 3 года назад с опцией barrier на некритичном серваке где не было ИБП - хоть бы 1 файл потерял, но нет.

А в RHEL 7 XFS вообще дефолт

Pinkbyte ★★★★★
()
Ответ на: комментарий от t184256

Это, скорее, будет virtual block device. Может, красивее было бы это делать через BUSE, а не FUSE, но я пока не пробовал BUSE и не знаю как там с работой не из-под рута.

vi0
() автор топика
Ответ на: комментарий от t184256

CUSE - это Character device in USEr space. Главная фишка - поддержка ioctl. Используется для эмуляции OSS (/dev/sound, /dev/mixer).

BUSE - Block device in USEr space. Для чего это используется я пока не знаю, просто видел в make nconfig.

vi0
() автор топика

OutOfOrderFS - утилита для экскрементов.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.