Чи гарантують файлові системи журналу від пошкодження після відключення електроенергії?


28

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

Чи гарантія файлових систем журналу гарантує, що в разі відмови живлення не відбудеться пошкодження?

Якщо ця відповідь залежить від файлової системи, вкажіть, які з них захищають від корупції, а які - ні.

Відповіді:


21

Гарантій немає. Файлова система журналу більш еластична і менш схильна до корупції, але не захищена.

Весь журнал - це список операцій, які нещодавно були виконані у файловій системі. Найважливіша частина полягає в тому, що запис у журналі робиться до того, як відбудуться операції. Більшість операцій мають кілька кроків. Видалення файла, наприклад, може спричинити за собою видалення запису в таблиці вмісту файлової системи, а потім позначення секторів на диску як вільних. Якщо між двома кроками щось трапиться, файлова система, що перебуває в колі, може негайно повідомити і виконати необхідне очищення, щоб все було послідовно. Це не так у випадку з файловою системою без журналу, яка повинна шукати весь вміст тома, щоб знайти помилки.

Хоча цей журнал набагато менш схильний до корупції, ніж не ведення журналів, корупція все ще може виникнути. Наприклад, якщо вінчестер механічно несправно працює або якщо записи в журнал не спрацьовують або перериваються.

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

Подальше читання


Не могли б ви трохи розібратися, чому це правда? Можливо, ви можете навести приклад того, як корупція відбуватиметься за певним сценарієм.
Натан Осман

1
@George Edison Дивіться мою розгорнуту відповідь.
Ендрю Ламберт

2
Цей останній біт невірний; немає вікна, щоб справи пішли не так. Оскільки він записує, що збирається зробити до того, як він почне це робити, операцію можна буде відновити після відключення електроенергії, незалежно від того, в який момент вона відбувається під час роботи. Це питання впорядкування, а не термінів.
psusi

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

5
@Amazed вони атомні, оскільки вони мають порядкові номери та / або контрольні суми, тому запис у журналі пишеться повністю, або немає. Якщо він написаний не повністю, він просто ігнорується після перезавантаження системи, і більше ніяких змін до файлу не було внесено, щоб він залишався послідовним.
psusi

18

Ні.

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

Якщо файлова система, яка не веде журнал, зазнає збоїв, вона буде перевірена за fsckдопомогою наступного завантаження. fsckсканує кожну вкладку у файловій системі, шукаючи блоки, позначені як використані, але недоступні (тобто не мають імені файлу) та маркує ці блоки як невикористані. Робити це потрібно багато часу.

За допомогою файлової системи журналу метаданих, замість того, щоб робити fsck, вона знає, які блоки були в середині зміни, тому він може позначити їх як вільні, не шукаючи для них весь розділ.

Існує менш поширений тип журналу, який називається журналом даних, і це те, що ext3робиться, якщо встановити його за допомогою data=journalпараметра.

Він намагається захистити всі ваші дані, записавши не лише список логічних операцій, а й весь вміст кожного запису до журналу. Але оскільки це записування ваших даних двічі, це може бути набагато повільніше.

Як зазначають інші, навіть це не є гарантією, тому що жорсткий диск, можливо, сказав операційній системі, що вона зберігає дані, коли він фактично все ще знаходився в кеші жорсткого диска.

Для отримання додаткової інформації подивіться статтю файлової системи журналу Wikipedia та розділ Режим даних документації ext4 .


1
+1 за відмінність між корупцією файлової системи та корупцією даних. Ця невелика відмінність є цілком глуздою на практиці.
SplinterReality

Вибачте за моє повне незнання, але чи не data=journalє ця функція взагалі безглуздою?
boehj

Знову ж таки, ОС знає, коли накопичувач кешує дані, і змушує його при необхідності обробляти їх, щоб підтримувати цілісний Fs. Ваш файл даних, звичайно, може бути загублений або пошкоджений, якщо програма, яка писала його, коли живлення не працювало, не робила цього обережно, і це стосується того, використовуєте ви чи ні data = journal.
psusi

@psusi не має значення , наскільки ретельно програма в запису даних, безліч жорстких дисків мовчки корумпованих даних на ЧИТАННЯ stackoverflow.com/q/34141117/3338098
user3338098

@ user3338098, диски, які мовчки пошкоджують дані, жахливо порушуються і ніколи не повинні використовуватися, і це зовсім інша розмова, ніж пошкодження, спричинене тим, що програмне забезпечення робить не так.
psusi

8

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

Якщо жорсткий диск буферизує дані для запису, але повідомляє ОС, що він записав дані і не підтримує відповідні бар'єри для запису, тоді запит поза замовлення може відбуватися, коли попереднє записування не потрапило на платівку, а пізніше має. Додаткову інформацію див. У відповіді на сервер за замовчуванням .

Також положення голови на магнітному жорсткому диску управляється електромагнітами. Якщо в середині запису не вдається живлення, можливо, деякі дані продовжують записуватися під час переміщення головки, пошкоджуючи дані про блоки, які файлова система ніколи не передбачала записувати.


Хіба прошивка диска не є достатньо розумною, щоб призупинити писати при відтягуванні голови?
Натан Осман

@George: Це залежатиме від накопичувача. Там багато чого, і ви не знаєте, наскільки добре працює ваш (дешевий) привід.
camh

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

3

ZFS, яка є близькою, але не зовсім журнальною файловою системою, гарантує дизайн від корупції після відключення електроенергії.

Не має значення, якщо в середині переривається поточне записування, оскільки в такому випадку контрольна сума буде, безумовно, неправильною, тому блок буде ігноруватися. Оскільки файлова система копіюється під час запису, попередні правильні дані (або метадані) все ще знаходяться на диску і замість цього будуть використовуватися.


2

У більшості випадків відповідь - ні:

  • Як вже говорив Мікель , більшість файлових систем журналу можуть захищати лише метадані файлів (така інформація, як назва файлу, його розмір, його дозволи тощо), а не дані файлу (вміст файлу). Це відбувається тому, що захист даних файлів призводить до дуже повільної (на практиці марної) файлової системи.
  • Оскільки журнал також є спеціальним видом файлів, що зберігаються на жорсткому диску, він може бути пошкоджений після відключення живлення. Таким чином, якщо журнал пошкоджений, файлова система не може здійснити жодних неповних транзакцій, які відбувались, коли сталася помилка живлення.

Які події можуть призвести до корупційного журналу? Єдине, про що я міг подумати, - це погані сектори - чи є ще щось?
Натан Осман

Це правильно, технічні збої - це звичайний випадок.
sakisk
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.