Возможность записи на диск недолговечных файлов зависит не только от поведения файлового кэша ядра по умолчанию, но также от деталей реализации драйвера файловой системы и параметров монтирования указанной файловой системы. Можно настроить систему таким образом, чтобы все всегда было немедленно записано на диск (по сути, DOS-подобное поведение).
Одна файловая система, в которой заметно интересующее вас поведение (так называемое «отложенное размещение») - это XFS. С его помощью вы можете быть более или менее уверены (если в другом месте нет забавных вариантов конфигурации), что блоки, принадлежащие только что удаленным файлам, будут повторно использоваться в памяти без промежуточного доступа к диску. XFS может по-прежнему хотеть обновить свой журнал метаданных (который будет записываться на диск довольно часто; тем не менее, учитывая, что журнал XFS является только метаданными, он достаточно мал, чтобы быть установленным на каком-то другом быстром устройстве, например, на найденном ОЗУ с резервным питанием от батареи). на многих RAID контроллерах).
Из-за этого поведения весьма часто можно найти полностью обнуленные, но в остальном законно выглядящие файлы (размер и другие метаданные без изменений) в файловой системе XFS после внезапного отключения питания. Такова стоимость поддержки быстрых «временных» файловых операций.
Немного теории
В общем, системный вызов, обращающийся к файловой системе, довольно быстро завершается в методе, определяемом драйвером файловой системы (присоединяется к «struct inode_operations» и «struct file_operations», когда VFS-драйвер зарегистрирован). То, что происходит после этого, остается исключительно на усмотрение реализации файловой системы. Обычно используется нечто похожее на следующий подход (этот простой пример взят из драйвера Linux FAT):
if (IS_DIRSYNC(dir))
(void)fat_sync_inode(dir);
else
mark_inode_dirty(dir);
Если файловая система смонтирована в режиме синхронизации, все изменения немедленно отправляются на диск (в данном случае через fat_sync_inode ()). В противном случае блок помечается как «грязный» и остается в кэше памяти, пока не будет сброшен при некоторой разумной возможности.
Таким образом, невозможно предсказать поведение системы в отношении временных файлов без учета параметров монтирования файловой системы и проверки исходного кода ее реализации (это, конечно, в основном относится ко всем видам экзотических файловых систем, в основном находящихся во встроенном пространстве). ,