
Моя текущая идея — создать один программный массив класса 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.