Как управлять массивами 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
:
- 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
флаги с подробным представлением:
- sudo mdadm -Db /dev/md0
OutputARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=8069bcc7:72e7b49f:fba1c780:560a85e0
Чтобы быстро получить удобочитаемую сводку по 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 : 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
. Часто это лучший способ узнать текущее состояние активных массивов в вашей системе:
- cat /proc/mdstat
OutputPersonalities : [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 ~
:
- 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
. . .
В этом примере массив настроен на активное использование двух устройств. Однако это показывает, что общее количество устройств, доступных для массива, равно трем из-за резерва.
Теперь перенастройте массив, чтобы иметь дополнительное активное устройство. Запасной будет использоваться для удовлетворения потребности в дополнительном приводе. Не забудьте заменить целевое количество устройств рейда в этой команде. Здесь мы увеличиваем рейд 1 с 2 устройствами до 3. Если вы находитесь в рейде 10 с 4 устройствами и у вас есть дополнительный диск, увеличьте его до 5:
- 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 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
. Это укажет на место вне массива, где будет храниться файл резервной копии, содержащий важную информацию:
Примечание. Файл резервной копии используется только в течение очень короткого, но критического периода времени во время этого процесса, после чего он будет автоматически удален. Поскольку время, когда это необходимо, невелико, вы, скорее всего, никогда не увидите файл на диске, но в случае, если что-то пойдет не так, его можно использовать для перестроения массива. Этот пост содержит некоторую дополнительную информацию, если вы хотите узнать больше.
- 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 2020
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 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
:
- 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
Это удалит устройство из среды ранней загрузки.
Заключение
Утилита Linux mdadm
помогает управлять массивами, если вы понимаете используемые ею соглашения и места, где можно найти информацию. Это руководство не является исчерпывающим, но служит для ознакомления с некоторыми задачами управления, которые могут потребоваться вам в повседневной работе.
После того, как вы освоите создание массивов RAID и управление ими с помощью mdadm
, вы сможете исследовать несколько различных направлений. Уровни управления томами, такие как LVM, тесно интегрируются с RAID и позволяют гибко разбивать пространство на логические тома. Чтобы узнать больше, просмотрите наш учебник Introduction to LVM Concepts.
Точно так же шифрование LUKS и dm-crypt обычно используется для шифрования устройств RAID перед записью в файловую систему. Linux позволяет использовать все эти технологии вместе для расширения возможностей вашего хранилища.