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

Вступление

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 позволяет использовать все эти технологии вместе для расширения ваших возможностей хранения.

Related