Як слідкувати за нальотом файлової системи BTRFS на предмет помилок?


11

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

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


1
Чому б ви хотіли, щоб система відключила raid1 при відмові диска? Цей вид перемагає мету, чи не так? Я маю на увазі, що у вас можуть бути якісь причини для цього, але за замовчуванням цього робити не слід
Петро

У мене був RAID5, у якого два диски вийшли з ладу за короткий час один одного. Я хотів створити нову систему, використовуючи дзеркальний наліт BTRFS, і швидко реагував на проблеми з керуванням автомобілем (не обов'язково несправність приводу), щоб зменшити ймовірність подальшого пошкодження, надаючи час на вирішення первинної причини. Я сподіваюся, що дзеркало BTRFS в один бік колись добре працюватиме.
Іоан

@Ioan: Тому RAID-5 не завжди рекомендується, а замість нього слід використовувати RAID-6. Resilver піддасть велике навантаження на всі диски, що може призвести до виходу з ладу другого диска, який може зіпсуватись. На відміну від RAID-5, RAID-6 може це впоратися (ви також можете переустановити його лише для читання та оновити резервну копію перед заміною другого диска).
основні6

Відповіді:


18

На додаток до звичайної системи ведення журналів, BTRFS має команду stats , яка відслідковує помилки (включаючи помилки читання, запису та пошкодження / контрольні суми) на диск:

# btrfs device stats /
[/dev/mapper/luks-123].write_io_errs   0
[/dev/mapper/luks-123].read_io_errs    0
[/dev/mapper/luks-123].flush_io_errs   0
[/dev/mapper/luks-123].corruption_errs 0
[/dev/mapper/luks-123].generation_errs 0

Таким чином, ви можете створити просту кореневу роботу:

MAILTO=admin@myserver.com
@hourly /sbin/btrfs device stats /data | grep -vE ' 0$'

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

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

@monthly /sbin/btrfs scrub start -Bq /data

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

Оновлення : покращений греп, як запропонував Майкл Кьорлінг, дякую.

Оновлення 2 : Додаткові примітки щодо скрабування та звичайних операцій зчитування (це не стосується лише BTRFS):
Як вказує Іоан, скраб може зайняти багато годин, залежно від розміру та типу масиву (та інших факторів), навіть більше доби в деяких випадках. І це активне сканування, воно не виявить майбутніх помилок - мета скрабу - знайти та виправити помилки на ваших накопичувачах у той момент часу. Але як і в інших системах RAID, рекомендується планувати періодичні скраби. Це правда, що типова операція вводу-виводу, як-от читання файлу, перевіряє, чи справді прочитані дані є правильними. Але врахуйте просте дзеркало - якщо перша копія файлу пошкоджена, можливо, накопичувачем, який збирається загинути, але друга копія, яка є правильною, насправді читається BTRFS, тоді BTRFS не дізнається, що є корупція на одному з приводів. Це просто тому, що були отримані запитувані дані,Це означає, що навіть якщо ви спеціально прочитали файл, який, на вашу думку, пошкоджений на одному диску, немає жодної гарантії, що ця операція читання виявить пошкодження.
Тепер припустимо, що BTRFS читає лише з хорошого диска, не запускається скраб, який би виявляв пошкодження на поганому диску, а потім хороший диск також поганий - результатом буде втрата даних (принаймні, BTRFS знає які файли все ще є правильними і все одно дозволять вам їх прочитати). Звичайно, це спрощений приклад; насправді BTRFS не завжди читає з одного накопичувача та ігнорує інший.
Але справа в тому, що періодичні скраби є важливими, оскільки вони знайдуть (і виправлять) помилки, які регулярні операції з читання не обов'язково виявлять.

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

З іншого боку, якщо накопичувач раптово зник (відключений або повністю мертвий, а не вмирає і не створює помилок), це був би несправний диск (ZFS позначив би такий диск як НЕВІДКЛЮЧЕНИЙ). На жаль, BTRFS може не усвідомлювати, що диск не встановлений під час монтажу файлової системи, як зазначено в цій статті списку розсилки від 09/2015 (можливо, що це було виправлено):

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

https://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg46598.html

До цього часу в dmesg було б багато повідомлень про помилки, тож отримання тексту dmesg може бути не надійним.
Для сервера, що використовує BTRFS, може бути ідеєю встановити спеціальну перевірку (завдання cron), яка надсилає попередження, якщо принаймні один з накопичувачів у RAID-масиві відсутній, тобто вже недоступний ...


1
Невже щось не grep -vE ' 0$'буде краще?
CVn

@ MichaelKjörling: Гарна ідея, я оновив свою відповідь, дякую!
основні6

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

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

@ basic6: Абсолютно, і це чудово для цього. Однак це не робить нічого для виявлення помилок під час звичайної роботи, наприклад, деградованого масиву BTRFS до наступного скрабу. Мовчазну корупцію можна вирішити за допомогою щомісячного скрабу для ефективності, але це занадто довго для інших помилок.
Іоан

4

Станом на btrfs-progs v4.11.1 stats є опція --check, яка поверне ненульове значення, якщо будь-яке значення не дорівнює нулю, усуваючи потребу в регулярному вираженні.

статистика пристрою -c /


3

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

btrfs device stats /

Після перезавантаження btrfs показує відсутні диски, але це може бути пізно.

btrfs fi show

2

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

http://marc.merlins.org/perso/btrfs/post_2014-03-19_Btrfs-Tips_-Btrfs-Scrub-and-Btrfs-Filesystem-Repair.html

Наведене вище посилання містить додаткові деталі для налаштування скрипту ( secпакета на Debian або SEC ), призначеного для моніторингу журналу загального призначення, щоб діяти на несподівані повідомлення журналу щодо BTRFS. Це також залежить від регулярного планового скрабування файлової системи, щоб перевірити наявність біт-гнилі та випромінювати записи журналу як попереджувальний захід. Нижче представлений уривок, специфічний для сценарію SEC:

Як налаштувати сек, корелятор подій для повідомлення про помилки або попередження файлової системи btrfs

Після установки sec.pl (apt-get install sec на debian або http://simple-evcorr.sourceforge.net/ ), встановіть 2 конфігураційні файли нижче.

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

polgara:~\# cat /etc/default/sec  
\#Defaults for sec  
RUN_DAEMON="yes"  
DAEMON_ARGS="-conf=/etc/sec.conf -input=/var/log/syslog -pid=/var/run/sec.pid -detach -log=/var/log/sec.log"

polgara:~# cat /etc/sec.conf  
\# http://simple-evcorr.sourceforge.net/man.html  
\# http://sixshooter.v6.thrupoint.net/SEC-examples/article.html  
\# http://sixshooter.v6.thrupoint.net/SEC-examples/article-part2.html  
type=SingleWithSuppress  
ptype=RegExp  
pattern=(?i)kernel.*btrfs: (?!disk space caching is enabled|use ssd allocation|use .* compression|unlinked .* orphans|turning on discard|device label .* devid .* transid|detected SSD devices, enabling SSD mode|has skinny extents|device label|creating UUID tree|checking UUID tree|setting .* feature flag|bdev.* flush 0, corrupt 0, gen 0)  
window=60  
desc=Btrfs unexpected log  
action=pipe '%t: $0' /usr/bin/mail -s "sec: %s" root

1

Звучить як завдання для моніторингу системи. Існує чек, який реалізує API плагінів Nagios під назвою: check_btrfs . Як ви бачите у вихідному коді, він має функцію, check_dev_statsяка називається, що перевіряє статистику пристрою і стане критичною, якщо будь-яке значення не дорівнює нулю. Він також перевіряє питання щодо розподілу. Незрозумілим є те, як поводиться чек, якщо один диск відсутній або переходить в автономний режим .

PS: Плагін упакований в Debian: Monitoring-plugins-btrfs

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