Як працює скраб btrfs і що він робить?


19

Що саме робить скраб btrfs? Відповідно до сторінки керівництва, яка є абсолютно незрозумілою, вона робить деяку перевірку помилок. Яка перевірка помилок? Наскільки це надійно? Чи здатний відновити деякі помилки? Як це працює? Чи працює він на кожному диску btrfs?


3
Контекст: BTRFS зберігає контрольні суми, тому він завжди може визначити, чи файл (або метадані) добре, чи він був пошкоджений. Майже у всіх інших файлових системах, таких як ext4, немає контрольної суми, тому вони не завадять вам прочитати файл, який був пошкоджений поганим диском (який скоро загине і вже розпочав пошкодження даних). Це важлива функція захисту даних у BTRFS, і це робить можливим вичищення.
основні6

Відповіді:


23

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

Після виявлення корупції поведінка залежить від налаштування вашого диска. Наприклад, якщо у вас RAID 1 (дзеркальне відображення), ви btrfs scrubможете виправити пошкоджені дані, скопіювавши непошкоджену версію з іншого диска. Якщо всі копії деяких даних пошкоджені (наприклад, пошкодження на декількох дисках або відсутність в першу чергу зайвих копій), btrfs scrubкрім того, ви не можете попередити вас.

Причина цього важлива в тому, що жорсткі диски лише приблизно 99,999999999999% надійні при читанні та записі бітів. Отже, кожні кілька терабайт вводу / виводу даних, ймовірно, буде помилка. Хоча помилки можуть бути і виявлені (і виправлені, якщо припустити, що надлишкова копія все-таки діє) під час звичайного доступу до диска, рутинне повне очищення диска в змозі знайти та виправити помилки, перш ніж накопичиться достатньо, щоб усі копії одних і тих же даних були пошкоджені.

* Я використовую "дані" замість "файл", щоб також включати метадані. Btrfs зберігає файли та відповідні метадані (включаючи контрольні суми) у блоках даних, усі з яких перевіряються і перевіряються btrfs scrub.

Дивись також:


Я не рахував, але я готовий здогадатися, що показник вашої надійності вимкнений на кілька порядків. Споживчі жорсткі диски зазвичай специфікуються зі швидкістю UBE 10 ^ -14 біт. Іншими словами, одна непоправна помилка читання на 10 ^ 14 біт прочитаного. Проблема полягає в тому, що це для повного сектору; ви або отримуєте повний сектор, або взагалі нічого не отримуєте (або це ідея; тихі помилки - це ще одна чашка чаю цілком). Таким чином, помилка посилюється за розміром сектора, який з накопичувачами Advanced Format становить 32 768 біт. Отже, реальна помилка більше схожа на 10 ^ -10 до 10 ^ -11 readbit-помилок.
CVn

@ MichaelKjörling Я не думаю, що сектори мають значення тут .... У мене є записи останніх скрабів 29 btrfs двох внутрішніх жорстких дисків мого комп'ютера. Обсяг даних коливався в межах від 270 до 300 Гб (загалом від 1,35 * 10 ^ 14 до 1,49 * 10 ^ 14 біт, прочитаних для всіх скрабів разом). Під час цих скрабів було виявлено 3 помилки. Якщо припустити, що введення-виведення без скрабування не викликало і не фіксувало гниття бітів, це лише в 2–2 рази більше очікуваного показника помилок «99,999999999999% надійних» накопичувачів. Навіть із лише 4096-бітовими секторами, я думаю, що ваш аргумент очікував, що в моїх накопичувачах вже було тисячі помилок.
Марк Хаферкамп

@ MichaelKjörling Наскільки я розумію специфікацію виробника (Seagate та WD), це трохи помилок, і не цілі сектори гинуть. А кількість дев'яток у відповіді навіть оптимістична: 100-1/10^14має 16 дев'яток, а посади - лише 14 (що відповідає 10 ^ 12).
Люк

@Luc Це добре, якщо смерть у секторі зустрічається рідше; Вмираючі сектори означають, що накопичувач (можливо) насправді виходить з ладу і може потребувати заміни. Помилки бітів просто призводять до мовчазної пошкодження даних, яку можна зробити досить шумною для відновлення із резервних копій. Примітка математики: власне обчислення - 1-10^nце перетворення, яке потім перетворюється на відсотки, оскільки люди не люблять провідні десяткові знаки. Крім того, я знехтував зазначити в своєму попередньому коментарі, що накопичувачі знаходяться в RAID 1 (отже, ті ж дані 270-300 GiB є на кожному з них), що виправляє чергову явну помилку обчислення.
Марк Хаферкамп

