Вступление
RAID-массивы обеспечивают повышенную производительность и избыточность за счет объединения отдельных дисков в виртуальные устройства хранения в определенных конфигурациях. В Linux утилитаmdadm
упрощает создание программных RAID-массивов и управление ими.
В предыдущем руководстве мы рассмотрелиhow to create RAID arrays with mdadm
on Ubuntu 16.04. В этом руководстве мы покажем, как управлять массивами RAID на сервере Ubuntu 16.04. Управление массивами RAID довольно просто в большинстве случаев.
Предпосылки
Для выполнения этого руководства вам потребуется доступ к пользователюsudo
без полномочий root. Вы можете следить за нашимUbuntu 16.04 initial server setup guide, чтобы настроить подходящего пользователя.
Как упоминалось выше, это руководство будет охватывать управление RAID-массивами. Следуйте нашему руководству поhow to create RAID arrays with mdadm
on 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:
Вывод здесь довольно плотный, предоставляющий много информации на небольшом пространстве.
/proc/mdstat
Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
. . .
СтрокаPersonalities описывает различные уровни RAID и конфигурации, которые в настоящее время поддерживает ядро.
Строка, начинающаяся сmd0, описывает начало описания устройства RAID. Следующие строки с отступом также описывают это устройство.
/proc/mdstat
. . .
md0 : active raid10 sdd[3] sdc[2] sdb[1] sda[0]
. . .
В первой строке указывается, что массив активен (не неисправен) и настроен как RAID 10. После этого будут перечислены компоненты устройства, которые использовались для построения массива. Числа в скобках описывают текущую «роль» устройства в массиве (это влияет на то, какие копии данных предоставляется устройству).
/proc/mdstat
. . .
209584128 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
. . .
Во второй строке, показанной в этом примере, указывается количество блоков, предоставляемых виртуальными устройствами, версия метаданных (в этом примере 1.2) и размер фрагмента массива. Поскольку это массив RAID 10, он также включает информацию о компоновке массива (этот пример был настроен для хранения двух копий каждого куска данных в «ближнем» макете).
Последние элементы в квадратных скобках представляют доступные на данный момент устройства из исправного набора. Первое число в числовых скобках указывает размер исправного массива, а второе число представляет доступное в настоящее время количество устройств. Другие скобки являются визуальной индикацией работоспособности массива, где «U» обозначает исправные устройства, а «_» обозначает неисправные устройства.
Если ваш массив в данный момент собирается или восстанавливается, у вас может быть другая строка, показывающая ход выполнения. Это будет выглядеть примерно так:
/proc/mdstat
. . .
[>....................] 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). Запасной не будет активно использоваться массивом, если активное устройство не выйдет из строя. Когда это происходит, массив повторно синхронизирует данные с запасным диском, чтобы восстановить массив до полной работоспособности. Запасныеcannot должны быть добавлены к неизбыточным массивам (RAID 0), потому что массив не выдержит отказа диска.
Чтобы добавить запасной, просто передайте массив и новое устройство командеmdadm --add
:
sudo mdadm /dev/md0 --add /dev/sde
Если массив не находится в ухудшенном состоянии, новое устройство будет добавлено как запасное. Если устройство в настоящее время повреждено, операция повторной синхронизации немедленно начнется с использованием запасного для замены неисправного диска.
После добавления запасного, обновите файл конфигурации, чтобы отразить ориентацию вашего нового устройства:
sudo nano /etc/mdadm/mdadm.conf
Удалите или закомментируйте текущую строку, которая соответствует определению вашего массива:
/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
. Это должно указывать на расположениеoff массива, где будет храниться файл резервной копии, содержащий важную информацию.
Note
[.note] # Файл резервной копии используется только в течение очень короткого, но критического времени во время этого процесса, после чего он будет автоматически удален. Поскольку время, когда это необходимо, очень короткое, вы, вероятно, никогда не увидите файл на диске, но в случае, если что-то пойдет не так, его можно использовать для перестройки массива. This post имеет дополнительную информацию, если вы хотите узнать больше.
#
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
/etc/fstab
. . .
# /dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0
Сохраните и закройте файл, когда вы закончите.
Удалите или закомментируйте любые ссылки на массив из файла/etc/mdadm/mdadm.conf
:
nano /etc/mdadm/mdadm.conf
/etc/mdadm/mdadm.conf
# ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=bf7a711b:b3aa9440:40d2c12e:79824706
Сохраните и закройте файл, когда вы закончите.
Обновите initramfs, набрав:
sudo update-initramfs -u
Это должно удалить устройство из среды ранней загрузки.
Заключение
Утилита Linuxmdadm
позволяет довольно легко управлять массивами, если вы понимаете используемые в ней соглашения и места, где можно искать информацию. Это руководство ни в коем случае не является исчерпывающим, но оно служит для ознакомления с некоторыми задачами управления, которые вам, возможно, придется выполнять ежедневно.
Когда вы научитесь создавать RAID-массивы и управлять ими с помощьюmdadm
, вы можете изучить ряд различных направлений. Уровни управления томами, такие как LVM, тесно интегрируются с RAID и позволяют гибко разделять пространство на логические тома. Точно так же шифрование LUKS и dm-crypt обычно используется для шифрования устройств RAID до записи файловой системы. Linux позволяет использовать все эти технологии вместе для расширения ваших возможностей хранения.