Простой эксперимент с помощью ext4:
Создайте изображение 100 МБ...
# dd if=/dev/zero of=image bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0533049 s, 2.0 GB/s
Сделайте это циклическим устройством...
# losetup -f --show image
/dev/loop0
Сделайте файловую систему и смонтируйтесь...
# mkfs.ext4 /dev/loop0
# mount /dev/loop0 /mnt/tmp
Сделайте некоторое выполнение с недолгими файлами. (Измените это на любой метод, который Вы предпочитаете.)
for ((x=0; x<1000; x++))
do
(echo short-lived-content-$x > /mnt/tmp/short-lived-file-$x
sleep 1
rm /mnt/tmp/short-lived-file-$x ) &
done
Umount, синхронизация, нецикл.
# umount /mnt/tmp
# sync
# losetup -d /dev/loop0
Проверьте содержимые изображения.
# strings image | grep short-lived-file | tail -n 3
short-lived-file-266
short-lived-file-895
short-lived-file-909
# strings image | grep short-lived-content | tail -n 3
В моем случае это перечислило все имена файлов, но ни одно из содержания файла. Таким образом, только содержание не было записано.
Если Вы не говорите о твердотельном диске, высокое количество записей на диск не будут доминирующим фактором в долговечности диска.
Если Вы действительно хотите избежать записей на диск вообще, изучите tmpfs,
Как правило, нет, они не будут записаны. Это вызвано тем, что грязные страницы очисток кэша, когда одно из двух условий встречены:
Данные в возрасте после /proc/sys/vm/dirty_writeback_centisecs
, какие значения по умолчанию к 5 секундам.
Существует слишком мало памяти для кэша для содержания данных, больше, чем dirty_ratio
грязные страницы в кэше (значения по умолчанию к 20%).
Таким образом в системе с большим количеством свободной памяти и небольшого трафика записи кроме Ваших маленьких файлов, которые удалены меньше чем за 5 секунд, данные не будут сброшены.
Записаны ли недолгие файлы в диск или не зависят не только от поведения по умолчанию кэша файла ядра, но также и в деталях реализации драйвера файловой системы, и смонтируйте опции упомянутой файловой системы. Возможно настроить систему таким способом, которым все будет всегда сразу записываться к диску (по существу, подобное DOS поведение).
Одна файловая система, заметно показывая поведение, которым Вы интересуетесь (так называемое "задержанное выделение") является XFS. С ним можно быть более или менее уверены (учитывая никакие забавные параметры конфигурации в другом месте), что блоки, принадлежащие просто удаленным файлам, будут снова использованы в памяти без промежуточного доступа к диску. XFS может все еще хотеть обновить свой журнал метаданных (который будет писаться в диск скорее часто; все же, учитывая, что журнал XF является метаданными только, это является достаточно маленьким, чтобы быть установленным на некотором другом, быстром устройстве, таком как RAM с аварийным батарейным питанием, найденная на многих RAID-контроллерах).
Из-за этого поведения весьма распространено найти полностью обнуленным, но в других отношениях законно выглядящие файлы (размер и другие метаданные неповрежденный) в файловой системе XFS после внезапного прерывания подачи питания. Такова стоимость поддержки быстрых "полувременных" операций файла.
Некоторая теория
В целом системный вызов, получающий доступ к файловой системе, заканчивается, скорее быстро, в определенном методе драйвера файловой системы (присоединенный к "структуре inode_operations" и "структуре file_operations", когда драйвер VFS регистрируется). Что происходит, после этого оставлен только усмотрению реализации файловой системы. Как правило, что-то напоминающее следующий подход используется (этим простым примером является из Linux драйвер FAT):
if (IS_DIRSYNC(dir))
(void)fat_sync_inode(dir);
else
mark_inode_dirty(dir);
Если файловая система смонтирована в "синхронизирующем" режиме, все изменения сразу переходят к диску (через fat_sync_inode () в этом случае). Иначе блок отмечен как "грязный" и остается в кэше памяти, пока не сброшено в некоторой разумной возможности.
Таким образом невозможно предсказать поведение системы относительно переходных файлов, не полагая, что файловая система монтирует опции и осмотр исходного кода его реализации (это, конечно, главным образом относится ко всем видам экзотических файловых систем, главным образом найденных во встроенном пространстве).
sync
опция. Я никогда не делал бы этого.
– Wu Yongzheng
22.08.2013, 08:51
nbd
и зарегистрируйте трафик (или похожий метод трассировки всех записей). – frostschutz 23.08.2013, 23:33