Как управлять массивами RAID с помощью mdadm в Ubuntu 16.04
Введение
Массивы RAID обеспечивают повышенную производительность и избыточность за счет объединения отдельных дисков в виртуальные устройства хранения в определенных конфигурациях. В Linux утилита mdadm
упрощает создание программных массивов RAID и управление ими.
В предыдущем руководстве мы рассказали, как создавать массивы RAID с помощью mdadm
в Ubuntu 16.04. В этом руководстве мы покажем, как управлять массивами RAID на сервере Ubuntu 16.04. В большинстве случаев управлять массивами RAID довольно просто.
Информация: из-за неэффективности настроек RAID на виртуальных частных серверах мы не рекомендуем развертывать настройку RAID на дроплетах DigitalOcean. Эффективность репликации дисков центра обработки данных делает преимущества RAID незначительными по сравнению с настройкой на чистом оборудовании. Это руководство предназначено для использования в качестве справочника по обычной настройке RAID.
Предпосылки
Для выполнения этого руководства вам потребуется доступ к пользователю sudo
без полномочий root. Вы можете следовать нашему руководству по начальной настройке сервера Ubuntu 16.04, чтобы настроить соответствующего пользователя.
Как упоминалось выше, в этом руководстве рассматривается управление массивом RAID. Следуйте нашему руководству по созданию массивов RAID с помощью mdadm
в Ubuntu 16.04, чтобы создать один или несколько массивов, прежде чем приступить к работе с этим руководством. В этом руководстве предполагается, что у вас есть один или несколько массивов для работы.
Запрос информации о RAID-устройствах
Одним из важнейших требований для правильного управления является возможность поиска информации о структуре, составных устройствах и текущем состоянии массива.
Чтобы получить подробную информацию о RAID-устройстве, передайте RAID-устройство с опцией -D
или --detail
в mdadm
:
- sudo mdadm -D /dev/md0
Будет отображена важная информация о массиве:
Output/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
OutputARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=0dc2e687:1dfe70ac:d440b2ac:5828d61d
Чтобы быстро получить удобочитаемую сводку по RAID-устройству, используйте для запроса параметр -Q
:
- sudo mdadm -Q /dev/md0
Output/dev/md0: 199.88GiB raid10 4 devices, 0 spares. Use mdadm --detail for more detail.
Это можно использовать для быстрого поиска ключевой информации об устройстве RAID.
Получение информации о компонентных устройствах
Вы также можете использовать mdadm
для запроса отдельных устройств-компонентов.
Параметр -Q
при использовании с компонентным устройством сообщит вам, частью которого оно является, и его роль:
- sudo mdadm -Q /dev/sdc
Output/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
Output/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
с устройством-массивом, но сфокусирована на отношении устройства-компонента к массиву.
Чтение информации /proc/mdstat
Чтобы получить подробную информацию о каждом из собранных массивов на вашем сервере, проверьте файл /proc/mdstat
. Часто это лучший способ узнать текущее состояние активных массивов в вашей системе:
- cat /proc/mdstat
OutputPersonalities : [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, он также включает информацию о структуре массива (этот пример был сконфигурирован для хранения двух копий каждого фрагмента данных в «ближней» структуре).
Оба последних элемента в квадратных скобках представляют доступные в настоящее время устройства из исправного набора. Первое число в числовых скобках указывает размер работоспособного массива, а второе число представляет доступное в настоящее время количество устройств. Другие квадратные скобки — это визуальная индикация работоспособности массива, где \U обозначает исправные устройства, а \_ — неисправные устройства.
Если ваш массив в настоящее время собирается или восстанавливается, у вас может быть другая строка, показывающая ход выполнения. Это будет выглядеть примерно так:
. . .
[>....................] resync = 0.9% (2032768/209584128) finish=15.3min speed=225863K/sec
. . .
Это описывает операцию, применяемую в настоящее время, и текущий прогресс несколькими различными способами. Он также предоставляет текущую скорость и расчетное время до завершения.
После того, как вы получите четкое представление о том, какие массивы в настоящее время работают в вашей системе, вы можете предпринять ряд действий.
Остановка массива
Чтобы остановить массив, первым шагом является его размонтирование.
Выйдите из смонтированного каталога и размонтируйте его, набрав:
- cd ~
- sudo umount /mnt/md0
Вы можете остановить все активные массивы, набрав:
- sudo mdadm --stop --scan
Если вы хотите остановить определенный массив, передайте его команде mdadm --stop
:
- sudo mdadm --stop /dev/md0
Это остановит массив. Вам придется заново собрать массив, чтобы снова получить к нему доступ.
Запуск массива
Чтобы запустить все массивы, определенные в файлах конфигурации или /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
Теперь массив должен быть доступен в точке монтирования.
Добавление запасного устройства в массив
Запасные устройства можно добавлять в любые массивы, обеспечивающие избыточность (например, 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
для сборки массива.
Увеличение количества активных устройств в массиве
Массив можно увеличить, увеличив количество активных устройств в сборке. Точная процедура немного зависит от используемого уровня RAID.
С RAID 1 или 10
Начните с добавления нового устройства в качестве запасного, как показано в предыдущем разделе:
- sudo mdadm /dev/md0 --add /dev/sde
Узнать текущее количество RAID-устройств в массиве:
- sudo mdadm --detail /dev/md0
Output/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
Output/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
Следующий вывод указывает на то, что будет создана резервная копия критической секции:
Outputmdadm: 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
Output/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:
Outputmdadm: level of /dev/md0 changed to raid4
mdadm: added /dev/sdc
Это нормально и ожидаемо. Массив вернется в состояние RAID 0, когда данные будут перераспределены на все существующие диски.
Вы можете проверить ход действия, набрав:
- cat /proc/mdstat
После завершения синхронизации измените размер файловой системы, чтобы использовать дополнительное пространство:
- sudo resize2fs /dev/md0
Теперь у вашего массива должна быть файловая система, соответствующая его емкости.
Удаление устройства из массива
Удаление диска из RAID-массива иногда необходимо в случае неисправности или если вам нужно выключить диск.
Чтобы устройство было удалено, сначала оно должно быть помечено как «сбой» в массиве. Вы можете проверить, есть ли сбойное устройство, используя mdadm --detail
:
- sudo mdadm --detail /dev/md0
Output/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
Outputmdadm: set /dev/sdc faulty in /dev/md0
Если вы посмотрите на вывод mdadm --detail
, то увидите, что устройство теперь помечено как неисправное.
Как только устройство выйдет из строя, вы можете удалить его из массива с помощью mdadm --remove
:
- sudo mdadm /dev/md0 --remove /dev/sdc
Outputmdadm: hot removed /dev/sdc from /dev/md0
Затем вы можете заменить его новым диском, используя ту же команду mdadm --add
, которую вы используете для добавления запасного:
- sudo mdadm /dev/md0 --add /dev/sdd
Outputmdadm: added /dev/sdd
Массив начнет восстанавливаться путем копирования данных на новый диск.
Удаление массива
Чтобы уничтожить массив, включая все содержащиеся в нем данные, начните с процесса, который мы использовали для остановки массива.
Сначала размонтируйте файловую систему:
- cd ~
- sudo umount /mnt/md0
Затем остановите массив:
- sudo mdadm --stop /dev/md0
После этого удалите сам массив с помощью команды --remove
, нацеленной на устройство RAID:
- sudo mdadm --remove /dev/md0
После удаления самого массива вы должны использовать mdadm --zero-superblock
на каждом из составных устройств. Это удалит суперблок md
— заголовок, используемый mdadm
для сборки и управления составными устройствами как частью массива. Если это все еще присутствует, это может вызвать проблемы при попытке повторного использования диска для других целей.
Вы можете увидеть, что суперблок все еще присутствует в массиве, проверив столбец FSTYPE
в выводе lsblk --fs
:
- lsblk --fs
OutputNAME 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
в Linux упрощает управление массивами, если вы понимаете используемые ею соглашения и места, где можно искать информацию. Это руководство никоим образом не является исчерпывающим, оно служит для ознакомления с некоторыми задачами управления, которые могут потребоваться вам в повседневной работе.
После того, как вы освоите создание массивов RAID и управление ими с помощью mdadm
, вы сможете исследовать несколько различных направлений. Уровни управления томами, такие как LVM, тесно интегрируются с RAID и позволяют гибко разбивать пространство на логические тома. Точно так же шифрование LUKS и dm-crypt обычно используется для шифрования устройств RAID перед записью в файловую систему. Linux позволяет использовать все эти технологии вместе для расширения возможностей вашего хранилища.