Visitors have accessed this post 13567 times.

Программный RAID в Linux. Часть 2

5
434
13567
18 декабря 2020 9:22
Автор: Rebrain Me
Linux

Visitors have accessed this post 13567 times.

Автор — Максим Рязанов

Давайте продолжим нашу тему про RAID. Напомню, что первую часть статьи можно найти тут.

Обслуживание RAID

Очистка RAID — Scrubbing

Рекомендуется регулярно выполнять scrubbing данных, чтобы проверять и исправлять ошибки. В зависимости от размера / конфигурации массива очистка может занять несколько часов.

Чтобы инициировать scrubbing данных:

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

Операция проверки сканирует диски на наличие поврежденных секторов и автоматически восстанавливает их. Если она находит хорошие сектора, которые содержат неверные данные (данные в секторе не согласуются с тем, что это должно быть по данным с другого диска), то никаких действий не предпринимает, но событие регистрируется (см. ниже). Это позволяет администраторам проверять данные в секторе и полученные при восстановлении секторов из избыточной информации и выбирать те, что нужно хранить.

Как и во многих задачах, относящихся к mdadm, состояние scrub можно узнать, прочитав / proc / mdstat.

Пример:

cat /proc/mdstat 

Personalities : [raid6] [raid5] [raid4] [raid1]  

md0 : active raid1 sdb1[0] sdc1[1] 

      3906778112 blocks super 1.2 [2/2] [UU] 

      [>....................]  check =  4.0% (158288320/3906778112) finish=386.5min speed=161604K/sec 

      bitmap: 0/30 pages [0KB], 65536KB chunk

Чтобы безопасно остановить текущий scrubbing данных:

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

Примечание. Если система будет перезагружена после того, как частичный scrubbing был приостановлен, он начнется заново.

Когда scrubbing завершен, администраторы могут проверить, сколько блоков (если они есть) были помечены как плохие:

cat < /sys/block/md0/md/mismatch_cnt

Общие замечания по scrubbing:

В качестве альтернативы пользователи могут использовать восстановление в /sys/block/md0/md/sync_action, но это не рекомендуется, поскольку в случае обнаружения несоответствия в данных они будут автоматически обновляться. Опасность заключается в том, что мы действительно не знаем, является ли правильным паритет или блок данных (или какой блок данных в случае RAID1). И получит ли операция правильные данные вместо неверных.

Хорошей идеей будет установить задание cron как root для планирования периодической очистки. Смотрите raid-check, который может помочь с этим. Чтобы выполнить периодическую очистку с использованием systemd таймеров вместо cron, см. раздел raid-check-systemd, который содержит тот же сценарий вместе со связанными файлами модулей таймера systemd.

Для типичных массивов с жесткими дисками scrubbing может занимать приблизительно шесть секунд на гигабайт (то есть один час сорок пять минут на терабайт), поэтому спланируйте запуск задания cron или таймера соответствующим образом.

Заметки по scrubbing для RAID1 и RAID10

Из-за того, что записи RAID1 и RAID10 в ядре не буферизованы, массив может иметь ненулевое число несоответствий, даже если он исправен. Эти ненулевые значения будут существовать только в переходных областях данных, где они не представляют проблемы. Но мы не можем определить разницу между счетчиком, отличным от 0, который находится просто в переходных данных, и счетчиком, отличным от 0, который указывает на реальную проблему. Это является источником ложных срабатываний для массивов RAID1 и RAID10. Тем не менее по-прежнему рекомендуется регулярно выполнять очистку, чтобы обнаруживать и исправлять любые поврежденные сектора в устройствах.

Удаление устройств из массива

Можно удалить устройство из массива, сначала пометив его как неисправное:

mdadm --fail /dev/md0 /dev/sdX

И уже после непосредственно удалить из массива:

mdadm --remove /dev/md0 /dev/sdX

Для удаления устройства навсегда (например, чтобы использовать его отдельно с этого момента): введите две команды, описанные выше, затем:

mdadm --zero-superblock /dev/sdX

Предупреждение:

  • Не вводите эту команду для линейных массивов или массивов RAID0, иначе произойдет потеря данных!
  • Повторное использование удаленного диска без обнуления суперблока приведет к потере всех данных при следующей загрузке. (после того как mdadm попытается использовать его как часть массива raid).

