Вопрос Является ли создание файла долговечным на ext4?


В некоторых файловых системах при создании файла необходимо вызвать fsync () не только на самом файле, но и в родительском каталоге, чтобы сделать создание файла долговечным. В противном случае запись каталога может потеряться при нечистом отключении; файл inode будет потерян.

Это все еще верно для ext4, или же джорнал позаботится об этом?

Многие приложения (например, vim, как проверено strace), по-видимому, вызывают fsync только в файле. Это безопасно?

Обновление: в совершить 14ece1028b3ed53ffec1b1213ffc6acaf79ad77c к ядру, ext4 изменяется конкретно так, что, с отключенным журналированием, запись родительского каталога автоматически fsync () ed, когда fsync () в самом файле. Но как насчет возможности ведения журнала? Является ли каталог fsync () неявным, поскольку он является частью той же транзакции, что и создание нового индексного дескриптора?


2
2017-09-25 16:18


происхождения




ответы:


Я бы сказал, что «это зависит отчасти», потому что ext4 может изменить параметры своего журнала таким образом, чтобы регистрировались целые файлы или только метаданные, и независимо от того, немедленно ли они выполняются, частично зависит от конфигурации оборудования.

В случае, когда ext4 монтируется с журналированием по меньшей мере метаданных, и подсистема не кэширует записи, я бы посоветовал вам не использовать fsync для каталога.

Однако из Larsson's 'ext4 vs fsync':

Следует отметить, что POSIX и даже ext4 не гарантируют, что файл будет выходить из строя системы даже при использовании fsync.

Не полный ответ, но в блоге, о котором идет речь, подробно рассматриваются проблемы журналирования и потери данных. Хотя не последнее, я считаю, что он по-прежнему представляет статус ext4 сегодня, и его комментарии о том, когда использовать или не использовать fsync, заслуживают внимания.


2
2017-09-25 17:33