Перейти к основному содержанию

mdadm — RAID10 из четырёх NVMe дисков на сервере Dell

Linux

Делаем конфетку из... того что есть.

А есть у нас сервер Dell PowerEdge R640 с операционной системой Ubuntu Server. В сервере стоят два NVMe диска, которые собраны в RAID1 с помощью программного RAID контроллера PERC S140. SATA контроллер был переведён в режим RAID Mode, опция NVMe Settings установлена в RAID. И RAID1 из двух дисков NVMe 3.84 TB KCD5XLUG3T84 прекрасно работал.

SSD Dell EMC NVMe 3.84 TB — KCD5XLUG3T84

Потом место кончилось. Было принято решение приобрести ещё два диска такого же объёма и сделать RAID10 из четырёх NVMe дисков. Диски были куплены, немного другой модели — Dell KCD61LUL3T84.

dell

dell

Приступил я к задаче и наткнулся на две проблемы.

Проблема первая

Новые диски оказались не Dell. Опа, вот тебе и раз!

Диск, которого не существует — Dell KCD61LUL3T84 NVMe 3.84 TB

Ну ладно, пусть не Dell, однако, программный контроллер PERC S140 отказался видеть новые диски. А в iDRAC Bus Protocol оказался PCIe, в то время как прежние два диска — NVMe.

raid

Я честно не знаю в чём именно здесь разница между NVMe и PCIe, но подозреваю, что новые диски работают как-то иначе.

— А это хорошо или плохо?
— Это иначе.

Проблема вторая

Программный контроллер PERC S140 в Linux не поддерживает RAID10. Опа, вот тебе и два!

На самом деле я это знал заранее. Единственный вариант в данном случае — разобрать программный контроллер PERC S140 и собрать RAID10 с помощью mdadm. Была, конечно, мысль собрать два RAID1, а потом объединить их в RAID0 с помощью mdadm. Но нафига тогда PERC S140 использовать, если в mdadm можно сразу собрать RAID10 из четырёх дисков? Смысл в этом был бы, если была существенная разница между NVMe и PCIe, но, повторюсь, я не знаю в чём здесь именно разница, да и новые диски в принципе не хотят работать как NVMe, только PCIe, чем бы оно ни было.

Итак, план работ такой:

  1. Разбираем RAID1 в PERC S140.
  2. Отключаем PERC S140.
  3. Собираем RAID10 из четырёх NVMe дисков с помощью mdadm.

Разбираем RAID1 в PERC S140

Загружаемся в BIOS.

raid

F2 при загрузке.

dell

Device Settings.

raid

DELL EMC PERC S140 Configuration Utility.

dell

Controller Management.

raid

Virtual Disk Management.

raid

Select Virtual Disk Operations.

raid

Выбираем RAID1 массив, который нужно удалить. В моём случае он один. Delete Virtual Disk(s).

raid

Подтверждаем удаление галкой Confirm. YES.

raid

RAID1 удалён.

Приведём в порядок диски.

dell

Возвращаемся в Controller Management.

raid

После удаления массива появляются новые опции. Выбираем Convert to Non-RAID Disk.

raid

Выбираем тип интерфейса NVMe.

raid

Отмечаем галкой диски, которые раньше были в RAID1. Apply Changes.

raid

Нам говорят, что данные с дисков удалятся. Подтверждаем конвертацию. Yes.

raid

Готово.

raid

Диски стали Non-RAID.

Отключаем PERC S140

Заходим в главное меню BIOS.

raid

Переходим в раздел System BIOS.

raid

NVMe Settings.

raid

NVMe mode устанавливаем как Non RAID. OK.

raid

Back.

raid

Переходим к SATA Settings.

raid

Embedded SATA меняем с RAID Mode на AHCI Mode.

raid

OK.

raid

Back.

raid

Finish.

raid

Подтверждаем изменения. Yes.

raid

Изменения сохранены. OK.

raid

Finish.

raid

Выходим и перезагружаем сервер. Yes.

raid

