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

Как управлять массивами RAID с помощью mdadm в Ubuntu 22.04


Введение

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

В предыдущем руководстве мы рассказали, как создавать массивы RAID с помощью mdadm в Ubuntu 22.04. В этом руководстве мы покажем, как управлять массивами RAID на сервере Ubuntu 22.04.

Предпосылки

Чтобы следовать этому руководству, вам потребуется доступ к пользователю sudo без полномочий root. Вы можете следовать нашему руководству по начальной настройке сервера Ubuntu 22.04, чтобы настроить соответствующего пользователя.

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

Информация: из-за неэффективности настроек RAID на виртуальных частных серверах мы не рекомендуем развертывать настройку RAID на дроплетах DigitalOcean. Эффективность репликации дисков центра обработки данных делает преимущества RAID незначительными по сравнению с настройкой на чистом оборудовании. Это руководство предназначено для использования в качестве справочника по обычной настройке RAID.

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

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

Для получения подробной информации об устройстве RAID передайте устройство RAID с опцией -D или --detail в mdadm:

  1. sudo mdadm -D /dev/md0

Будет отображена важная информация о массиве:

Output
/dev/md0: Version : 1.2 Creation Time : Thu Sep 29 17:07:10 2022 Raid Level : raid10 Array Size : 209582080 (199.87 GiB 214.61 GB) Used Dev Size : 104791040 (99.94 GiB 107.31 GB) Raid Devices : 4 Total Devices : 4 Persistence : Superblock is persistent Update Time : Thu Sep 29 17:08:24 2022 State : clean, resyncing Active Devices : 4 Working Devices : 4 Failed Devices : 0 Spare Devices : 0 Layout : near=2 Chunk Size : 512K Consistency Policy : resync Name : raid2:0 (local to host raid2) UUID : 8069bcc7:72e7b49f:fba1c780:560a85e0 Events : 35 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=8069bcc7:72e7b49f:fba1c780:560a85e0

Чтобы быстро получить удобочитаемую сводку по 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 : 8069bcc7:72e7b49f:fba1c780:560a85e0 Name : RAID2204:0 (local to host RAID2204) Creation Time : Wed Oct 5 15:56:03 2022 Raid Level : raid10 Raid Devices : 4 Avail Dev Size : 209582080 sectors (99.94 GiB 107.31 GB) Array Size : 209582080 KiB (199.87 GiB 214.61 GB) Data Offset : 133120 sectors Super Offset : 8 sectors Unused Space : before=132968 sectors, after=0 sectors State : clean Device UUID : 027f74c5:6d488509:64844c7a:add75d88 Update Time : Wed Oct 5 16:13:57 2022 Bad Block Log : 512 entries available at offset 136 sectors Checksum : 98edf3ae - correct Events : 35 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 : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [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 : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [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 ~:

  1. cd ~

Затем размонтируйте устройство:

  1. 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 с 2 устройствами до 3. Если вы находитесь в рейде 10 с 4 устройствами и у вас есть дополнительный диск, увеличьте его до 5:

  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 Oct 5 18:38:51 2022 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 2020 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 2020 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 2020 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 ~

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

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

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

Заключение

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

После того, как вы освоите создание массивов RAID и управление ими с помощью mdadm, вы сможете исследовать несколько различных направлений. Уровни управления томами, такие как LVM, тесно интегрируются с RAID и позволяют гибко разбивать пространство на логические тома. Чтобы узнать больше, просмотрите наш учебник Introduction to LVM Concepts.

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