Какие операции метаданных файловой системы фактически записываются в журнале ext4 & xfs?

9

Я не могу найти простой, прямой ответ о том, какие операции метаданных файловой системы фактически сохраняются в журналах файловой системы ext4 & xfs. Обратите внимание, что я не спрашиваю о том, что POSIX объявляет «атомным». Меня больше волнует, какое подмножество операций атомарной файловой системы эффективно долговечно благодаря работе с включенным журналом без необходимости перегибаться назад и fsync(2)все время.

Шеф я вполне уверен, считаю:

  • creat(2)
  • link(2)
  • unlink(2)
  • rename(2)
  • mkdir(2)
  • rmdir(2)

Операции, в которых я не совсем уверен:

  • symlink(2)

Этот symlink(2)случай вызывает наибольшую тревогу, поскольку, похоже, не существует какого-либо прямого пути fsync(2)или fdatasync(2)базовых блоков данных, которые хранят содержимое символической ссылки. Зная, что журнал заботится об этом для меня, было бы облегчением.

rboyer
источник

Ответы:

1

По соображениям производительности ext4 по умолчанию записывает метаданные файловой системы только через журнал.

Я считаю, что XFS также регистрирует все транзакции метаданных, если вы не настроили файловую систему.

Джон Вестлунд
источник
Да, но что конкретно означает "метаданные"? Блоки каталога: конечно. Сами иноды: yep. Симлинки с целью достаточно маленькой, чтобы вписаться в сам индекс: вероятно? Симлинки, где цель перетекает во вспомогательные блоки: ??????
ссылка поможет
asdmin
1

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

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

psusi
источник
Я знаю, что если мне нужно, я должен fsync файлы и каталоги, чтобы знать наверняка, попали ли блоки в ржавчину, но я не нашел способа, который позволил бы мне fsync блокировать обратную ссылку, если она выпадает из Индод В этот момент мой единственный выход - полагаться на журнал или никогда больше не использовать символические ссылки для всего, что имеет значение.
rboyer
@naelyn, функция fsync () сбрасывает все блоки, относящиеся к файлу, включая небыструю символическую ссылку.
Псуси
1
Как открыть соответствующий файловый дескриптор для использования в fsync, который будет сбрасывать блоки не-быстрой символической ссылки?
rboyer
@naelyn, о да ... хороший вопрос ... возможно, нужно спросить об этом в списке рассылки linux-fsdevel ... с жесткими ссылками. Я полагаю, вы открываете и синхронизируете каталог, содержащий его, может, символические ссылки работают так же?
Псуси
0

Вам известно, что журнал ext4 работает по номеру блока, а не по операции, правильно? «Метаданные» могут быть чем-то иным, чем действительные блоки данных для данного inode, независимо от того, какую операцию вы использовали для изменения рассматриваемого блока.

Bratchley
источник
0

xfstests, кажется, утверждает, что fsync () в каталоге должен сохранять любые символические ссылки, которые он содержит.

Я не проверял это. Возможно, я что-то пропустил.

xfstests используется многими разработчиками файловых систем Linux. Этот тест находится в «общем» каталоге. Это означает, что оно должно применяться ко всем файловым системам Linux. (Или, по крайней мере, все файловые системы блочных устройств. Тест работает с использованием специального виртуального блочного устройства).

https://github.com/kdave/xfstests/blob/master/tests/generic/348

# Test creating a symlink, fsync its parent directory, power fail and mount
# again the filesystem. After these steps the symlink should exist and its
# content must match what we specified when we created it (must not be empty
# or point to something else).
sourcejedi
источник