Установка на SoftRAID

Вы удивитесь, но в отличии от RAID, реализуемого “железно”, существует два способа использования SoftRAID: нормальный и “по разделам”. Нормальным я называю способ сборки RAID, не отличающийся от “хардварного”: в массив входит целиком жесткий диск, образуя одно устройство /dev/md0, которое бьётся на разделы Мне сейчас сложно предположить причины, по которым второй способ получил более широкое распространение, потому что никаких преимуществ на самом деле он не даёт. Давайте бегло сравним:

1. Наглядность.
для того, чтобы посмотреть состояние зеркала первый способ несомненно нагляднее. Более того, при мониторинге опять же это проще и нагляднее - отказ диска выглядит именно как отказ диска. Например при использовании zabbix на проверку RAID вам нужен один датчик, в случае “разделы в зеркале” датчиков будет по числу разделов, с учётом шаблонов - один шаблон на все сервера в “правильном случае” и несколько - на “неправильный” (или один шаблон, но будут “глухие”, т.е. неиспользуемые датчики. Например вы сделали шаблон на пять разделов, но в нескольких серверах неиспользуемые датчики нужно будет отключать.

2. Простота.
при работе с массивом, собраным из жестких дисков целиком все операции нужно проводить единожды: разбивка диска, установка загрузчика (при втором случае загрузчик устанавливается на каждый диск, таблицу разделов нужно делать либо на двух дисках либо на одном и скопировать на второй), при замене диска - “правильный способ” требует одной команды, “неправильный” - по числу разделов. Опять же при правильном способе вам даже не нужно вспоминать или смотреть тип разметки: при добавлении диска в зеркало таблица разметки ресильверится автоматически.

3. Универсализация.
все манипуляции с софтрейдом по первой схеме максимально похожи на манипуляции с “хардварным” RAID-массивом.

Другими словами “в массиве диски целиком” подходит всем, второй способ - только домашним пользователям, при чём никаких преимуществ он не даёт.

После такого вступления опишем сам процесс создания правильного массива RAID1.

1. Создание массива

 # mdadm --create --raid-devices=1 --level=raid1 --metadata=0.90 /dev/md0 /dev/sdb

metadata версии 0.9 потому, что загрузка с метадаты 1.1 или 1.2 в grub на время выполнения аналогичных работ (2015 год) всё ещё не работала.

2. Разбивка
ничем не отличается от разбивки жесткого диска /dev/sdb

3. Установка загрузчика:

  • в образ граба включить модули mdraid1x mdraid09 search_fs_uuid

  • в строку загрузки ядра включить параметры
    insmod part_msdos
    insmod diskfilter
    insmod raid
    insmod mdraid09
    insmod mdraid1x

  • включить модуль raid1 в initrd
    (по статье http://www.calculate-linux.ru/issues/721)
    тип разметки у меня был msdos, будет ли это работать на GPT? скорее всего да.

установить grub штатно, на диск /dev/md0

5. добавляем второй диск в массив.

в итоге получится приблизительно вот так:

 # ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 11 Aug 26 00:03 08402b1d-c169-4852-b94d-613a4df2a170 -> ../../md0p2
lrwxrwxrwx 1 root root 11 Aug 26 00:03 4b39bcd6-3849-42e2-96f3-d9e4433eb6cd -> ../../md0p1
lrwxrwxrwx 1 root root 11 Aug 26 00:03 c2cfb54d-dc87-45a3-9495-fa932445d444 -> ../../md0p5
lrwxrwxrwx 1 root root 11 Aug 26 00:03 e88d2692-d3af-44e3-b7ac-12e3a3fbcabd -> ../../md0p3
lrwxrwxrwx 1 root root 11 Aug 26 00:03 e968c327-d84e-41d3-9186-9fa9bd92875b -> ../../md0p6

# cat /boot/grub/grub.cfg

#
 # DO NOT EDIT THIS FILE
#
 # It is automatically generated by grub-mkconfig using templates
 # from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
  load_env
fi
if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="${saved_entry}"
fi

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
else
  menuentry_id_option=""
fi

export menuentry_id_option

if [ "${prev_saved_entry}" ]; then
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi

function savedefault {
  if [ -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
}

function load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    for vm in efi_gop efi_uga ieee1275_fb vbe vga video_bochs video_cirrus
    do
      if [ -f ${prefix}/${vm}.mod ]
      then
        insmod $vm
      fi
    done
  fi
}

insmod part_msdos
insmod diskfilter
insmod mdraid09
insmod ext2
set root='mduuid/a4fe95ea01afc028d899b8dd67e85627,msdos3'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint='mduuid/a4fe95ea01afc028d899b8dd67e85627,msdos3'  e88d2692-d3af-44e3-b7ac-12e3a3fbcabd
else
  search --no-floppy --fs-uuid --set=root e88d2692-d3af-44e3-b7ac-12e3a3fbcabd
fi
if loadfont /usr/share/grub/unicode.pf2 ; then
  set gfxmode=1024x768
  load_video
  insmod gfxterm
  set locale_dir=$prefix/locale
  set lang=en_US
  insmod gettext
fi
terminal_output gfxterm
insmod part_msdos
insmod diskfilter
insmod mdraid09
insmod ext2
set root='mduuid/a4fe95ea01afc028d899b8dd67e85627,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint='mduuid/a4fe95ea01afc028d899b8dd67e85627,msdos1'  4b39bcd6-3849-42e2-96f3-d9e4433eb6cd
else
  search --no-floppy --fs-uuid --set=root 4b39bcd6-3849-42e2-96f3-d9e4433eb6cd
fi
insmod png
background_image -m stretch /grub/grub-calculate.png
if [ x$feature_timeout_style = xy ] ; then
  set timeout_style=menu
  set timeout=2
 # Fallback normal timeout code in case the timeout_style feature is
 # unavailable.
else
  set timeout=2
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/05_theme ###
set color_normal=black/black
set color_highlight=light-green/black
### END /etc/grub.d/05_theme ###

### BEGIN /etc/grub.d/10_linux ###
menuentry 'Calculate Directory Server' --unrestricted --class calculate --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-e88d2692-d3af-44e3-b7ac-12e3a3fbcabd' {
    load_video
    set gfxpayload=keep
    insmod gzio
    insmod part_msdos
    insmod diskfilter
    insmod mdraid09
    insmod ext2
    set root='mduuid/a4fe95ea01afc028d899b8dd67e85627,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint='mduuid/a4fe95ea01afc028d899b8dd67e85627,msdos1'  4b39bcd6-3849-42e2-96f3-d9e4433eb6cd
    else
      search --no-floppy --fs-uuid --set=root 4b39bcd6-3849-42e2-96f3-d9e4433eb6cd
    fi
    echo    'Loading Linux 4.9.34-calculate ...'
    linux   /vmlinuz-4.9.34-calculate root=UUID=e88d2692-d3af-44e3-b7ac-12e3a3fbcabd ro video=1024x768 real_resume=UUID=08402b1d-c169-4852-b94d-613a4df2a170 elevator=cfq  domdadm rd.auto splash=off console=tty1 quiet 
    echo    'Loading initial ramdisk ...'
    initrd  /initramfs-4.9.34-calculate.img
}
submenu 'Advanced options for Calculate Directory Server ...' --unrestricted $menuentry_id_option 'gnulinux-advanced-e88d2692-d3af-44e3-b7ac-12e3a3fbcabd' {
    menuentry 'Calculate Directory Server, with Linux 4.9.34-calculate' --unrestricted --class calculate --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.34-calculate-advanced-e88d2692-d3af-44e3-b7ac-12e3a3fbcabd' {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_msdos
        insmod diskfilter
        insmod mdraid09
        insmod ext2
        set root='mduuid/a4fe95ea01afc028d899b8dd67e85627,msdos1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint='mduuid/a4fe95ea01afc028d899b8dd67e85627,msdos1'  4b39bcd6-3849-42e2-96f3-d9e4433eb6cd
        else
          search --no-floppy --fs-uuid --set=root 4b39bcd6-3849-42e2-96f3-d9e4433eb6cd
        fi
        echo    'Loading Linux 4.9.34-calculate ...'
        linux   /vmlinuz-4.9.34-calculate root=UUID=e88d2692-d3af-44e3-b7ac-12e3a3fbcabd ro video=1024x768 real_resume=UUID=08402b1d-c169-4852-b94d-613a4df2a170 elevator=cfq  domdadm rd.auto splash=off console=tty1 quiet 
        echo    'Loading initial ramdisk ...'
        initrd  /initramfs-4.9.34-calculate.img
    }
    menuentry 'Calculate Directory Server, with Linux 4.9.34-SafeMode-calculate' --unrestricted --class calculate --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.9.34-SafeMode-calculate-advanced-e88d2692-d3af-44e3-b7ac-12e3a3fbcabd' {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_msdos
        insmod diskfilter
        insmod mdraid09
        insmod ext2
        set root='mduuid/a4fe95ea01afc028d899b8dd67e85627,msdos1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint='mduuid/a4fe95ea01afc028d899b8dd67e85627,msdos1'  4b39bcd6-3849-42e2-96f3-d9e4433eb6cd
        else
          search --no-floppy --fs-uuid --set=root 4b39bcd6-3849-42e2-96f3-d9e4433eb6cd
        fi
        echo    'Loading Linux 4.9.34-SafeMode-calculate ...'
        linux   /vmlinuz-4.9.34-SafeMode-calculate root=UUID=e88d2692-d3af-44e3-b7ac-12e3a3fbcabd ro video=1024x768 real_resume=UUID=08402b1d-c169-4852-b94d-613a4df2a170 elevator=cfq  domdadm rd.auto splash=off console=tty1 quiet 
        echo    'Loading initial ramdisk ...'
        initrd  /initramfs-4.9.34-SafeMode-calculate.img
    }
}

### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/39_memtest86+ ###
menuentry 'Memtest86+' --unrestricted {
        insmod part_msdos
        insmod diskfilter
        insmod mdraid09
        insmod ext2
        set root='mduuid/a4fe95ea01afc028d899b8dd67e85627,msdos1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint='mduuid/a4fe95ea01afc028d899b8dd67e85627,msdos1'  4b39bcd6-3849-42e2-96f3-d9e4433eb6cd
        else
          search --no-floppy --fs-uuid --set=root 4b39bcd6-3849-42e2-96f3-d9e4433eb6cd
        fi
    linux16 "/memtest86plus/memtest"
}
### END /etc/grub.d/39_memtest86+ ###

### BEGIN /etc/grub.d/40_custom ###
 # This file provides an easy way to add custom menu entries.  Simply type the
 # menu entries you want to add after this comment.  Be careful not to change
 # the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f  ${config_directory}/custom.cfg ]; then
  source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###

Формат 0.90 допускает использование в RAID-массиве до 28 устройств-компонентов, а также определяет максимальный размер этих устройств (не более 2 ТБ).

 # mdadm --create --raid-devices=2 --level=raid1 /dev/md0 missing /dev/sda


 # cl-install -D /dev/md0
* Error in parameter -D. Values for variable 'Device for install' may be ”/dev/sda (HTH VBOX HARDDISK)” [/dev/sda] or ”/dev/sdb (HTH VBOX HARDDISK)” [/dev/sdb] only


 # cl-install -p /dev/md0p1:/:ext4:on -p /dev/md0p2:/var/calculate:ext4:on
