Гарантируют ли журнальные файловые системы защиту от повреждения после сбоя питания?


28

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

Гарантируют ли журнальные файловые системы, что в случае сбоя питания не произойдет повреждения?

Если этот ответ зависит от файловой системы, укажите, какие из них защищают от повреждения, а какие - нет.

Ответы:


21

Там нет никаких гарантий. Журналируемая файловая система более устойчива и менее подвержена коррупции, но не защищена.

Весь журнал - это список операций, которые недавно были выполнены с файловой системой. Важнейшей частью является то, что запись в журнале делается до того, как будут выполнены операции. Большинство операций имеют несколько этапов. Например, удаление файла может повлечь за собой удаление записи файла в оглавлении файловой системы, а затем пометить сектора на диске как свободные. Если что-то происходит между этими двумя шагами, журнализированная файловая система может немедленно сообщить об этом и выполнить необходимую очистку, чтобы все было согласованно. Это не относится к файловой системе без журналирования, которая должна искать все содержимое тома, чтобы найти ошибки.

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

Основная предпосылка ведения журнала состоит в том, что написание записи в журнале обычно происходит гораздо быстрее, чем фактическая транзакция, которую она описывает. Таким образом, период между ОС, упорядочивающей запись (журнал), и жестким диском, выполняющим ее, намного короче, чем для обычной записи: более узкое окно для ошибок, но окно все еще есть.

дальнейшее чтение


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

1
@ Джордж Эдисон Смотрите мой расширенный ответ.
Эндрю Ламберт

2
Этот последний бит неверен; нет времени, чтобы что-то пошло не так. Поскольку он записывает, что он собирается сделать до того, как начнет это делать, операцию можно будет возобновить после сбоя питания, независимо от того, в какой момент это происходит во время операции. Это вопрос заказа, а не времени.
Псуси

@psusi еще есть окно для прерывания записи в журнал. Записи в журнале могут казаться атомными для ОС, но они все еще записывают на диск.
Эндрю Ламберт

6
@ Удивлены, что они атомарные, потому что имеют порядковые номера и / или контрольные суммы, поэтому запись в журнале либо полностью записана, либо нет. Если он записан не полностью, он просто игнорируется после перезапуска системы, и дальнейшие изменения в fs не вносятся, поэтому он остается согласованным.
Псуси

18

Нет.

Наиболее распространенный тип ведения журнала, называемый ведением журнала метаданных, защищает только целостность файловой системы, а не данных. Это включает в себя xfsи ext3/ ext4в data=orderedрежиме по умолчанию .

Если не журналируемая файловая система испытывает сбой, она будет проверена при fsckследующей загрузке. fsckсканирует каждый индекс в файловой системе, ищет блоки, помеченные как использованные, но недоступные (т. е. не имеющие имени файла), и помечает эти блоки как неиспользуемые. Это занимает много времени.

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

Существует менее распространенный тип журналирования, называемый журналированием данных, что и ext3происходит, если вы подключаете его с data=journalопцией.

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

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

Для получения дополнительной информации ознакомьтесь со статьей Wikipedia Journaling File System и разделом Data Mode документации ext4 .


1
+1 за различие между повреждением файловой системы и повреждением данных. Это маленькое различие довольно глупо на практике.
SplinterReality

Извините за мое полное невежество, но разве это вообще не data=journalимеет смысла?
Boehj

Опять же, ОС знает, когда диск кэширует данные, и вынуждает его сбрасывать их, когда это необходимо, для поддержания согласованного fs. Ваш файл данных, конечно, может быть потерян или поврежден, если приложение, которое его записывало при отключении питания, не делало этого так осторожно, и это применимо независимо от того, используете ли вы data = journal.
Псуси

@psusi не имеет значения, насколько тщательно программа записывает данные, многие жесткие диски молча повреждают данные в
READING

@ user3338098, диски, которые молча повреждают данные, ужасно повреждены и никогда не должны использоваться, и это совершенно другой разговор, чем повреждение, вызванное неправильным действием программного обеспечения.
Псуси

8

Файловая система не может гарантировать согласованность своей файловой системы в случае сбоя питания, потому что она не знает, что будет делать оборудование.

Если жесткий диск буферизует данные для записи, но сообщает ОС, что они записали данные, и не поддерживает соответствующие барьеры записи, то может произойти неправильная запись, когда более ранняя запись не попала на диск, но более поздняя запись есть. См. Этот ответ о сбое сервера для более подробной информации.

Также положение головки на магнитном жестком диске контролируется электромагнитами. Если во время записи происходит сбой питания, некоторые данные могут продолжать записываться во время движения головок, повреждая данные в блоках, которые файловая система никогда не собиралась записывать.


Разве прошивка привода не достаточно умна, чтобы приостановить запись при убирании головы?
Натан Осман

@ Джордж: Это будет зависеть от драйва. Там много всего, и вы не знаете, насколько хорошо работает ваш (дешевый) диск.
Camh

1
Жесткий диск сообщает операционной системе, использует ли она кэш-память записи, и ОС принимает меры для обеспечения того, чтобы они были сброшены в правильном порядке. Также накопители спроектированы таким образом, что при отключении питания они прекращают запись. Я видел несколько случаев, когда сектор, записываемый во время потери питания, поврежден, потому что он не завершил обновление ecc (но его можно легко переписать правильно), но никогда не слышал о повреждении случайных секторов при потере мощности.
Псуси

3

ZFS, которая является закрытой, но не совсем журналируемой файловой системой, гарантированно защищает от повреждения после сбоя питания.

Не имеет значения, если текущая запись будет прервана посередине, так как в этом случае ее контрольная сумма будет, безусловно, неправильной, поэтому блок будет игнорироваться. Поскольку файловая система копируется при записи, предыдущие правильные данные (или метаданные) все еще находятся на диске и будут использоваться вместо них.


2

Ответ в большинстве случаев нет:

  • Как уже говорил Микел , большинство файловых систем журналирования могут защищать только метаданные файла (информацию, такую ​​как имя файла, его размер, права доступа и т. Д.), Но не данные файла (содержимое файла). Это происходит потому, что защита файловых данных приводит к очень медленной (на практике бесполезной) файловой системе.
  • Поскольку журнал также представляет собой особый вид файлов, хранящихся на жестком диске, он может быть поврежден после сбоя питания. Таким образом, если журнал поврежден, файловая система не может завершить какие-либо незавершенные транзакции, которые имели место при сбое питания.

Какие события могут привести к коррупции в журнале? Единственное, о чем я мог думать, это о плохих секторах - есть ли что-нибудь еще?
Натан Осман

Это верно, аппаратные сбои являются обычным случаем.
Сакиск
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.