виявлення та виправлення гнит біт за допомогою mdadm


17

Я збираюся переорганізувати всі мої жорсткі диски в домашній linux box nas і хотів би використовувати mdadm raid для захисту даних та його гнучкості для перестановки масивів. Однак, перш ніж використовувати mdadm для цього, я хотів би знати, як він обробляє біт гниття . Зокрема, види бітової гнилі, які не призводять до того, що з жорсткого диска надсилаються непоправні повідомлення про помилки читання.

З огляду на , що я , ймовірно , буду використовувати принаймні 21TB жорстких дисків на 8 дисків в наса і різних котируваннях на ймовірності з невдач на жорстких дисках, я думаю , що під час відновлення з ладу одного диска я з достатньою ступенем ймовірністю зіткнення якась форма бітової гнилі на решти дисках. Якщо це невідправна помилка читання на 1 з накопичувачів, що привід насправді повідомляє про це як про помилку, я вважаю, що це має бути добре з raid6 (це?). Однак якщо дані, прочитані з диска, погані, але не повідомляються як такі на диску, я не можу побачити, як це можна автоматично виправити навіть при raid6. Це щось, про що ми повинні турбуватися? З огляду на статтю It is 2010, і RAID5 все ще працює , і мої власні успішних досліди будинку і на роботі, то не обов'язково , як і песимізм як слівця і маркетинг нас би повірив, але я ненавиджу відновлюватись із резервних копій лише тому, що жорсткий диск вийшов з ладу.

З огляду на , що моделі використання будуть, записи в більшості кілька разів, і читати час від часу, я повинен буду виконувати дані скрубери . Я бачу на wiki Archlinux команду mdadm для очищення даних масиву як

echo check > /sys/block/md0/md/sync_action

потім слідкувати за прогресом

cat /proc/mdstat

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

Який рівень (-и) RAID mdadm слід вибрати, щоб забезпечити максимальну захист від бітової гнилі та які заходи з технічного обслуговування та інших захисних заходів потрібно робити? І від чого це мене не захистить?

Редагувати: Я не хочу запускати RAID проти ZFS або будь-якої іншої технології QA. Я хочу знати конкретно про рейд mdadm. Ось чому я прошу в Unix & Linux, а не в SuperUser .

Редагувати: це відповідь: mdadm може виправити лише URE, про які повідомляють дискові системи під час скрабування даних та виявляє беззвучне гниття бітів під час скрабу, але не може / не зможе це виправити?


Що стосується захисту даних, то головна перевага, яку я бачу в zfs, полягає в тому, що він прочищає місця на диску, коли читаєш файл. Ось чому я наразі встановив його з zfs. Але мені все одно потрібно регулярно проводити повний скраб. У мене є 2 пулу zfs на кожному з 3-х дисків, і я хочу оновити до 8-ти дискових систем, де будь-який диск може вийти з ладу, і все одно буде ще 1 зайвий диск, а zfs не є гнучким, щоб дозволити подібні зміни. Оскільки я все-таки відбудовуюсь, я знову відвідую mdadm.
BeowulfNode42

Досі вам пощастило з RAID5 / 6. Справа в тому, що це 2013 рік, і RAID все ще страждає від лунки запису. Якщо ви втрачаєте владу після того, як дані записуються, але перед тим, як записати паритет, то ви просто зіпсували ваші хороші дані, і можливо, що за непослідовність, що ваш масив також тостить. Дякую RAID5
bahamat

Вся справа в тому, що те, що ви хочете зробити, найкраще зробити на рівні файлової системи. В іншому випадку вам знадобиться якийсь спосіб виявити і бажано виправити гниття бітів, можливо, в ситуації зі зменшеним або без надмірності, і RAID просто не підходить для цього. Мало того, що немає гарантії того, що ви все одно не закінчитеся бітною гниллю (що робити, якщо один привід вийде з ладу, а інший прочитає біт неправильно з платівки?), Але звичайний RAID також не має поняття, що є важливими даними та що таке просто шум. Оскільки ZFS прокручує лише посилання на дані, гниття бітів на невикористаній частині диска стає проблемою.
CVn

