Поиск по сайту:

Как управлять массивами 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:

  1. 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 флаги с подробным представлением:

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

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

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

Это можно использовать для быстрого поиска ключевой информации об устройстве RAID.

Получение информации о компонентных устройствах

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

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

  1. 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:

  1. 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. Часто это лучший способ узнать текущее состояние активных массивов в вашей системе:

  1. cat /proc/mdstat
Output
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, он также включает информацию о структуре массива (этот пример был сконфигурирован для хранения двух копий каждого фрагмента данных в «ближней» структуре).

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

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

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

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

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

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

Чтобы остановить массив, первым шагом является его размонтирование.

Выйдите из смонтированного каталога и размонтируйте его, набрав:

  1. cd ~
  2. sudo umount /mnt/md0

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

  1. sudo mdadm --stop --scan

Если вы хотите остановить определенный массив, передайте его команде mdadm --stop:

  1. sudo mdadm --stop /dev/md0

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

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

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

  1. sudo mdadm --assemble --scan

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

  1. sudo mdadm --assemble /dev/md0

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

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

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

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

  1. sudo mount /dev/md0 /mnt/md0

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

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

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

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

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

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

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

  1. sudo nano /etc/mdadm/mdadm.conf

Удалите или закомментируйте текущую строку, соответствующую вашему определению массива:

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

Затем добавьте текущую конфигурацию:

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

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

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

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

С RAID 1 или 10

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

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

Узнать текущее количество RAID-устройств в массиве:

  1. 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 . . .

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

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

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

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

  1. cat /proc/mdstat

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

С RAID 5 или 6

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

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

Узнать текущее количество RAID-устройств в массиве:

  1. 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. Это должно указывать на расположение за пределами массива, где будет храниться файл резервной копии, содержащий важную информацию.

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

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

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

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

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

  1. cat /proc/mdstat

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

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

  1. sudo resize2fs /dev/md0

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

С RAID 0

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

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

  1. 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 в той же операции, что и добавление нового диска:

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

Вы увидите вывод, указывающий, что массив был изменен на RAID 4:

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

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

Вы можете проверить ход действия, набрав:

  1. cat /proc/mdstat

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

  1. sudo resize2fs /dev/md0

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

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

Удаление диска из RAID-массива иногда необходимо в случае неисправности или если вам нужно выключить диск.

Чтобы устройство было удалено, сначала оно должно быть помечено как «сбой» в массиве. Вы можете проверить, есть ли сбойное устройство, используя mdadm --detail:

  1. 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:

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

Если вы посмотрите на вывод mdadm --detail, то увидите, что устройство теперь помечено как неисправное.

Как только устройство выйдет из строя, вы можете удалить его из массива с помощью mdadm --remove:

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

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

  1. sudo mdadm /dev/md0 --add /dev/sdd
Output
mdadm: added /dev/sdd

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

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

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

Сначала размонтируйте файловую систему:

  1. cd ~
  2. sudo umount /mnt/md0

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

  1. sudo mdadm --stop /dev/md0

После этого удалите сам массив с помощью команды --remove, нацеленной на устройство RAID:

  1. sudo mdadm --remove /dev/md0

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

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

  1. lsblk --fs
Output
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 были частью массива и по-прежнему помечены как таковой.

Удалите метки, набрав:

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

Затем убедитесь, что вы удалили или закомментировали все ссылки на массив в файле /etc/fstab:

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

Сохраните и закройте файл, когда закончите.

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

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

Сохраните и закройте файл, когда закончите.

Обновите initramfs, набрав:

  1. sudo update-initramfs -u

Это должно удалить устройство из среды ранней загрузки.

Заключение

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

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