Проверка raid массива linux

How to check ‘mdadm’ RAIDs while running?

I’m starting to get a collection of computers at home and to support them I have my «server» linux box running a RAID array. Its currently mdadm RAID-1 , going to RAID-5 once I have more drives (and then RAID-6 I’m hoping for). However I’ve heard various stories about data getting corrupted on one drive and you never noticing due to the other drive being used, up until the point when the first drive fails, and you find your second drive is also screwed (and 3rd, 4th, 5th drive). Obviously backups are important and I’m taking care of that also, however I know I’ve previously seen scripts which claim to help against this problem and allow you to check your RAID while its running. However looking for these scripts again now I’m finding it hard to find anything which seems similar to what I ran before and I feel I’m out of date and not understanding whatever has changed. How would you check a running RAID to make sure all disks are still preforming normally? I monitor SMART on all the drives and also have mdadm set to email me in case of failure but I’d like to know my drives occasionally «check» themselves too.

Sounds like you’re already on the right path, you just need to setup a cron to send you the results of smartctl for your drives.

5 Answers 5

The point of RAID with redundancy is that it will keep going as long as it can, but obviously it will detect errors that put it into a degraded mode, such as a failing disk. You can show the current status of an array with mdadm —detail (abbreviated as mdadm -D ):

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

Furthermore the return status of mdadm -D is nonzero if there is any problem such as a failed component (1 indicates an error that the RAID mode compensates for, and 2 indicates a complete failure).