Для того чтобы прекратить использовать массив:

  1. Отмонтируйте его.
  1. Остановите массив с помощью команды: mdadm —stop /dev/md0.
  1. Повторите три команды, описанные в начале этого раздела, на каждом устройстве.
  1. Удалите соответствующую строку из /etc/mdadm.conf.

Добавление нового устройства в массив

Добавление новых устройств с помощью mdadm можно выполнить в работающей системе с подключенными устройствами. Разбейте новое устройство, используя ту же схему, что и в массивах, как описано выше.

Соберите массив RAID, если он еще не собран:

mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1

Добавьте новое устройство в массив:

mdadm --add /dev/md0 /dev/sdc1

Это не должно занять много времени для mdadm.

В зависимости от типа RAID (например, с RAID1), mdadm может добавить устройство в качестве запасного без синхронизации данных на нем. Вы можете увеличить количество дисков, используемых RAID, при помощи —grow с опцией —raid-devices. Например, чтобы увеличить массив до четырех дисков:

mdadm --grow /dev/md0 --raid-devices=4

И наблюдать за прогрессом добавления:

cat < /proc/mdstat

Проверить, что устройство было добавлено к массиву, можно командой:

mdadm --misc --detail /dev/md0

Примечание: для массивов RAID0 вы можете получить следующее сообщение об ошибке:

mdadm: add new device failed for /dev/sdc1 as 2: Invalid argument

Это связано с тем, что приведенные выше команды добавят новый диск как «запасной», но RAID0 не имеет резервных дисков. Если вы хотите добавить устройство в массив RAID0, вам нужно «увеличить» его и «добавить» командой, показанной ниже:

mdadm --grow /dev/md0 --raid-devices=3 --add /dev/sdc1

Увеличение размера тома RAID

Если в массиве RAID установлены диски большего размера или размер раздела увеличен, есть возможность увеличить том RAID, чтобы заполнить больший доступный объем. Этот процесс можно начать, следуя приведенным командам для замены дисков. После того, как том RAID был перестроен на большие диски, его необходимо «увеличить», чтобы заполнить пространство.

mdadm --grow /dev/md0 --size=max

Затем, возможно, потребуется изменить размер разделов на томе RAID / dev / md0. Наконец нужно изменить файловую систему в разделе. Если разбиение делали с помощью gparted, это произойдет автоматически. Если использовали другие инструменты, размонтируйте, а затем измените размер файловой системы вручную.

umount /storage 

fsck.ext4 -f /dev/md0p1 

resize2fs /dev/md0p1

Изменение ограничения скорости синхронизации

Синхронизация может занять некоторое время. Если машина не нужна для других задач, ограничение скорости можно увеличить.

Проверьте текущий предел скорости:

cat < /proc/sys/dev/raid/speed_limit_min 

1000 

cat < /proc/sys/dev/raid/speed_limit_max 

200000

Увеличим имеющиеся лимиты:

echo 400000 >/proc/sys/dev/raid/speed_limit_min 

echo 400000 >/proc/sys/dev/raid/speed_limit_max 

Затем проверьте скорость синхронизации и примерное время окончания. 

cat /proc/mdstat 




 Personalities : [raid1] 

 md0 : active raid1 sda3[2] sdb3[1] 

       155042219 blocks super 1.2 [2/1] [_U] 

       [>....................]  recovery =  1.3% (2136640/155042219) finish=158.2min speed=16102K/sec 




 unused devices: <none>

Используя sysctl, также можно изменить нижний и верхний предел скорости./etc/sysctl.d/md_speedX

# Set maximum and minimum speed of raid resyncing operations 

dev.raid.speed_limit_max = 10000 

dev.raid.speed_limit_min = 1000

Если mdadm скомпилирован как модуль md_mod, эти настройки доступны только после его загрузки. Если настройки должны быть загружены через /etc/sysctl.d, модуль md_mod может быть загружен заранее через /etc/modules-load.d.

Мониторинг

Простой однострочник, который распечатывает состояние устройств RAID:

awk '/^md/ {printf "%s: ", $1}; /blocks/ {print $NF}' </proc/mdstat 





md1: [UU] 

md0: [UU]

Наблюдение за mdstat

watch -t 'cat /proc/mdstat'

Если желаете, с использованием Tmux:

tmux split-window -l 12 "watch -t 'cat /proc/mdstat'"

Отслеживание ввода-вывода с iotop

