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

Added by Виктор Кустов 30 days ago

Вы удивитесь, но в отличии от 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
  1. 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 ###
    
    

Replies (12)

RE: Установка на SoftRAID - Added by Виктор Кустов 28 days ago

Формат 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

RE: Установка на SoftRAID - Added by Mikhail Hiretsky 27 days ago

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

RE: Установка на SoftRAID - Added by Mikhail Hiretsky 27 days ago

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

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

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

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

RE: Установка на SoftRAID - Added by Виктор Кустов 27 days ago

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

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

вы может использовать разные 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

RE: Установка на SoftRAID - Added by Mikhail Hiretsky 27 days ago

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

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

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

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

RE: Установка на SoftRAID - Added by Mikhail Hiretsky 27 days ago

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

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

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

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

RE: Установка на SoftRAID - Added by Виктор Кустов 27 days ago

Mikhail Hiretsky wrote:

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

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

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

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

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

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

RE: Установка на SoftRAID - Added by Mikhail Hiretsky 27 days ago

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

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

RE: Установка на SoftRAID - Added by Виктор Кустов 27 days ago

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

RE: Установка на SoftRAID - Added by Виктор Кустов 27 days ago

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

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

RE: Установка на SoftRAID - Added by Виктор Кустов 27 days ago

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

(1-12/12)

Thank you!