Управление RAID-массивами с помощью mdadm в Ubuntu 16.04

RAID-массивы обеспечивают повышенную производительность и избыточность путем объединения отдельных дисков в виртуальные запоминающие устройства. В Linux утилита mdadm упрощает создание и управление программными RAID-массивами.

Предыдущий мануал помог вам создать RAID-массив с помощью mdadm в Ubuntu 16.04. В этом мануале вы узнаете, как использовать mdadm для управления массивами – в большинстве случаев это очень просто.

Требования

1: Запрос информации о RAID-устройствах

Одним из наиболее важных аспектов управления является поиск информации о структуре, компонентных устройствах и текущем состоянии массива.

Чтобы получить подробную информацию о RAID-устройстве, передайте устройство утилите mdadm в параметре -D или —detail:

sudo mdadm -D /dev/md0

Команда выведет информацию о массиве:

/dev/md0:
Version : 1.2
Creation Time : Mon Aug  8 21:19:06 2016
Raid Level : raid10
Array Size : 209584128 (199.88 GiB 214.61 GB)
Used Dev Size : 104792064 (99.94 GiB 107.31 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Mon Aug  8 21:36:36 2016
State : active
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Name : mdadmwrite:0  (local to host mdadmwrite)
UUID : 0dc2e687:1dfe70ac:d440b2ac:5828d61d
Events : 18
Number   Major   Minor   RaidDevice State
0       8        0        0      active sync set-A   /dev/sda
1       8       16        1      active sync set-B   /dev/sdb
2       8       32        2      active sync set-A   /dev/sdc
3       8       48        3      active sync set-B   /dev/sdd

В этом выводе вы найдете уровень RAID, размер массива, состояние отдельных частей, UUID массива, компонентные устройства и их роли. Информация, представленная в этом выводе, достаточно хорошо размечена.

Чтобы получить сокращенные данные о массиве (которые удобно добавить в файл /dev/mdadm/mdadm.conf), вы можете передать флаги —brief или -b:

sudo mdadm -Db /dev/md0
ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=0dc2e687:1dfe70ac:d440b2ac:5828d61d

Чтобы получить удобочитаемое описание RAID-устройства, используйте параметр -Q:

sudo mdadm -Q /dev/md0
/dev/md0: 199.88GiB raid10 4 devices, 0 spares. Use mdadm --detail for more detail.

Эта команда выведет ключевые данные о RAID-массиве.

2: Сбор информации о компонентах

Вы также можете использовать mdadm для запроса отдельных компонентных устройств.

Параметр -Q при использовании с компонентным устройством сообщает вам массив, в который он входит, и его роль в этом массиве:

sudo mdadm -Q /dev/sdc
/dev/sdc: is not an md array
/dev/sdc: device 2 in 4 device active raid10 /dev/md0.  Use mdadm --examine for more detail.

Более подробную информацию можно получить с помощью опции -E или —examine:

sudo mdadm -E /dev/sdc
/dev/sdc:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x0
Array UUID : 0dc2e687:1dfe70ac:d440b2ac:5828d61d
Name : mdadmwrite:0  (local to host mdadmwrite)
Creation Time : Mon Aug  8 21:19:06 2016
Raid Level : raid10
Raid Devices : 4
Avail Dev Size : 209584128 (99.94 GiB 107.31 GB)
Array Size : 209584128 (199.88 GiB 214.61 GB)
Data Offset : 131072 sectors
Super Offset : 8 sectors
Unused Space : before=130984 sectors, after=0 sectors
State : active
Device UUID : b0676ef0:73046e93:9d9c7bde:c80352bb
Update Time : Mon Aug  8 21:36:36 2016
Bad Block Log : 512 entries available at offset 72 sectors
Checksum : 8be1be96 - correct
Events : 18
Layout : near=2
Chunk Size : 512K
Device Role : Active device 2
Array State : AAAA ('A' == active, '.' == missing, 'R' == replacing)

Эта информация аналогична той, которая отображается при использовании опции -D с устройством массива, но сфокусирована на отношении конкретного компонентного устройства к массиву.

3: Чтение информации в /proc/mdstat

Чтобы получить подробную информацию о каждом собранном массиве на вашем сервере, проверьте файл /proc/mdstat. Чаще всего это лучший способ определить текущий статус активных массивов в вашей системе:

cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
md0 : active raid10 sdd[3] sdc[2] sdb[1] sda[0]
209584128 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
unused devices: <none>

Этот файл содержит очень много информации, представленной в короткой форме.

Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
Строка Personalities описывает уровни RAID и текущую конфигурацию ядра.

Строка, начинающаяся с md0 – это начало описания устройства RAID. Строка или строки с отступом, которые идут после нее, также описывают это устройство.

. . .
md0 : active raid10 sdd[3] sdc[2] sdb[1] sda[0]
. . .

В первой строке указано, что массив активен (работает без ошибок) и настроен как RAID 10. Далее перечислены компоненты, которые были использованы для сборки массива. Цифры в скобках описывают текущую «роль» устройства в массиве (это влияет на то, какие копии данных передаются устройством).

. . .
209584128 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
. . .

Вторая строка в этом примере определяет количество блоков, предоставляемых виртуальными устройствами, версию метаданных (здесь — 1.2) и размер блока массива. Поскольку это массив RAID 10, он также содержит информацию о топологии массива (здесь массив настроен для хранения двух копий каждого фрагмента данных по типу «near»).

Элементы в квадратных скобках представляют имеющиеся в настоящее время устройства из здорового набора. Первое число в скобках указывает размер здорового массива, а второе число – количество доступных в настоящее время устройств. Следующие скобки – это визуальная индикация состояния массива, где «U» представляет здоровые устройства, а «_» — неисправные.

. . .
[>....................]  resync =  0.9% (2032768/209584128) finish=15.3min speed=225863K/sec
. . .

Это описывает текущую работу и прогресс несколькими различными способами, а также определяет текущую скорость и расчетное время до завершения.

Определив, какие массивы в настоящее время работают в вашей системе, вы можете предпринять следующий ряд действий.

4: Остановка массива

Чтобы остановить массив, нужно сначала размонтировать его.

Для этого введите:

cd ~
sudo umount /mnt/md0

Чтобы остановить все активные массивы, введите:

sudo mdadm --stop --scan

Чтобы остановить конкретный массив, передайте его команде mdadm —stop:

sudo mdadm --stop /dev/md0

Чтобы получить доступ к остановленному массиву, вам нужно будет снова собрать его.

5: Запуск массива

Чтобы запустить все массивы, определенные в конфигурации или в /proc/mdstat, введите:

sudo mdadm --assemble --scan

Чтобы запустить конкретный массив, вы можете передать его в качестве аргумента в mdadm —assemble:

sudo mdadm --assemble /dev/md0

Это сработает, если массив определен в конфигурации.

Если же в файле конфигурации нет правильного определения массива, его все равно можно запустить, передав компонентные устройства:

sudo mdadm --assemble /dev/md0 /dev/sda /dev/sdb /dev/sdc /dev/sdd

Собрав массив, его можно смонтировать как обычно:

sudo mount /dev/md0 /mnt/md0

Теперь массив доступен в точке монтирования.

6: Добавление запасных устройств в массив

Запасные устройства можно добавить в любой массив, который поддерживает избыточность (например, RAID 1, 5, 6 или 10). Такие устройства будут использоваться массивом только в случае сбоя одного из постоянных активных устройств. Если это произойдет, массив переконфигурирует данные на запасной диск для восстановления своей работоспособности. Запасные устройства нельзя добавить в резервные массивы (RAID 0), потому что массив не сможет выдержать сбой накопителя.

Чтобы добавить запасной диск, просто передайте массив и новое устройство в команде mdadm —add:

sudo mdadm /dev/md0 --add /dev/sde

Если массив находится в рабочем состоянии, новое устройство будет добавлено в качестве запасного. Если одно устройство в массиве в настоящее время не работает, операция повторной синхронизации немедленно начнет использовать запасной диск для замены неисправного.

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

sudo nano /etc/mdadm/mdadm.conf

Переместите или закомменитруйте текущее определение массива:

# ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=d81c843b:4d96d9fc:5f3f499c:6ee99294

А затем вставьте свою новую конфигурацию:

sudo mdadm --detail --brief /dev/md0 | sudo tee -a /etc/mdadm/mdadm.conf

Утилита mdadm использует новую информацию для сбора массива.

7: Увеличение количества активных устройств в массиве

Можно увеличить массив, увеличив количество активных устройств внутри сборки. Точная процедура зависит от уровня RAID, который вы используете.

Массивы RAID 1 или 10

Начните с добавления нового устройства в качестве запасного, как показано в последнем разделе:

sudo mdadm /dev/md0 --add /dev/sde

Определите текущее количество RAID-устройств в массиве:

sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Aug 10 15:29:26 2016
Raid Level : raid1
Array Size : 104792064 (99.94 GiB 107.31 GB)
Used Dev Size : 104792064 (99.94 GiB 107.31 GB)
Raid Devices : 2

Total Devices : 3

Persistence : Superblock is persistent
. . .

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

Теперь переконфигурируйте массив, чтобы настроить его для использования дополнительного активного устройства.

sudo mdadm --grow --raid-devices=3 /dev/md0

Массив начнет перенастраиваться с дополнительным активным диском. Чтобы просмотреть ход синхронизации данных, введите:

cat /proc/mdstat

Вы можете использовать устройство после завершения процесса.

Массивы RAID 5 или 6

Начните с добавления нового устройства в качестве запасного, как показано в последнем разделе:

sudo mdadm /dev/md0 --add /dev/sde

Определите текущее количество RAID-устройств в массиве:

sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Aug 10 18:38:51 2016
Raid Level : raid5
Array Size : 209584128 (199.88 GiB 214.61 GB)
Used Dev Size : 104792064 (99.94 GiB 107.31 GB)
Raid Devices : 3

Total Devices : 4

Persistence : Superblock is persistent
. . .

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

Теперь переконфигурируйте массив, чтобы настроить его для использования дополнительного активного устройства. При увеличении массива RAID 5 или RAID 6 важно включить дополнительный параметр —backup-file. Он должен указывать на расположение вне массива, где будет храниться файл резервной копии, содержащий критически важную информацию.

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

sudo mdadm --grow --raid-devices=4 --backup-file=/root/md0_grow.bak /dev/md0

Следующий вывод говорит о том, что критическая информация скопирована в файл:

mdadm: Need to backup 3072K of critical section..

Массив начнет перенастраиваться с дополнительным активным диском. Чтобы просмотреть ход синхронизации данных, введите:

cat /proc/mdstat

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

sudo resize2fs /dev/md0

Массивы RAID 0

Поскольку массивы RAID 0 не могут поддерживать запасные диски (они не смогут восстановить поврежденный массив RAID 0), вы можете добавить диск как новое активное устройство.

Сначала выясните текущее количество RAID-устройств в массиве:

sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Aug 10 19:17:14 2016
Raid Level : raid0
Array Size : 209584128 (199.88 GiB 214.61 GB)
Raid Devices : 2

Total Devices : 2

Persistence : Superblock is persistent
. . .

Теперь можно увеличить количество RAID-устройств:

sudo mdadm --grow /dev/md0 --raid-devices=3 --add /dev/sdc

Вы увидите сообщение, в котором говорится, что массив изменен на RAID 4:

mdadm: level of /dev/md0 changed to raid4
mdadm: added /dev/sdc

Это нормально и ожидаемо. Массив вернется в RAID 0, когда данные будут перераспределены на все существующие диски.

Вы можете проверить процесс, набрав:

cat /proc/mdstat

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

sudo resize2fs /dev/md0

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

Диски удаляют из массива RAID, если произошла ошибка или если нужно отключить диск.

Сначала пометьте устройство, которое нужно удалить, как нерабочее. Вы можете проверить наличие нерабочих устройств в массиве с помощью команды mdadm —detail:

sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Aug 10 21:42:12 2016
Raid Level : raid5
Array Size : 209584128 (199.88 GiB 214.61 GB)
Used Dev Size : 104792064 (99.94 GiB 107.31 GB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Thu Aug 11 14:10:43 2016
State : clean, degraded
Active Devices : 2
Working Devices : 2
Failed Devices : 1
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 64K
Name : mdadmwrite:0  (local to host mdadmwrite)
UUID : bf7a711b:b3aa9440:40d2c12e:79824706
Events : 144
Number   Major   Minor   RaidDevice State
0       0        0        0      removed
1       8        0        1      active sync   /dev/sda
2       8       16        2      active sync   /dev/sdb
0       8       32        -      faulty   /dev/sdc

Все выделенные строки указывают, что диск больше не работает (в этом примере это /dev/sdc).

Если вам нужно удалить рабочий диск, вы можете вручную пометить его как нерабочий – с помощью опции —fail:

sudo mdadm /dev/md0 --fail /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md0

Команда mdadm —detail покажет, что устройство нерабочее.

Теперь вы можете удалить его из массива с помощью команды mdadm —remove:

sudo mdadm /dev/md0 --remove /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md0

Затем вы можете заменить его новым диском, используя команду mdadm —add, которая добавляет запасные устройства:

sudo mdadm /dev/md0 --add /dev/sdd
mdadm: added /dev/sdd

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

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

Чтобы удалить массив, включая все данные, которые он хранит, сначала остановите массив.

Для этого нужно демонтировать файловую систему:

cd ~
sudo umount /mnt/md0

Затем остановите массив:

sudo mdadm --stop /dev/md0

Теперь можно удалить массив с помощью команды —remove:

sudo mdadm --remove /dev/md0

После удаления массива нужно использовать mdadm —zero-superblock на каждом из компонентов устройства. Это очистит суперблок md, заголовок, который mdadm использует для сборки и управления компонентными устройствами в составе массива. Если этот заголовок не удалить, это может вызвать проблемы при попытке повторно использовать диск для других целей.

Вы можете определить, что суперблок все еще присутствует в массиве, проверив столбец FSTYPE в выводе lsblk —fs:

lsblk --fs
NAME    FSTYPE            LABEL        UUID                                 MOUNTPOINT
sda     linux_raid_member mdadmwrite:0 bf7a711b-b3aa-9440-40d2-c12e79824706
sdb     linux_raid_member mdadmwrite:0 bf7a711b-b3aa-9440-40d2-c12e79824706
sdc     linux_raid_member mdadmwrite:0 bf7a711b-b3aa-9440-40d2-c12e79824706
sdd
vda
├─vda1  ext4              DOROOT       4f8b85db-8c11-422b-83c4-c74195f67b91 /
└─vda15

В этом примере устройства /dev/sda, /dev/sdb и  /dev/sdc, которые входили в массив, все еще содержат этот заголовок.

Удалите их:

sudo mdadm --zero-superblock /dev/sda /dev/sdb /dev/sdc

Удалите или закомментируйте все ссылки на массив в файле /etc/fstab:

sudo nano /etc/fstab
. . .
# /dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0

Сохраните и закройте файл.

Удалите или закомментируйте все ссылки на массив в файле /etc/mdadm/mdadm.conf:

nano /etc/mdadm/mdadm.conf
# ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=bf7a711b:b3aa9440:40d2c12e:79824706

Сохраните и закройте файл.

Обновите initramfs:

sudo update-initramfs -u

Устройство будет удалено из автозагрузки.

Заключение

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

Научившись создавать и управлять массивами RAID с помощью mdadm, вы можете изучить еще несколько различных направлений. Управление томами (LVM) тесно интегрируется с RAID и позволяет гибко разделить пространство на логические тома. LUKS и dm-crypt обычно используются для шифрования RAID-устройств до написания файловой системы. Linux позволяет интегрировать все эти технологии для повышения емкости хранилища.

Tags: , , ,