Пакет iotop отображает статистику ввода / вывода для процессов. Используйте эту команду для просмотра ввода-вывода для потоков RAID.

iotop -a -p $(sed 's, , -p ,g' <<<pgrep "_raid|_resync|jbd2")

Отслеживание ввода-вывода с iostat

Утилита iostat из пакета sysstat отображает статистику ввода / вывода для устройств и разделов.

iostat -dmy 1 /dev/md0 

iostat -dmy 1 # all

Рассылка по событиям

Для этого требуется почтовый сервер smtp (sendmail) или хотя бы сервер пересылки электронной почты (ssmtp / msmtp). Возможно, самое простое решение — это использовать пакет dma, он очень маленький (устанавливает до 0,08 МБ) и не требует настройки.

Отредактируйте /etc/mdadm.conf, указав адрес электронной почты, на который будут поступать уведомления.

Примечание: При использовании dma пользователи могут просто отправлять почту непосредственно на имя пользователя на локальном хосте, а не на внешний адрес электронной почты.

Для тестирования конфигурации:

mdadm --monitor --scan --oneshot --test

mdadm включает в себя mdmonitor.service для мониторинга, поэтому вам больше нечего делать. Если вы не зададите адрес электронной почты в /etc/mdadm.conf, эта служба не будет работать. Если вы не хотите получать почту о событиях mdadm, сбой можно игнорировать; если вы не хотите получать уведомления и чувствительны к сообщениям об ошибках, вы можете замаскировать устройство.

Альтернативный метод

Чтобы избежать установки почтового сервера smtp или сервера пересылки электронной почты, вы можете использовать инструмент S-nail (не забудьте настроить), уже установленный в вашей системе.

Создайте файл с именем /etc/mdadm_warning.sh:

#!/bin/bash 

event=$1 

device=$2 




echo " " | /usr/bin/mailx -s "$event on $device" '''destination@email.com'''

И дайте ему разрешение на выполнение chmod + x /etc/mdadm_warning.sh.Затем добавьте это в mdadm.conf

PROGRAM /etc/mdadm_warning.sh

Для тестирования и включения используйте те же операции, что и в предыдущем методе.

Отладка

Если вы получаете сообщение об ошибке, когда перезагружаетесь из-за «недопустимой магии суперблока raid», и у вас есть дополнительные жесткие диски, отличные от тех, на которые вы установили, убедитесь, что порядок этих дисков правильный. Во время установки RAID-устройства могут быть hdd, hde и hdf, но во время загрузки — hda, hdb и hdc. Отрегулируйте строку ядра соответственно.

Error: «kernel: ataX.00: revalidation failed»

Если у вас внезапно появляются сообщения об ошибках типа:

Feb  9 08:15:46 hostserver kernel: ata8.00: revalidation failed (errno=-5)

Это не обязательно означает, что диск сломан. Возможно, вы просто изменили настройки APIC или ACPI в параметрах BIOS или ядра. Поменяйте их обратно, и все будет хорошо. Обычно должно помочь отключение ACPI и / или ACPI.

Запуск массивов только для чтения

Когда запускается массив md, суперблок будет записан, и может начаться повторная синхронизация. Для запуска только для чтения установите в модуле ядра параметр md_mod start_ro. После этого новые массивы получают режим ‘auto-ro’, который отключает все внутренние операции ввода-вывода (обновления суперблока, повторную синхронизацию, восстановление) и автоматически переключается на ‘rw’, когда поступает первый запрос на запись.

Примечание: массив может быть переведен в режим ‘только чтение’ с использованием mdadm —readonly перед первым запросом на запись. Повторная синхронизация может быть запущена без записи с использованием mdadm —readwrite.

Для установки параметра при загрузке добавьте md_mod.start_ro=1 к строке ядра.

Или установите его во время загрузки модуля из файла /etc/modprobe.d/ или непосредственно из /sys/:

echo 1 > /sys/module/md_mod/parameters/start_ro

Восстановление из сломанного или пропавшего диска в RAID

Вы можете получить вышеупомянутую ошибку, когда один из дисков ломается. В этом случае вам придется заставить raid по-прежнему включаться даже без одного диска. Введите:

mdadm --manage /dev/md0 --run

Теперь вы сможете смонтировать его снова примерно так:

mount /dev/md0

