Чи гарантує BTRFS послідовність даних щодо відключення електроенергії?


11

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

Я не зміг знайти таку заяву для BTRFS. Чи довгостроково між відключеннями електроенергії (або розроблено / планується)?


читати ще раз. "Якщо ваш басейн пошкоджений через несправність обладнання або відключення електроенергії, див. Ремонт пошкодження басейну ZFS-Wide-Wide." (..) Спроба відновити пул за допомогою zpool clear -F команди
Майкл Д.

Так ви кажете: "ZFS не гарантує узгодженість даних, вона лише намагається відновити"?
ceremcem

Так. Існує декілька кеш-пам'яток, вбудований кеш-пам'ять на жорстких дисках, кеші / буфери ОС. У якийсь момент є syncабо flushякий записує кеші на диск, або не під час відключення живлення, ці дані будуть втрачені. ZFS може працювати бездоганно, якщо жорсткий диск здоровий і немає відключень живлення (або UPS підключений до належного відключення комп'ютера при відключенні). Що ви не можете сказати про FAT32 чи так.
Майкл Д.

2
Втрата даних не викликає занепокоєння, оскільки це природний наслідок, коли відбувається втрата електроенергії, але, в моєму випадку, узгодженість даних викликає побоювання. Файлова система може втрачати дані в таких екстремальних умовах, але не повинна викликати непослідовні дані на диску. Мені потрібні безперервні знімки, тому я продовжуватиму працювати з BTRFS. Але в моєму випадку NILFS2 є найближчим варіантом.
ceremcem

1
Я задавав питання на #btrfs IRC, вони сказали, should be ok if your hw isn't "buggy"де не - "баггі" означає your hw has correct flush/barrier semantics. Я опублікував посилання на це питання на IRC, сподіваюсь, хтось потребує часу для розробки; але наразі це все.
Привіт-Ангел

Відповіді:


5

Я задавав питання на #btrfs IRC, вони сказали, should be ok if your hw isn't "buggy"де не - "баггі" означає your hw has correct flush/barrier semantics.

TL; DR: Це означає, що btrfs захищений від пошкодження даних через втрату електроенергії аналогічно ZFS.

Ось чому: Загальна ідея ZFS та btrfs схожа. Обидва використовують дерева Меркле як структуру даних . Записи можуть вимагати оновлення декількох блоків на диску (дисках). Файлова система обробляє це, записуючи нові дані в порожні блоки (навіть якщо існуючий файл змінюється, таким чином, йому не потрібно змінювати блоки, що відображають старий стан) та будувати нове оновлене дерево. Після того, як все важке підняття буде зроблено і дані + оновлене дерево записуються на диск, вказівник голови оновлюється до нового дерева, роблячи видимі зміни.

Ось як слід вести себе під час запису у файл:

  1. Запишіть дані у вільні блоки на диску.
  2. Зробіть копію дерева Merkle *, оновіть її відповідно до змін, записаних у (1).
  3. Попросіть апаратне обладнання передати дані на диск - апаратне забезпечення записує всі очікувані дані.
  4. Оновіть вказівник голови на нове дерево Меркла.
  5. Безкоштовні старі блоки, які вже не потрібні.

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

Ось приклад того, як все може піти не так з апаратним забезпеченням "баггі":

  1. Запишіть дані у вільні блоки на диску.
  2. Зробіть копію дерева Merkle *, оновіть її відповідно до змін, записаних у (1).
  3. Попросіть апаратне обладнання передати дані на диск - апаратне забезпечення підтверджує завершення, але не проміє до кінця (наприклад, дані можуть залишатися в кеш-пам'яті запису на диску).
  4. Оновіть вказівник голови на нове дерево Меркла. Ці дані записуються на диск перед іншими очікуваними даними (наприклад, тому, що головка диска знаходиться в потрібному місці).
  5. Дані, записані в кроках (1) та (2), записуються на диск.
  6. Безкоштовні старі блоки, які вже не потрібні.

Файлова система стане непослідовною, якщо втрачено живлення між (4) та (5) або під час виконання кроку (5). Як наслідок, дерево Меркле та / або дані можуть бути записані лише частково, що спричинить непослідовність файлової системи.

На практиці ви повинні бути особливо обережними при використанні контролерів RAID . Зазвичай вони вимикають кеші зворотного запису на диску та використовують власний кеш зворотного запису. Існує два загальних способи, коли справи можуть піти не так:

* Тут я спрощую речі. Фактично не потрібно копіювати все дерево. Необхідно додати лише ті зміни, які змінилися - решту частин можна розділити між старим і новим деревом .


Дякую за це приємне пояснення. Однак цитування необхідне для всіх претензій, включаючи IRC-розмову. Тоді ваша відповідь буде прийнята.
ceremcem

Щодо журналів IRC, тут я мав на увазі коментар @ Hi-Angel. Може, він може надати довідку? Хоча я додав ще кілька посилань на інші частини.
Мартін

BTRFS не використовує дерева Merkle, він використовує B-дерева (отже, "B-TRee FileSystem"), і ваші приклади відмов вимагають, щоб бар'єри для запису не були належним чином реалізовані апаратним забезпеченням (що насправді є досить незвичним випадком в ці дні) . Інакше хороша відповідь.
Остін Хеммельгарн

Дерева, які використовуються btrfs, насправді є як B-деревами (ця властивість стосується "форми" дерева та того факту, що вони самоврівноважуються), так і хеш-дерев ( Merkle) (листя містять хеш деяких даних, вузли містять хеш своїх дітей, тому кожна зміна поширюється аж до кореня). Можливість перевірити ці хеші - це те, що дозволяє btrfs та ZFS виявляти пошкоджені дані (та читати їх з іншого диска, якщо вони використовуються в режимі "дзеркальне відображення").
Мартін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.