usage: cl-install [-l LOCALE] [--timezone ...
cl-install: error: the value may be on or off

Авторазметка не работает с RAID. Она применяется только на жёсткие диски. Параметр “-p” включает или выключает использование авторазметки. Для указания разделов и точек монтирования используется параметр “-d”. Параметром “–mbr none” можно отключить прописывание загрузчика.

Мне сейчас сложно предположить причины, по которым второй способ получил более широкое распространение, потому что никаких преимуществ на самом деле он не даёт.

  • при выходе из строя одного из дисков, вы можете купить диск большего размера, из которого выделить необходимые разделы для восстановления целостности массива, а остальное место использовать под другие нужды
  • вы может использовать разные RAID уровни для разных разделов. Например swap не обязательно пихать в mirror.

а также определяет максимальный размер этих устройств (не более 2 ТБ)

Что мне делать с вертушками на 4 и 8 ТБ? Хотелось бы единую схему.

а остальное место использовать под другие нужды

а при выходе из строя конкретного диска…

вы может использовать разные RAID уровни для разных разделов. Например swap не обязательно пихать в mirror.

swap обязательно запихивать в mirror. просто потому что выход диска из строя - штатное явление и сервант должен уметь и проболжать работать и загрузиться с одним диском.

Что мне делать с вертушками на 4 и 8 ТБ? Хотелось бы единую схему.

что мне делать с вот этим? от ответа на этот вопрос будет зависеть единая схема с вертушками на 4 и 8 ТБ.

 # cl-install -p /dev/md0p1:/:ext4:on -p /dev/md0p2:/var/calculate:ext4:on
usage: cl-install [-l LOCALE] [--timezone ...
cl-install: error: the value may be on or off

а при выходе из строя конкретного диска…

Не совсем понял что имеется в виду. Я имел в виду ситуацию: есть два диска по 1Тб, диски разбиты на разделы, разделы объединены в массив. Через энное время вылетает один из двух терабайтовых дисков. Если бы диски были целиком объединены в массив нам нужно купить такой-же диск или же большего размера. И запихать его целиком как замену. Если же диски были бы разбиты на разделы, то создаём на нём разделы нужного раздела для зеркала остальное пространство используем как заблагорассудится.

swap обязательно запихивать в mirror

Для сервера - да, для десктопа не обязательно, к тому же raid0 даст большую скорость на чтение и запись.

Виктор Кустов wrote:

что мне делать с вот этим? от ответа на этот вопрос будет зависеть единая схема с вертушками на 4 и 8 ТБ.
[…]

Можно попробовать поставить этой командой. --mbr none - отключит установку загрузчика. Вам в этом случае нужно будет его прописывать самому.

cl-install -p off -d /dev/md0p1:swap -d /dev/md0p2:/var/calculate --mbr none

Mikhail Hiretsky wrote:

Не совсем понял что имеется в виду. Я имел в виду ситуацию: есть два диска по 1Тб, диски разбиты на разделы, разделы объединены в массив. Через энное время вылетает один из двух терабайтовых дисков. Если бы диски были целиком объединены в массив нам нужно купить такой-же диск или же большего размера. И запихать его целиком как замену. Если же диски были бы разбиты на разделы, то создаём на нём разделы нужного раздела для зеркала остальное пространство используем как заблагорассудится.

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

В неправильном вариант нам нужно заменить диск, переразбивать новый и получить на одном диске некий профит по месту, не покрытый рейдом. Использовать его под рабочий процесс в прямом и косвенном виде на сервере мы просто не имеем права - он не покрыт рейдом. Под что он тогда?

swap обязательно запихивать в mirror

Для сервера - да

собственно сама эпопея началась именно с этого: калькосервер не умеет базовых для сервера вещей.

собственно сама эпопея началась именно с этого: калькосервер не умеет базовых для сервера вещей.

Ставиться на RAID он умеет. Только для установки GRUB он требует таблицу разделов на физическом диске.

Root partition should be at least 7 GB.
А если у меня /boot /usr /var на отдельных разделах, мне всё равно нужно 7GB? ведь не нужно. Можно проверку отключить?

VirtualBox_test_30_08_2017_20_55_24.png

похоже опять ошибка установки без пользователя

http://www.calculate-linux.ru/issues/1009 - тот же баг

EFI раздел видимо тоже проверяется на sdX

VirtualBox_test1.png

Решил также установить RAID на сервер ,
загрузился с Флешки, дальше по инструкции сайта собрал RAID

Вот результат:

calculate ~ # fdisk -l
Диск /dev/loop0: 672.8 MiB, 705425408 байт, 1377784 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт

Диск /dev/sda: 1.8 TiB, 2000398934016 байт, 3907029168 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 4096 байт
Размер I/O (минимальный/оптимальный): 4096 байт / 4096 байт
Тип метки диска: gpt
Идентификатор диска: 5269F57D-BB19-4508-82CB-AA471CF14671
Устр-во    начало      Конец    Секторы Размер Тип
/dev/sda1    2048     104447     102400    50M BIOS boot
/dev/sda2  104448 3907029134 3906924687   1.8T Linux RAID

Диск /dev/sdb: 1.8 TiB, 2000398934016 байт, 3907029168 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 4096 байт
Размер I/O (минимальный/оптимальный): 4096 байт / 4096 байт
Тип метки диска: gpt
Идентификатор диска: B8CE533E-E42D-4E60-809E-C6A5CC8D09A4
Устр-во    начало      Конец    Секторы Размер Тип
/dev/sdb1    2048     104447     102400    50M BIOS boot
/dev/sdb2  104448 3907029134 3906924687   1.8T Linux RAID

Диск /dev/sdc: 3.8 GiB, 4012900352 байт, 7837696 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0xcad4ebea
Устр-во    Загрузочный начало   Конец Секторы Размер Идентификатор Тип
 /dev/sdc4  *              256 7837695 7837440   3.8G             b W95 FAT32

Диск /dev/md0: 1.8 TiB, 2000211148800 байт, 3906662400 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 4096 байт
Размер I/O (минимальный/оптимальный): 524288 байт / 524288 байт

Ну а дальше хотел по инструкции

calculate ~ # cl-install -D /dev/md0

И такая засада

* Ошибка в параметре -D. Значения для 'Устройства для установки' может быть только 
"/dev/sda (ATA WDC WD20EFRX-68E)" [/dev/sda], "/dev/sdb (ATA WDC WD20EFRX-68E)" [/dev/sdb] 
или "/dev/sdc (Multiple Card  Reader)" [/dev/sdc] 

У меня вопрос
разбиения диска под Calculate Directory Server надо было сделать или должно автоматом пройти

Владимир, обновите утилиты до версии 3.5.7_alpha1. Описание установки можно посмотреть здесь.

А зачем ? ведь я пытаюсь установить систему с флешки из образа скачанного два дня назад,
или там утилиты старее ?
и установку я проводил с описанием на сайте, но мне там непонятен один момент,
сначала нужно использовать классическое разбиение диска принятое в Calculate Linux (написано в инструкции)

/dev/sda1 swap
/dev/sda2 20Gb Linux (/, ext4)
/dev/sda3 20Gb Linux (/, ext4)
/dev/sda4 Extended
/dev/sda5 Linux (/var/calculate, xfs)
а потом дальше написано Разметим один из дисков используя утилиту fdisk:(тоже написано в инструкции)
# создадим новую таблицу разделов GPT
g
# создадим раздел “BIOS boot”
n +50M t 4
# создадим раздел для RAID массива
n t 2 29
# сохраним изменения и выйдем
w
Но ведь такое действие уничтожит предыдущую разметку или я не прав ?

А зачем ? ведь я пытаюсь установить систему с флешки из образа скачанного два дня назад,
или там утилиты старее ?

Да, поддержка появилась совсем недавно. Сейчас уже утилиты обновлены до beta-версии и скоро появится первая сборка с поддержкой установки на рейд “из коробки”.

и установку я проводил с описанием на сайте, но мне там непонятен один момент,

Теперь доступна официальная документация по установке на Soft RAID.

сначала нужно использовать классическое разбиение диска принятое в Calculate Linux (написано в инструкции)

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

Alexander Tratsevskiy wrote:

Теперь доступна официальная документация по установке на Soft RAID.

манипуляции с разбиением диска и копированием разметки точно необходимы? разбивку можно делать уже на md0, грубу передавать sda/sdb

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

Откуда он возьмёт права?

brw-rw---- 1 root disk    8,   0 окт 18 20:39 sda
brw-rw---- 1 root disk    8,   1 окт 18 20:39 sda1
brw-rw---- 1 root disk    8,   2 окт 18 20:39 sda2
brw-rw---- 1 root disk    8,  16 окт 18 20:39 sdb
brw-rw---- 1 root disk    8,  17 окт 18 20:39 sdb1
brw-rw---- 1 root disk    8,  18 окт 18 20:39 sdb2
brw-rw---- 1 root disk    8,  32 окт 18 20:39 sdc
brw-rw---- 1 root disk    8,  33 окт 18 20:39 sdc1

ЗЫ. софтрейд он такой, да. Это вам не zfs :slight_smile:

2 Alexander Tratsevskiy:

Виктор Кустов wrote:

Root partition should be at least 7 GB.
А если у меня /boot /usr /var на отдельных разделах, мне всё равно нужно 7GB? ведь не нужно. Можно проверку отключить?

С проверкой размеров ничего не делали?

манипуляции с разбиением диска и копированием разметки точно необходимы? разбивку можно делать уже на md0, грубу передавать sda/sdb

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

Откуда он возьмёт права?

Dolphin ему даст такие права, а заодно и поможет замонтировать.