Теперь рейд должен снова работать и быть доступным для использования, однако без одного диска! Добавьте один раздел диска. Как только это будет сделано, вы можете добавить новый диск в рейд, выполнив:

mdadm --manage --add /dev/md0 /dev/sdd1

Если вы пропишете:

cat < /proc/mdstat

Вы, вероятно, видите, что рейд сейчас активен и восстанавливается.

Вы также можете обновить свою конфигурацию.

Эталонное тестирование (Benchmarking)

Существует несколько инструментов для бенчмаркинга RAID. Самое заметное улучшение — это увеличение скорости при чтении нескольких потоков с одного тома RAID.

tiobench оценивает эти улучшения при помощи измерения полнопроточного ввода-вывода на диске.

bonnie++ проверяет модель базы данных, пробуя доступ к одному или нескольким файлам, а также создавая, читая и удаляя небольшие файлы, которые могут имитировать использование таких программ, как Squid, INN или директорию почтового ящика в формате электронной почты. Прилагаемая программа ZCAV проверяет производительность различных зон жесткого диска без записи данных.

hdparm не следует использовать для тестирования RAID, поскольку он дает противоречивые результаты.

И напоследок, несколько полезных ссылок:

mdadm

Forum threads

RAID with encryption

Linux/Fedora: Encrypt /home and swap over RAID with dm-crypt by Justin Wells

От редакции

Если вам интересно посещать бесплатные онлайн-мероприятия по DevOps, Kubernetes, Docker, GitlabCI и др. и задавать вопросы в режиме реального времени, подключайтесь к каналу DevOps by REBRAIN

*Анонсы мероприятий каждую неделю

Практикумы для специалистов по инфраструктуре и разработчиков — https://rebrainme.com.

Наш Youtube-канал — https://www.youtube.com/channel/UC6uIx64IFKMVmj12gKtSgBQ.

Агентство Fevlake, проектируем и поддерживаем IT-инфраструктуры с 2012 года — https://fevlake.com.

Комментарии (3)
Введено символов из возможных
Не отвечать

buy cialis online https://sehytv.wordpress.com/

Appreciate it, A good amount of forum posts!

buy cialis without a doctor’s prescription https://gewrt.usluga.me/

Wonderful write ups, Thank you.

canadian medications https://hekluy.ucraft.site/

Incredible loads of helpful knowledge.

Generic cialis tadalafil https://hertnsd.nethouse.ru/

Seriously a good deal of beneficial information!

online prescriptions without a doctor https://kwersd.mystrikingly.com/

Wonderful material. Thanks a lot.

Cialis tadalafil https://kaswesa.nethouse.ru/

You have made your stand pretty well..

purchasing cialis on the internet https://site955305180.fo.team/

You actually said it very well!

best canadian pharmacy http://kawerf.iwopop.com/

Thanks, A good amount of forum posts.

safe canadian online pharmacies https://kawerc.proweb.cz/

Really all kinds of terrific data.

canadian pharmacy viagra brand https://pedrew.zombeek.cz/

Reliable info. Thank you!

legitimate canadian mail order pharmacies https://fermser.flazio.com/

Factor nicely applied!.

list of reputable canadian pharmacies https://swebas.livejournal.com/359.html

Excellent tips. Cheers.

canadian pharmacies shipping to usa https://lawert.micro.blog/

Beneficial advice. Appreciate it.

cialis purchase online without prescription https://buycialisonline.fo.team/

You said it perfectly.!

buy generic cialis pinshape.com/users/2441621-canadian-pharmaceutical-companies

Fantastic write ups. Thanks a lot.

pharmacy canada https://ktqt.ftu.edu.vn/en/question list/canadian-pharmaceuticals-for-usa-sales/

You made your position extremely nicely!.

stromectol for humans https://ktqt.ftu.edu.vn/en/question list/order-stromectol-over-the-counter-10/

Nicely put, Appreciate it.

Canadian viagra 500px.com/p/phraspilliti

Tips very well regarded..

Generic for viagra https://www.ecosia.org/search?q=«My Canadian Pharmacy — Extensive Assortment of Medications – 2022»

Regards, A lot of information.

best canadian pharmacies online https://search.gmx.com/web/result?q=«My Canadian Pharmacy — Extensive Assortment of Medications – 2022»

Nicely put. Thanks a lot!

Viagra purchasing https://search.seznam.cz/?q=«My Canadian Pharmacy — Extensive Assortment of Medications – 2022»

