реализация mdadm RAID с разделением GPT

реализация mdadm RAID с разделением GPT

Моя текущая идея — создать один программный массив класса RAID-6 с 4 дисками-участниками, используя mdadm.

В частности, в небольшом сервере Dell T20 будут использоваться жесткие диски объемом 1 ТБ с интерфейсом SATA.

Операционная системаGNU/Linux Дебиан8.6 (позднее обновлено:ДжессиПотягиватьсяБастер)

В моем случае это составило бы 2 ТБ дискового пространства с 2 ТБ четности.


Я также хотел бы иметь таблицу разделов GPT, чтобы это работало, я не уверен, как конкретно поступить, предполагая, что я предпочел бы сделать это исключительно через терминал.

Поскольку я никогда не создавал RAID-массив, не могли бы вы подсказать мне, как мне действовать?


Примечания:

  • Этот массив будет служить только для данных. На нем не будет загрузки или ОС.

  • Я выбрал RAID-6 из-за цели этого массива. Массив должен быть в состоянии пережить два отказа дисков. Поскольку я ограничен оборудованием в 4 диска, альтернатив RAID-6, насколько я знаю, нет. (Каким бы ужасным ни казалось замедление RAID-6, в этом массиве это не имеет значения.)

решение1

В этом ответе следует четко указать, что все данные будут уничтожены на всех членах массива (дисках), поэтому сначала сделайте их резервную копию!


Откройте терминал и станьтеroot(su); если у вас естьsudoвключено, вы также можете сделать, например sudo -i, см.man sudoдля всех вариантов):

sudo -i

Во-первых, мы должны стереть диски, если там были какие-либо данные и файловые системы до этого, то есть. Предположим, у нас есть 4 участника: sdi, sdj, sdk, sdl. Для того, чтобы иметь обратную связь этого процесса визуально,pv(трубный зритель)здесь было использовано:

pv < /dev/zero > /dev/sdi
pv < /dev/zero > /dev/sdj
pv < /dev/zero > /dev/sdk
pv < /dev/zero > /dev/sdl

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

umount /dev/sdi?; wipefs --all --force /dev/sdi?; wipefs --all --force /dev/sdi
umount /dev/sdj?; wipefs --all --force /dev/sdj?; wipefs --all --force /dev/sdj
umount /dev/sdk?; wipefs --all --force /dev/sdk?; wipefs --all --force /dev/sdk
umount /dev/sdl?; wipefs --all --force /dev/sdl?; wipefs --all --force /dev/sdl

Затем мы инициализируем все диски с таблицей разделов GUID (GPT), и нам нужно разбить все диски на разделы, но не делайте этого с помощью GParted, поскольку это создаст файловую систему в процессе, что нам не нужно, gdiskвместо этого используйте:

gdisk /dev/sdi
gdisk /dev/sdj
gdisk /dev/sdk
gdisk /dev/sdl

Во всех случаях используйте следующее:

o Enterдля новой пустой таблицы разделов GUID (GPT)
y Enterдля подтверждения вашего решения
n Enterдля нового раздела
Enterпо умолчанию для первого раздела по умолчанию
Enterдля первого сектора
Enterпо умолчанию для последнего сектора
fd00 Enterдля типа Linux RAID
w Enterдля записи изменений
y Enterдля подтверждения вашего решения


Теперь вы можете проверить диски:

mdadm --examine /dev/sdi /dev/sdj /dev/sdk /dev/sdl

Там должно быть написано:

(type ee)

Если это так, то теперь мы рассмотрим разделы:

mdadm --examine /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1

Там должно быть написано:

No md superblock detected

Если это так, мы можем создать массив RAID6:

mdadm --create /dev/md0 --level=6 --raid-devices=4 /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1

Нам следует дождаться полного создания массива, этот процесс мы можем легко выполнить watch:

watch cat /proc/mdstat

После создания массива следует рассмотреть его детализацию:

mdadm --detail /dev/md0

Там должно быть написано:

          State : clean
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

Теперь создаем файловую систему на массиве, если вы используете ext4, то нижескрытыйЭту команду лучше избегать, так как ее выполнение ext4lazyinitзаймет заметное время в случае большого массива, отсюда и название: "lazyinit", поэтому я рекомендую вам избегать этого:

mkfs.ext4 /dev/md0

Вместо этого следует принудительно выполнить полную мгновенную инициализацию (зарезервировав 0%, rootпоскольку это массив данных):

mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0 /dev/md0

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

Если вы решили воспользоваться сокращением и создали ext4файловую систему с помощью «лучше избегать команды», учтите, что ext4lazyinitинициализация всех inode займет заметное время, вы можете понаблюдать за процессом, пока он не будет завершен, например, с помощью iotopили nmon.

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


Теперь создадим каталог для этого массива RAID6:

mkdir -p /mnt/raid6

И просто монтируем его:

mount /dev/md0 /mnt/raid6

Поскольку мы, по сути, закончили, мы можем снова воспользоваться GParted, чтобы быстро проверить, отображает ли он linux-raidфайловую систему вместе с raidфлагами на всех дисках.

Если это так, то мы правильно создали массив RAID6 с разделами GPT и теперь можем копировать на него файлы.

Посмотрите, какой UUID mdимеет файловая система:

blkid /dev/md0

Скопируйте UUID в буфер обмена.

Теперь нам нужно отредактировать fstab, с помощью вашего любимого текстового редактора, я использовалnano, хотяsudoeditможет быть лучше использовать:

nano /etc/fstab

И добавьте в него запись:

UUID=<the UUID you have in the clipboard>    /mnt/raid6    ext4    defaults    0 0

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

Вот какие флаги монтирования я использую на RAID-массиве резервных копий данных ИБП (вместо defaults): nofail,nosuid,nodev,noexec,nouser,noatime,auto,async,rw,data=journal,errors=remount-ro


Вы можете проверить правильность после сохранения изменений:

mount -av | grep raid6

Там должно быть написано:

already mounted

Если это так, мы сохраняем конфигурацию массива; если у вас еще нет mdсозданных устройств, вы можете просто сделать:

mdadm --detail --scan >> /etc/mdadm/mdadm.conf

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

mdadm --detail --scan

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

В конце не забудьте обновить свой initramfs, иначе ваш новый массив будет автоматически собираться только для чтения, вероятно, как /dev/md127или похоже:

update-initramfs -u -k all

Проверьте, все ли вы сделали по плану, и если да, то можете начать заново:

reboot

решение2

Если вы создаете RAID-массивы на 4 необработанных блочных устройствах вместо 2 x 4 разделов, это означает, что все операции восстановления RAID могут обязательно выполняться на всех устройствах, и наоборот.

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

С другой стороны, как только вы начинаете вмешиваться, вам придется вынимать весь физический диск для замены, так что вам обязательно придется в какой-то момент деградировать оба массива. Кроме того, с SSD, по-видимому, все чаще случается, что весь диск выходит из строя, так что оба массива могут быть затронуты такими событиями в любом случае.

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

Связанный контент