You can also get a quick summary of all RAID device status by looking at /proc/mdstat . You can get information about a RAID device in /sys/class/block/md*/md/* as well; see Documentation/md.txt in the kernel documentation. Some /sys entries are writable as well; for example you can trigger a full check of md0 with echo check >/sys/class/block/md0/md/sync_action .

Читайте также:  Linux версия системы debian

In addition to these spot checks, mdadm can notify you as soon as something bad happens. Make sure that you have MAILADDR root in /etc/mdadm.conf (some distributions (e.g. Debian) set this up automatically). Then you will receive an email notification as soon as an error (a degraded array) occurs.

Make sure that you do receive mail send to root on the local machine (some modern distributions omit this, because they consider that all email goes through external providers — but receiving local mail is necessary for any serious system administrator). Test this by sending root a mail: echo hello | mail -s test root@localhost . Usually, a proper email setup requires two things:

  • Run an MTA on your local machine. The MTA must be set up at least to allow local mail delivery. All distributions come with suitable MTAs, pick anything (but not nullmailer if you want the email to be delivered locally).
  • Redirect mail going to system accounts (at least root ) to an address that you read regularly. This can be your account on the local machine, or an external email address. With most MTAs, the address can be configured in /etc/aliases ; you should have a line like
 root: djsmiley2k@mail-provider.example.com 

Источник

mdadm — полезные команды

Linux

Соберу в одном месте список полезных команд для mdadm.

mdadm — утилита для управления программными RAID-массивами в Linux.

С помощью mdadm можно выполнять следующие операции:

  • mdadm —create, C Создать новый массив на основе указанных устройств. Использовать суперблоки размещённые на каждом устройстве.
  • mdadm —assemble, -A Собрать компоненты ранее созданного массива в массив. Компоненты можно указывать явно, но можно и не указывать — тогда выполняется их поиск по суперблокам.
  • mdadm —build, -B Собрать массив из компонентов, у которых нет суперблоков. Не выполняются никакие проверки, создание и сборка массива в принципе ничем не отличаются.
  • mdadm —manage Разнообразные операции по управлению массивом, такие как замена диска и пометка как сбойного.
  • mdadm —misc Действия, которые не относятся ни к одному из других режимов работы.
  • mdadm —grow, G Расширение или уменьшение массива, включаются или удаляются новые диски.
  • mdadm —incremental, I Добавление диска в массив.
  • mdadm —monitor, —follow, -F Следить за изменением состояния устройств. Для RAID0 этот режим не имеет смысла.

Создание массива

Для создания массива нужно использовать не смонтированные разделы. Убедитесь в этом, при необходимости демонтируйте и уберите из fstab.

Пример создания RAID5 массива из трёх дисков:

Я использую NVMe диски, у вас названия дисков будут другие.

Желательно изменить тип разделов на FD (Linux RAID autodetect). Это можно сделать с помощью fdisk (t).

Занулить суперблоки дисков:

mdadm --zero-superblock --force /dev/nvme0n1 mdadm --zero-superblock --force /dev/nvme1n1 mdadm --zero-superblock --force /dev/nvme2n1

Стереть подпись и метаданные:

wipefs --all --force /dev/nvme0n1 wipefs --all --force /dev/nvme1n1 wipefs --all --force /dev/nvme2n1

С помощью ключа —create создать RAID5 массив:

 mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1
  • /dev/md0 — массив, который мы создаём;
  • —level 5 — уровень RAID;
  • —raid-devices=3 — количество дисков, из которых собирается массив;
  • /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 — диски.

Для примера RAID1 из двух дисков /dev/sdb и /dev/sdc можно создать так:

mdadm --create --verbose /dev/md2 -l 1 -n 2 /dev/sd
  • /dev/md2 — массив, который мы создаём;
  • -l 5 — уровень RAID;
  • -n 2 — количество дисков, из которых собирается массив;
  • /dev/sd — диски sdb и sdc.

Состояние массива

Посмотреть инициализацию массива и текущее состояние можно с помощью команды:

root@ch01:~# cat /proc/mdstat Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] md127 : active raid1 nvme1n1[1] nvme0n1[0] 3750607192 blocks super 1.2 [2/2] [UU] unused devices:

mdadm

[root@dbk00 ~]# cat /proc/mdstat Personalities : [raid1] [raid0] md10 : active raid0 sdb1[1] sda1[0] 70319335424 blocks super 1.2 512k chunks md20 : active raid0 sdc1[0] sdd1[1] 70319335424 blocks super 1.2 512k chunks md126 : active raid1 sde[1] sdf[0] 927881216 blocks super external:/md127/0 [2/2] [UU] md127 : inactive sdf[1](S) sde[0](S) 10402 blocks super external:imsm unused devices:

Подробный статус выбранного массива

root@ch01:~# mdadm --detail /dev/md127 /dev/md127: Version : 1.2 Creation Time : Wed May 6 16:39:32 2020 Raid Level : raid1 Array Size : 3750607192 (3576.86 GiB 3840.62 GB) Used Dev Size : 3750607192 (3576.86 GiB 3840.62 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Fri Aug 14 17:09:47 2020 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Consistency Policy : resync Name : VirtualDisk01 UUID : 1728ebed:ad0b0000:faad83b7:37070000 Events : 173 Number Major Minor RaidDevice State 0 259 0 0 active sync /dev/nvme0n1 1 259 1 1 active sync /dev/nvme1n1

mdadm

Список массивов

mdadm --detail --scan --verbose
root@ch01:~# mdadm --detail --scan --verbose ARRAY /dev/md/VirtualDisk01 level=raid1 num-devices=2 metadata=1.2 name=VirtualDisk01 UUID=1728ebed:ad0b0000:faad83b7:37070000 devices=/dev/nvme0n1,/dev/nvme1n1 

bash

Создание файловой системы

Файловую систему в массиве можно создать с помощью mkfs, например:

Для лучшей производительности файловой системы имеет смысл указывать при её создании количество дисков в рейде и количество блоков файловой системы, которое может поместиться в один страйп (chunk), это касается массивов уровня RAID0, RAID5 ,RAID6 ,RAID10. Для RAID1 (mirror) это не имеет значения так как запись идет всегда на один device, a в других типах массивов данные записываются последовательно на разные диски порциями, соответствующими размеру stripe. Например, если мы используем RAID5 из 3 дисков с дефолтным размером страйпа в 64К и файловую систему ext3 с размером блока в 4К то можно вызывать команду mkfs.ext3 так:

mkfs.ext3 -b 4096 -E stride=16,stripe-width=32 /dev/md0

stripe-width обычно рассчитывается как

где N — это диски с данными в массиве, например, в RAID5 два диска с данными и один parity для контрольных сумм. Для файловой системы XFS нужно указывать не количество блоков файловой системы, соответствующих размеру stripe в массиве, а размер самого страйпа:

mkfs.xfs -d su=64k,sw=3 /dev/md0

Создание mdadm.conf

Операционная система не запоминает какие RAID-массивы ей нужно создать и какие диски в них входят. Эта информация содержится в файле mdadm.conf.

mkdir /etc/mdadm echo "DEVICE partitions" > /etc/mdadm/mdadm.conf mdadm --detail --scan | awk '/ARRAY/ ' >> /etc/mdadm/mdadm.conf

В интернете советуют применять команду mdadm —detail —scan —verbose, но я не рекомендую, т.к. она пишет в конфигурационный файл названия разделов, а они в некоторых случаях могут измениться, тогда RAID-массив не соберётся. А mdadm —detail —scan записывает UUID разделов, которые не изменятся.

Проверка целостности массива

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

Есть ли ошибки в процессе проверки программного RAID-массива по команде check или repair:

cat /sys/block/md0/md/mismatch_cnt

Работа с дисками

Диск в массиве можно условно сделать сбойным с помощью ключа —fail (-f):

mdadm /dev/md0 --fail /dev/nvme0n1 mdadm /dev/md0 -f /dev/nvme0n1

Удалить из массива отказавший диск:

mdadm /dev/md0 --remove /dev/nvme0n1 mdadm /dev/md0 -r /dev/nvme0n1

Добавить в массив заменённый диск:

mdadm /dev/md0 --add /dev/nvme0n1 mdadm /dev/md0 -a /dev/nvme0n1

Сборка существующего массива

Собрать существующий массив можно с помощью mdadm —assemble:

mdadm --assemble /dev/md0 /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 mdadm --assemble --scan

Расширение массива

Расширить массив можно с помощью ключа —grow (-G). Сначала добавляется диск, а потом массив расширяется:

mdadm /dev/md0 --add /dev/nvme3n1

Проверяем, что диск добавился:

mdadm --detail /dev/md0 cat /proc/mdstat

Если диск добавился, расширяем массив:

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

Опция —raid-devices указывает новое количество дисков в массиве с учётом добавленного. Рекомендуется задать файл бэкапа на случай прерывания перестроения массива, например, добавить опцию:

При необходимости, можно регулировать скорость процесса расширения массива, указав нужное значение в файлах:

Убедитесь, что массив расширился:

Нужно обновить конфигурационный файл с учётом сделанных изменений:

mdadm --detail --scan >> /etc/mdadm/mdadm.conf

Возобновление отложенной синхронизации resync=PENDING

Если синхронизации массива отложена, состояние массива resync=PENDING, то синхронизацию можно возобновить:

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

Переименовать массив

umount /dev/md0 mdadm --stop /dev/md0

Собираем массив с новым именем:

mdadm --assemble /dev/md3 /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 --update=name
mdadm –assemble /dev/md3 /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 –update=super-minor

Удаление массива

umount /dev/md0 mdadm --stop /dev/md0

Затем необходимо затереть superblock каждого из составляющих массива:

mdadm --zero-superblock --force /dev/nvme0n1 mdadm --zero-superblock --force /dev/nvme1n1 mdadm --zero-superblock --force /dev/nvme2n1
dd if=/dev/zero of=/dev/nvme0n1 bs=512 count=1 dd if=/dev/zero of=/dev/nvme1n1 bs=512 count=1 dd if=/dev/zero of=/dev/nvme2n1 bs=512 count=1

Источник

Оцените статью
Adblock
detector