5

Розгортаючись на відмінну відповідь Марка Хаферкампа, btrfs scrubчитаючи всі дані замість усіх файлів є критичною властивістю і насправді є тим, що робить це настільки корисним. Пам'ятайте, що btrfs має вбудовану підтримку RAID. Скажімо, у вас є файлова система btrfs, що охоплює два диски, налаштовані на використання RAID1. У цьому випадку, коли ви пишете у файл, це записування реплікується на обидва диски. (Це ускладнюється більш складним прикладом, але для цього простого випадку це завжди відбувається.) Однак, коли ви читаєте з цього файлу, прочитане потрапить лише на один диск (тому що це марно прочитати файл двічі якщо тільки перша копія з якихось причин непридатна).

Тепер скажіть, що ваш другий диск btrfs погіршує і почне пошкоджувати дані у вашій файловій системі. Коли ви читаєте блоки з цього диска, btrfs помітить, що контрольна сума не збігається, і відновить блок в діапазоні з відомої хорошої копії - копії на першому диску. Він поверне дані в програму, яка дзвонить read()(або як би там не було), як ніби нічого не сталося.

Але що робити, якщо btrfs не вирішить читати з другого диска? Пам’ятайте, є дві копії, тому вона може читати з першого чи другого диска. Якщо він читає з першого диска, він не помітить нічого поганого. Єдиний раз, коли він помітить щось не так, - коли перший диск теж деградує. Тепер вам дуже потрібен шланг, оскільки відновити дані вже пізно - копія другого диска була пошкоджена на деякий час, а перша копія (що саме ви використали для відновлення другого диска) також пошкоджена!

Це місце, де btrfs scrubнадходить. Він читає всі дані , а не всі файли. Сюди входять метадані, але також вторинні копії файлів, які зазвичай не знаходяться на шляху читання. Коли він читає ці вторинні копії, це створює можливість для виправлення помилок btrfs, щоб почати та відновити дані із зайвої копії.


2
Ви впевнені, що в RAID1 зчитування виконується лише з 1 диска? Принаймні, з mdadm RAID це не повинно бути. Читання має відбуватися паралельно з обох дисків, але різних даних, тобто воно має бути вдвічі швидшим, ніж читання з одного диска. Читання підвищення продуктивності - одна з головних особливостей RAID 1.
Петро

@Petr так, ти маєш рацію. окремі блоки читаються лише з одного диска.
удари

@Petr: Щоб розробити, - при нормальному використанні ні MDADM, ні BTRFS не читають обидві копії одних і тих же даних з обох дисків. Вони читають лише один примірник. - MDADM здатний завантажувати баланс і розподіляти читання по копіях, щоб отримати подвійну швидкість читання. (оскільки всі копії A переходять на диск 1, а всі копії B переходять на диск 2. Оскільки mdadm використовуватиме рівно два диски). - BTRFS має більше труднощів. (тому що копії A і B перейдуть на той диск, на якому 2 диски (з 2 або більше дисків) на даний момент було найбільше вільного місця - тобто: дві копії будуть випадковим чином поширюватися серед усіх присутніх дисків)
DrYak

щодо безпеки: - і MDADM, і BTRFS спробують іншу копію у разі проблеми. - для MDADM єдиною проблемою, яку він може виявити, є "диск не відповідає" (тому що він не має фактичного уявлення про файли, що зберігаються вище) - для BTRFS він може додатково виявити беззвучне пошкодження даних (оскільки дані перевірені, і так RAID-рівень BTRFS знає, чи можна довіряти одній копії чи потрібно отримати іншу копію)
DrYak

останнє, але не в останню чергу щодо RAID5 / 6: - у MDADM це просто працює . (Але не виявляти мовчазних корупцій) - у BTRFS безшумна корупція наразі не обробляється (тому що простіше просто отримати іншу копію (в RAID1), а не робити обчислення Erasure Coding, щоб відгадати, хто з членів смуги пошкоджений і має бути перебудовано з інших даних / паритету). Іншими словами: станом на сьогодні (серпень 2017 року) не використовуйте btrfs 'RAID5 / 6.
DrYak
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.