Як перевірити RAID-адреси "mdadm" під час роботи?


41

Я починаю отримувати колекцію комп’ютерів вдома і для їх підтримки я маю свій "серверний" linux box з RAID-масивом.

На даний момент mdadm RAID-1, RAID-5колись у мене буде більше дисків (і тоді RAID-6я сподіваюся). Однак я чув різні історії про пошкодження даних на одному накопичувачі, і ви ніколи не помічаєте через інший диск, який використовується, аж до моменту, коли перший привід виходить з ладу, і ви виявите, що ваш другий диск також загвинчується (і 3-й, 4-й, 4-й , 5-й привід).

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

Як би ви перевірили працюючий RAID, щоб переконатися, що всі диски все ще працюють нормально?

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


Здається, ви вже на правильному шляху, вам просто потрібно встановити крон, щоб надіслати вам результати smartctl для ваших накопичувачів.
в'язень

Відповіді:


56

Сенс RAID із надмірністю полягає в тому, що він буде тривати так довго, як тільки може, але очевидно, він виявить помилки, які переводять його в деградований режим, наприклад, несправний диск. Ви можете показати поточний стан масиву за допомогою mdadm -D:

# mdadm -D /dev/md0
<snip>
       0       8        5        0      active sync   /dev/sda5
       1       8       23        1      active sync   /dev/sdb7

Крім того, статус повернення не mdadm -Dє нульовим, якщо є якась проблема, наприклад, збій з компонента (1 вказує на помилку, яку компенсує режим RAID, а 2 - на повний збій).