Nicely put, Kudos.

canadian pharmacies that ship to us https://swisscows.com/en/web?query=«My Canadian Pharmacy — Extensive Assortment of Medications – 2022»

Position effectively regarded..

Viagra or viagra https://www.dogpile.com/serp?q=«My Canadian Pharmacy — Extensive Assortment of Medications – 2022»

This is nicely put. !

canadadrugs https://results.excite.com/serp?q=«My Canadian Pharmacy — Extensive Assortment of Medications – 2022»

Cheers. Numerous advice.

Viagra alternative https://www.infospace.com/serp?q=«My Canadian Pharmacy — Extensive Assortment of Medications – 2022»

Cheers, I value this!

canada pharmacy online https://results.excite.com/serp?q=«My Canadian Pharmacy — Extensive Assortment of Medications – 2022»

Many thanks! I appreciate this!

canadian pharmacies online prescriptions https://feeds.feedburner.com/bing/stromectolnoprescription

With thanks, Loads of forum posts!

Viagra online https://www.infospace.com/serp?q=«My Canadian Pharmacy — Extensive Assortment of Medications – 2022»

Appreciate it! Ample content.

Buy viagra https://search.lycos.com/web/?q=«My Canadian Pharmacy — Extensive Assortment of Medications – 2022»

Cheers, An abundance of knowledge!

Viagra sans ordonnance https://obsusilli.zombeek.cz/

Many thanks! A good amount of content!

canadian pharmacy meds https://brujagflysban.zombeek.cz/

Thanks a lot! An abundance of knowledge!

northwest pharmacy canada https://500px.com/p/arrameru/?view=groups

Awesome forum posts. Appreciate it.

canadian pharmacy king https://hafbeltminla.zombeek.cz/

You actually explained this effectively!

Вам также может понравится

Туториал по DevOps для начинающих
array(1) { [0]=> object(WP_Term)#12222 (16) { ["term_id"]=> int(7) ["name"]=> string(6) "DevOps" ["slug"]=> string(6) "devops" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(7) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(19) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(7) ["category_count"]=> int(19) ["category_description"]=> string(0) "" ["cat_name"]=> string(6) "DevOps" ["category_nicename"]=> string(6) "devops" ["category_parent"]=> int(0) } } DevOps

Перевод статьи — https://www.guru99.com/devops-tutorial.html
Что такое DevOps?
DevOps — это культура, которая способствует развитию сотрудничества между командой разработчиков и операционным отделом для более быстрого и автоматизированного развертывания кода в производстве. Слово «DevOps» представляет собой сочетание двух слов «разработка»...

5
0
22 января 2021
Что должен уметь Linux-администратор
array(1) { [0]=> object(WP_Term)#976 (16) { ["term_id"]=> int(6) ["name"]=> string(5) "Linux" ["slug"]=> string(5) "linux" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(6) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(28) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(6) ["category_count"]=> int(28) ["category_description"]=> string(0) "" ["cat_name"]=> string(5) "Linux" ["category_nicename"]=> string(5) "linux" ["category_parent"]=> int(0) } } Linux

Linux - это та операционная система, с которой вы точно будете работать в любой современной IT-компании. Знание ее изнутри, навык работы с ней при помощи разных инструментов - это тот фундамент, который поможет вам в дальнейшем развиваться в любом направлении IT.

Давайте посмотрим, какие шаги проходит в своей работе, что должен знать...

27
1
6 ноября 2020
Углубленная работа с nixops — настраиваем кластер mariadb galera
array(1) { [0]=> object(WP_Term)#12222 (16) { ["term_id"]=> int(6) ["name"]=> string(5) "Linux" ["slug"]=> string(5) "linux" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(6) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(28) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(6) ["category_count"]=> int(28) ["category_description"]=> string(0) "" ["cat_name"]=> string(5) "Linux" ["category_nicename"]=> string(5) "linux" ["category_parent"]=> int(0) } } Linux

Автор - Юрий Изоркин

В предыдущей статье мы настроили управление одной удаленной системой с помощью утилиты nixops. Давайте теперь попробуем более сложный вариант — поднимем еще 3 удаленные системы и настроим кластер MariaDB Galera.
Установка удаленных систем
Устанавливаем на 3 удаленных системах OC NixOS с такой конфигурацией (используется...

4
0
15 января 2021