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