Ви також можете отримати короткий підсумок про всі пристрої RAID, переглянувши його /proc/mdstat. Ви також можете отримати інформацію про RAID-пристрій /sys/class/block/md*/md/*; дивіться Documentation/md.txtв документації на ядро. Деякі /sysзаписи записуються також; Наприклад , ви можете запустити повну перевірку md0з echo check >/sys/class/block/md0/md/sync_action.

Окрім цих точкових перевірок, mdadm може повідомити вас, як тільки станеться щось погане. Переконайтеся , що у вас є MAILADDR rootв /etc/mdadm.conf(деякі дистрибутиви (наприклад Debian) встановити це автоматично). Тоді ви отримаєте сповіщення електронною поштою, як тільки з’явиться помилка (деградований масив) .

Переконайтеся, що ви надсилаєте пошту до кореня на локальній машині (деякі сучасні дистрибутиви це опускають, оскільки вони вважають, що вся електронна пошта надходить через зовнішніх провайдерів - але отримання локальної пошти необхідне для будь-якого серйозного системного адміністратора). Перевірте це, посилаючи корінь пошту: echo hello | mail -s test root@localhost. Зазвичай для правильної настройки електронної пошти потрібні дві речі:

  • Запустіть MTA на локальній машині. MTA повинен бути налаштований принаймні, щоб дозволити доставку місцевої пошти. Усі дистрибутиви мають відповідні MTA, вибирайте що завгодно (але не нульову пошту, якщо ви хочете, щоб електронна пошта доставлялася локально).
  • Перенаправляйте пошту, що надходить на системні акаунти (принаймні root) на адресу, яку ви регулярно читаєте. Це може бути ваш обліковий запис на локальній машині або зовнішня адреса електронної пошти. У більшості MTA адреси можна налаштувати в /etc/aliases; у вас повинен бути такий рядок

    root: djsmiley2k
    

    для місцевої доставки, або

    root: djsmiley2k@mail-provider.example.com
    

    для віддаленої доставки. Якщо ви виберете віддалену доставку, переконайтеся, що ваш MTA налаштований для цього. Залежно від вашого MTA, вам може знадобитися запустити newaliasesкоманду після редагування /etc/aliases.


Чи можете ви пояснити, чому nullmailer не слід використовувати? Це через причини, згадані в unix.stackexchange.com/questions/1449/… ? Який MTA ви б рекомендували?
Камерон Мартін

@CameronMartin Nullmailer лише пересилає пошту на віддалену машину, вона не здійснює локальну доставку. Ви можете використовувати його, якщо у вас десь є сервер SMTP, який приймає пошту з вашого пристрою, але не, якщо ви доставляєте пошту локально. Я відредагував свою відповідь, щоб уточнити.
Жил "ТАК - перестань бути злим"

19

Ви можете примусити перевірити весь масив, поки він перебуває в мережі. Наприклад, щоб перевірити масив на /dev/md0, запустіть як root:

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

У мене також є робота з cron, яка виконує таку команду раз на місяць:

tar c /dir/of/raid/filesystem > /dev/null

Це не ретельна перевірка самого накопичувача, але це змушує систему періодично перевіряти, що (майже) кожен файл може бути успішно прочитаний з диска. Так, деякі файли будуть зчитуватися з кешу пам'яті замість диска. Але я вважаю, що якщо файл знаходиться в кеш-пам'яті, то він успішно зчитується з диска нещодавно, або збирається записати на диск, і будь-яка з цих операцій також виявить помилки накопичувача. У будь-якому випадку, виконання цієї роботи тестує найважливіший критерій масиву RAID ("Чи можу я успішно прочитати свої дані?"), І за три роки я працював у своєму масиві. ця команда, яка її виявила.

Одне невелике попередження - якщо ваша файлова система велика, то ця команда займе багато часу; моя система займає близько 6 годин / TiB. Я запускаю його за допомогою ioniceтого, щоб решта системи не перестала зупинятися під час перевірки накопичувача:

ionice -c3 tar c /dir/of/raid/filesystem > /dev/null

Зверніть увагу, що це ioniceспрацює, лише якщо ви використовуєте (за замовчуванням) планувальник вводу / виводу CFQ (за замовчуванням).
Тотор

Отже, це може бути очевидним для більшості, але це не для мене - як запуск сценарію, вихід якого перенаправлений на devnull, насправді сповіщає про щось? Чи трапляється так, що якщо "tar" зіткнеться з будь-якими помилками, вони поширяться аж до демона mdadm, який (імовірно) надішле вам електронний лист?
ljwobker

Моє запитання до вас, суворо, - як ви підбираєте помилки на гугл, якщо він запускається з роботи з кроном? Де це виводиться? Я б подумав, що ви додасте перенаправлення для stderr до файлу, за яким можна періодично відстежувати, або хвіст його друкується на консолі відкриття вікна терміналу :)
Madivad

1
@ljwobker Вибачте за відновлення старої теми. Я думаю, що метою команди tar тут є спроба прочитати весь вміст тома. Це дозволить переконатися, що весь том все ще читається, і дасть можливість md виявити поганий диск.
mikepj

1
Якщо він надходить з cronjob, cron зазвичай надсилатиме весь його вихід безпосередньо до mailto = location, якщо він встановлений, інакше в root. Однак ... мені цікаво, чи не буде дд кращою смолою, для нижчих накладних витрат?
djsmiley2k - CoW

11

пакет "mdadm" Debian і Ubuntu містить файл

/etc/cron.d/mdadm

яка по черзі в першу неділю кожного місяця виконує команду

/usr/share/mdadm/checkarray --cron --all --idle --quiet

це дозволить перевірити всі ваші масиви на відповідність (якщо ви не встановите значення AUTOCHECK на значення false у / etc / default / mdadm ). Звіт буде надісланий користувачеві "root" (переконайтеся, що ви отримуєте такі електронні листи).


8

Я використовую цю просту функцію для перевірки /proc/mdstat:

#Health of RAID array
raid() { awk '/^md/ {printf "%s: ", $1}; /blocks/ {print $NF}'  /proc/mdstat; }

акуратний! мені подобається стиль :) .. це саме те, що я шукав, щоб укласти в MOTD :) спасибі!
Джиріслав
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.