Дійсно, ви не можете очікувати, що накладення випадкової файлової системи поверх декількох дисків (навіть із надмірністю) раптово захистить вас від помилок зберігання. Я не на святому хрестовому поході, щоб довести ZFS до маси (хоча я вважаю, що це чудовий винахід, і використовую його в Linux для практично всього, крім кореневого розділу, який є ext4 на mdraid1 для сумісності програмного забезпечення), але Я також усвідомлюю, що ваша проблема є однією з різновидів проблеми, яку ZFS розробляв з самого початку, щоб гарантувати: гарантоване виявлення та, по можливості, усунення пошкодження даних незалежно від причини.
CVn

Я думаю, вам слід переглянути свої вимоги. Вам справді потрібен захист від бітрот навіть у випадку, коли застосовується виправлення помилок? Чи знаєте ви, наскільки малоймовірно, що бітрот існував GIVEN, що він також був виправлений ECC диска?
печерний чоловік

Відповіді:


5

Чесно кажучи, мені здається, що ви дивно відхиляєте RAIDZ2 ZFS. Це здається, що відповідає вашим потребам майже ідеально, за винятком того, що це не Linux MD. Я не на хрестовому поході, щоб довести ZFS до маси, але простий факт полягає в тому, що ваша - це одна з тих проблем, які ZFS був розроблений з нуля для вирішення. Покладатися на RAID (будь-який "регулярний" RAID) для забезпечення виявлення та виправлення помилок, можливо, у ситуації зі зменшеним або відсутністю надмірності здається ризикованим. Навіть у ситуаціях, коли ZFS не може правильно виправити помилку даних, вона може принаймні виявити помилку та повідомити про наявність проблеми, що дозволяє вжити коригувальних дій.

Вам не доведеться робити регулярні повні скраби з ZFS, хоча це рекомендується. ZFS перевірить, що дані, прочитані з диска, відповідають тому, що було записано під час зчитування даних, а у разі невідповідності або (a) використовувати надмірність для реконструкції вихідних даних, або (b) повідомити про помилку вводу / виводу для додаток. Крім того, скрабування - це операція в Інтернеті з низьким пріоритетом, що зовсім відрізняється від перевірки файлової системи в більшості файлових систем, яка може бути як високооборотною, так і офлайн. Якщо ви використовуєте скраб і щось інше, ніж скраб хоче зробити введення / виведення, скраб буде займати заднє місце протягом тривалості. Скруб ZFS займає місце як скрабу RAID, так і метаданих і даних файлової системи перевірка цілісності, тому набагато більш ретельна, ніж просто очищення масиву RAID для виявлення будь-якої бітової гнилі (яка не говорить вам, чи мають дані якісь сенси, а лише те, що вони записані правильно контролером RAID).

Надлишок ZFS (RAIDZ, дзеркальне відображення, ...) має перевагу в тому, що невикористані місця на диску не потрібно перевіряти на відповідність під час скрабування; під час скрабу перевіряються лише фактичні дані, оскільки інструменти проходять ланцюг блоку виділення. Це те саме, що і з резервним резервом. Для "звичайного" RAID всі дані (включаючи невикористані місця на диску) повинні бути перевірені, оскільки контролер RAID (будь то апаратне чи програмне забезпечення) не має уявлення про те, які дані насправді актуальні.

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

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

Звичайний, навіть подвійний паритет, RAID не захищає вас від таких ситуацій, як, наприклад, коли один накопичувач вийшов з ладу і ще один зчитує дані неправильно з диска. Припустимо, один привід вийшов з ладу, і є один біт перевернути будь-де з будь-якого іншого диска: раптом у вас виявлено непомітне пошкодження, і якщо ви не задоволені цим, вам знадобиться спосіб хоча б його виявити. Спосіб зменшення цього ризику полягає в тому, щоб перевірити суму кожного блоку на диску і переконатися, що контрольна сума не може бути пошкоджена разом із даними (захищаючи від помилок, таких як високошвидкісний запис, сирота пише, записує в неправильні місця на диску тощо), який саме те, що ZFS робить до тих пір, поки включена контрольна сума.