Для проверки можно снова зайти в BIOS и убедиться что пункт DELL EMC PERC S140 Configuration Utility отсутствует.

dell

В iDRAC все четыре диска теперь выглядят одинаково, Bus Protocol — PCIe. Уж не знаю, хуже это чем NVMe или точно так же.

raid

Собираем RAID10 из четырёх NVMe дисков с помощью mdadm

Дальше работаем в операционной системе Ubuntu Server. Пакет для работы с nvme — nvme-cli:

apt-get install nvme-cli

Список дисков:

nvme list

raid

Первые два диска в списке новые. Вторые два старые. Проверим, если ли какие-то разделы.

lsblk | grep nvme

raid

Да, на новых дисках есть разделы, даже разбираться не буду, просто всё удалю с помощью fdisk. Чистим первый диск.

fdisk /dev/nvme0n1
d
d
d
w

raid

lsblk | grep nvme

raid

Разделов на первом диске больше нет. Чистим второй диск.

fdisk /dev/nvme1n1
d
d
d
w

raid

lsblk | grep nvme

raid

Разделы на всех дисках удалены.

Я планирую на каждом диске создать один GPT раздел и уже четыре полученные раздела добавить в RAID10 массив. GPT разделы создаю с помощью fdisk, сначала на первом диске.

fdisk /dev/nvme0n1
g
n
w

raid

Повторяю процедуру для всех остальных дисков.

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

raid

lsblk | grep nvme

raid

Теперь у нас имеется четыре раздела, которые мы будем использовать в mdadm:

  • /dev/nvme0n1p1
  • /dev/nvme1n1p1
  • /dev/nvme2n1p1
  • /dev/nvme3n1p1

Проверим, есть ли уже массивы.

cat /proc/mdstat

raid

Массивов нет.

Создаём RAID10 массив /dev/md127 из четырёх разделов на NVMe дисках:

mdadm --create --verbose /dev/md127 -l 10 -n 4 /dev/nvme0n1p1 /dev/nvme1n1p1 /dev/nvme2n1p1 /dev/nvme3n1p1

raid

RAID10 массив создан.

cat /proc/mdstat

raid

Появилось устройство md127, массив в состоянии rsync. 619 минут до завершения.

Детальная информация о массиве:

mdadm --detail /dev/md127

raid

Чтобы после перезагрузки массив так и остался с названием md127, нужно сделать файл mdadm.conf. Создаём директорию:

mkdir /etc/mdadm

Заполняем конфигурационный файл:

echo "DEVICE partitions" > /etc/mdadm/mdadm.conf
mdadm --detail --scan | awk '/ARRAY/ {print}' >> /etc/mdadm/mdadm.conf

raid

После изменения файла /etc/mdadm/mdadm.conf следует обновить initramfs:

update-initramfs -u

Особенно это актуально, когда загрузочная область находится на массиве. Если вы не выполните обновление initramfs, то конфигурация массива попадёт туда при обновлении системы или при обновлении образа другой программой, если такое обновление случится, конечно.

Перезагружаю сервер для проверки.

raid

После перезагрузки название массива подцепилось правильное. Только синхронизация остановилась в состоянии resync=PENDING. Пнём:

mdadm --readwrite /dev/md127

После этого синхронизация продолжится. На этом я закончу ковырять сервер. Задача по созданию RAID10 массива из четырёх NVMe дисков выполнена. Файловую систему потом накатят другие сисадмины.

Дополнительно

Что ещё можно сделать? Например, можно увеличить скорость синхронизации, поскольку у нас быстрые NVMe диски. Синхронизацию мне удавалось ускорить в семь раз.

mdadm — увеличиваем скорость синхронизации массива

Теги

 

Похожие материалы

Dell — установка perccli на Ubuntu Server

Имеем сервер Dell PowerEdge R740xd2 с контроллером PERC H730P Mini на борту. На сервер установлена операционная система Ubuntu Server 18.04. Для управления RAID контроллером требуется установить утилиту perccli.

Теги