Єдиний справжній мінус полягає в тому, що ви не можете легко виростити RAIDZ vdev, додавши до нього пристрої. Для цього є обхідні шляхи, які зазвичай включають такі речі, як розріджені файли, як пристрої в vdev, і дуже часто називають "я б цього не робив, якби це були мої дані". Отже, якщо ви їдете по маршруту RAIDZ (незалежно від того, чи їдете ви з RAIDZ, RAIDZ2 або RAIDZ3), вам потрібно визначитися, скільки дисків ви хочете в кожному vdev. Незважаючи на те, що кількість накопичувачів у vdev фіксовано, ви можете рости vdev поступово (переконуючись у межах порогу надмірності vdev), замінюючи накопичувачі на більші ємності та дозволяючи повний resilver.


5
У своєму первісному запитанні я намагався уникати аргументу zfs vs raid, оскільки про це є багато інформації. Я хочу конкретну інформацію про mdadm. Оскільки я не буду читати всі дані досить часто, щоб гарантувати регулярне очищення даних, мені потрібно регулярно змушувати скрупувати повний масив незалежно від zfs чи рейду.
BeowulfNode42

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

1
@caveman Я не знаю про тебе; Мені дуже подобається те, що мені не потрібно постійно перевіряти суми файлів, щоб бути впевненими, що вони не були пошкоджені. Звичайно, величезна більшість часу не відбувається корупції , і в цьому випадку не завдано жодної шкоди (при ZFS ви отримуєте вибір алгоритму контрольної суми серед пригорщі, тож ви можете вибрати бажану точку уздовж континууму безпеки / продуктивності), але автоматичні контрольні суми рівня файлової системи гарантують, що не буде виправленої пошкодження, оскільки, якщо вона є, ви дізнаєтесь про це у випадку ZFS, отримуючи помилку вводу / виводу замість пошкоджених даних.
CVn

@ MichaelKjörling ні, це не "гарантує" (лише зменшує ймовірність виявлених помилок відносно перевірок лише на диск, на кількість, яку ще ніхто не визначив кількісно! Тому ніхто не знає, наскільки корисна контрольна сума ZFS :)), плюс ви можете використовувати прості обгортки "читання" та "запис", які прозоро виконують контрольну суму для вас. Не потрібно ставити цю вигадливу річ у простір ядра.
печерний чоловік

3
@caveman ні, zfs не на тему. Неможливо також реалізувати RAID, які не є mdadm. Я хочу знати про mdadm. Я вже проголосував за цю відповідь, наскільки я можу, а ваші коментарі до тематичної відповіді, заповнивши більше інформації про поза тему відповідь не допомагає в початковому запитанні.
BeowulfNode42

3

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

Багато дисків використовують ECC (коди для виправлення помилок) для виявлення помилок читання. Якщо дані пошкоджені, ядро ​​повинно отримати URE (непоправну помилку читання) для цього блоку від підтримуючого накопичувача ECC. За цих обставин (і тут є виняток нижче), копіювання пошкоджених або порожніх даних над хорошими даними може означати божевілля. У цій ситуації ядро ​​повинно знати, що є хорошими даними, а які - поганими. Згідно з програмою It is 2010 і RAID5 все ще працює ... стаття:

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

Однак тепер для винятку: якщо накопичувач не підтримує ECC, на диску накопичується пошкодження даних або прошивка особливо не працює, то URE може не повідомлятися, а пошкоджені дані надаватимуться ядру. У випадку невідповідності даних: здається, що якщо ви використовуєте 2-дисковий RAID1 або RAID5, то ядро ​​не може знати, які дані є правильними, навіть якщо вони не в деградованому стані, оскільки існує лише один паритет блок, і не було повідомлено про URE. У 3-дискових RAID1 або RAID6 один пошкоджений блок, який не позначений URE, не відповідав би надмірному паритету (у поєднанні з іншими асоційованими блоками), тому належне автоматичне відновлення повинно бути можливим.

Мораль історії полягає в тому, щоб використовувати диски з ECC. На жаль, не всі диски, що підтримують ECC, рекламують цю функцію. З іншого боку, будьте обережні: я знаю когось, хто використовував дешеві SSD в 2-дисковому RAID1 (або 2 копії RAID10). Один із приводів повертав випадкові пошкоджені дані при кожному зчитуванні певного сектору. Пошкоджені дані були автоматично скопійовані над правильними даними. Якщо SSD використовував ECC і працював належним чином, ядро ​​повинно було вжити належних коригувальних дій.


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

Біт гниття, я припускаю, що ви маєте на увазі біти випадково гортати. У будь-якому випадку ECC призначений для виявлення перевернутих бітів. Згідно з Вікіпедією, виправлення помилок Рід-Соломон - це поширений формат ECC, винайдений у 1960 році і досі використовується на дисках Blu-Ray + HDD. Якщо ви виявите, що цей алгоритм є надзвичайно надійним, то на ваше запитання слід відповісти, оскільки гідне сучасне обладнання, за визначенням, так само добре, якщо не краще, навіть якщо ви не знаєте пристойності апаратного обладнання просто дивлячись на це.
sudoman

1
Бітова гниття також може виникнути через інші проблеми, наприклад, коли якась проблема призводить до того, що головки приводу неправильно вирівняні там, де вона думає, що це пише, і вона перекидається на сусідні сектори. Це може виправити сектор, над яким він мав намір працювати, але сусідній сектор буде пошкоджений. Якщо трапилось, що вони записали дані + ecc таким чином, що ECC для сусіднього сектору повідомляє, що він є нормальним, то привід ніколи не дізнається, що це проблема. Набагато ймовірніше, що деякі негідні програми вказують накопичувачу записувати погані дані, hdd сумлінно зберігатиме ці погані дані. наприклад, погана команда dd
BeowulfNode42

2

Для захисту, яку я хотів би, я б перейшов з RAID6 + нормальне резервне копіювання за межами сайту в двох місцях.

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


1
але які можливості виявлення / корекції бітових гнилей це пропонує?
BeowulfNode42

1
RAID6 з частим скрабірованием забезпечує деякий захист від бітової гнилі, оскільки подвійний паритет ефективно створює три версії одного блоку, тому "голосування" може проводитись за те, яка версія потрібна. AFAIK, очищення RAID6 в Linux-dm-raid робить саме це, будь ласка, виправте мене, якщо я помиляюся.
P.Péter

1
@ P.Péter Я усвідомлюю, що математика, яка займається, МОЖЕ використовувати систему голосування, але чи mdadm? Чи знаєте ви якусь документацію з цього приводу чи мали особистий досвід, який призвів вас до такого висновку. Особливо з огляду на відповідь Ітана.
BeowulfNode42

Це було деякий час тому, але я смутно пам'ятаю, як читати механізми mdadm RAID6, перш ніж коментувати. Вибачте, не дуже конкретно. :( Я думаю, ми могли б використати справжнього експерта з mdadm ...
P.Péter

2

У мене недостатньо респондентів для коментарів, але я хочу зазначити, що система mdadm в Linux НЕ виправляє жодних помилок. Якщо ви скажете йому "виправити" помилки під час скрабування, скажімо, RAID6, якщо є невідповідність, він "виправить" це, вважаючи, що частини даних є правильними та перераховує паритет.


1
Це здається малоймовірним, якщо я вас неправильно не зрозумію. Ви маєте на увазі, що дані з пошкоджених блоків часто копіюються через правильні блоки? Це вимагатиме, щоб поганий блок не надходив з диска, який підтримує ECC (і, таким чином, не повідомить про URE), і ви використовуєте RAID5 або 2 копію RAID1 (замість RAID6, як ви запропонували.)
sudoman

@sudoman, під час скрабу, якщо підсистема Linux MD виявляє невідповідність між даними та паритетом, вона сліпо припускає, що паритет є неправильним, і повторно пише його на основі даних. Можна використовувати подвійний паритет RAID 6, щоб визначити, що неправильно, але підсистема Linux MD цього не робить.
Марк

1
Етане, я не думаю, що ти маєш посилання на цю інформацію? або приклади особистого досвіду, які ви готові поділитися тим, що ви пам’ятаєте? З огляду на перепони, які цей Q породив, навіть анекдотична інформація була б корисною. Оскільки цей Q був опублікований, у мене виникли проблеми з mdadm RAID1 для завантажувального диска, на (дешевих) USB-палках, коли 1 з них пішов погано. Пізніше деяке розслідування вказує на те, що у відмовного USB-накопичувача недостатньо або будь-яка перевірка помилок, або це просто не вдалося записати дані в деякі блоки та не призвести до помилки запису. Довелося перевстановити ОС.
BeowulfNode42

-2

трохи гнила фуд. впевнений ...

Я думаю, вам потрібно поговорити з SEAGATE. (забудьте? це виправдання)? тепер усі накопичувачі мають 100-бітну корекцію ECC, яку вам потрібно довести в першу чергу.
Б'юсь об заклад, що ви не можете. (це турбуватися про FUD правильно?), як страх перед привидами чи №13? і не робиться тут. нульовий доказ трапився. і ще гірше - немає доказів причини.

Спочатку визначте, що означає бітова гниль. ой ... HDD: ECC перевіряє дані (навіть 1 біт) щодо 100-бітового сховища ECC. якщо це неправильно, він виправляє його, якщо він продовжує виходити з ладу двигуна SMART, напевно, на дисках SAS, він логічно замінює кластер або сектор на той, який є хорошим. за допомогою запасних кластерів. це відновлює шкоду. Так, всі диски зростають поганими бітами від першого до кінця, від першого диска IBM до СЕЙЧАС. але зараз ми займаємось самостійним ремонтом. Прочитайте повний документ White Seagate. нескінченні там, і дізнайтеся, як працює накопичувач. добре?

це триває, поки у вас не закінчиться запасних частин (hdd brain, smart), а потім SMART кричить кінець життя. (або навіть більш рано, як це робить HP), скажімо, контролер HP P420, він спостерігає за цим весь час. Мій навіть надсилає мені електронні листи, показуючи БЛИЗЬКИЙ РЕЗЕРВНИЙ кластер. Іноді запчастини проходять швидше, швидше за все, це впевнений знак (10 років, безумовно, менше у невдалій саті.

Я називаю BOGUS, а FUD на біт гнилі.

Думаю, хтось із іграшкових ПК записав дані неправильно, з будь-яких причин. не працює пам'ять ECC ?? На жаль, справжні сервери мають ECC RAM. вірусом заражений. або втратили живлення під час запису (немає UPS>?)? або має погану пам'ять. або пошкоджено ШОЕ. Або блок живлення видає тонни шуму (погано)

Я дзвоню сюди FUD. вибачте,


1
Щойно я уточнив, що я говорив про свою домашню систему, тому апаратне забезпечення ECC та сервер не входить у мій ціновий діапазон бюджету. Моя домашня лабораторія набагато більше схильна до несподіваних втрат електроенергії навіть із міні-підйомами чи іншими випадковими подіями, на кшталт вежі, що перевалюється чи щось подібне. Існує безліч інших способів, коли HDD повинен повідомити про збереження неправильних даних, а жорсткий диск - для зберігання бітів ECC для цих неправильних даних. Мені все одно, як траплялися помилки, я хочу їх легко виправити.
BeowulfNode42
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.