Софт рейд массив из двух жестких дисков на CentOS 6.4

В этой короткой записке написано как сделать софт рейд на примере CentOS 6.4

Для организации отказоустойчивости дисковой подсистемы на серверах и на обычных пользовательских компьютерах создают рейд массивы, которые позволяют не потерять важных данных в случаи краха жесткого диска. Все строится на том, что в такой системе используется два жестких диска c одинаковым объемом. Данные поступающие на запись, например допустим один файл, записывается на первый и второй диск. Если из строя выйдет один жесткий диск, второй продолжит работать, так как одинаковый файл был записан на два устройства - диска. Тем самым позволяя добиться отказоустойчивости, сгоревший диск заменяется на новый, и данные со второго диска автоматически начинают записываться на новый жесткий диск.

Все операции проводимые с жесткими дисками очень опасны в плане потери данных которые лежат на них. Если конечно таковые имеются. Любые манипуляции надо производить только тогда, когда есть резервная копия критически важных данных.

Рассмотрим два случая создания программного рейд массива:

1. Системный диск c уже работающей CentOS + Рейд массив из двух одинаковых жестких диска.

2. Чистая установка CentOS на два диска присутствующих в системе.

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

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

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

Первый случай: Системный диск + Рейд массив из двух одинаковых жестких диска.

Допустим у нас имеется сервер с одним жестким диском, этот диск системный. Мы добавили к нему еще два жестких диска объемом 35 Гбайт для организации программного рейда.

Краткое содержание:

1. Определяем какие жесткие диски будут в рейде

2. Создаем рейд массив из двух HDD

3. Записываем файловую систему в рейд

4. Создаем конфиг файл утилиты mdadm

5. Монтируем рейд в системе

6. Автомонтирование рейд массива при загрузке системы

1. Определяем какие жесткие диски будут в рейде

Чтобы определить какие жесткие диски есть в системе, введем комманду:

# fdisk -l | grep "Disk /dev/sd"

Disk /dev/sda: 18589 MB, 8589934592 bytes

Disk /dev/sdb: 1008589 MB, 8589934592 bytes

Disk /dev/sdc: 1008589 MB, 8589934592 bytes

Здесь мы видим что у нас в компьютере имеется три физических жестких диска, это:

1. sda

2. sdb

3. sdc

Первый жесткий диск является системным, а два добавленных пустые. Из них будем делать рейд.

2. Создаем рейд массив из двух HDD

Установим mdadm:

# yum install mdadm -y

Для организации рейд массива зеркального типа (уровень 1).

Вводим следующею команду для создания рейд массива:

# mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc

Continue creating array? y

Здесь мы не указываем определенные разделы, так как у нас их нет. Поэтому мы сразу написали имена дисков участвующих в массиве sdb и sdc. Разделы пишутся так sdb1 или sdb2.

Рассмотрим данную команду по ближе:

-- level - задает тип рейд массива, это может быть 0, 1, 5, 6.

--raid-devices - задает количество дисков участвующих в организации рейда

/dev/sdb - первый жесткий диск

/dev/sdc - второй жесткий диск

/dev/md0 - собственно, имя создаваемого массива

Проверяем, создался ли массив:

# cat /proc/mdstat

Personalities : [raid1]

md0 : active raid1 sdc[1] sdb[0]

8387572 blocks super 1.2 [2/2] [UU]

3. Записываем файловую систему в рейд

Разметим пространство создав файловую систему на нашем рейде, в качестве ФС (файловая система) берем ext4:

# mkfs.ext4 /dev/md0

4. Создаем конфиг файл утилиты mdadm

Теперь, создадим конфиг файл для утилиты mdadm:

# mdadm --detail --scan --verbose > /etc/mdadm.conf

Осталось не много, при монтируем наш рейд в системе, чтобы в него могли писать программы.

5. Монтируем рейд в системе.

Создадим точку монтирования, каталог /raid:

# mkdir /raid

При монтируем рейд в каталог /raid:

# mount /dev/md0 /raid

Второй способ монтирования, он более безопасный:

# vi /etc/rc.d/rc.local

/bin/mount -t ext4 /dev/md0 /raid

6. Автомонтирование рейд массива при загрузке системы

Чтобы ваш рейд всегда автоматически монтировался при загрузке ОС, добавьте строчку в файл /etc/fstab:

/dev/md0 /raid ext4 defaults 1 2

Заключение:
Итого мы имеем программный рейд массив уровня 1 (зеркалирование).

Второй случай: Рейд массив из двух дисков имеющихся в системе

Этот случай самый распространенный, именно его используют многие админы.

Допустим у нас новенький сервер, в нем установлено два жестких диска объемом 35 Гб.

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

Кратко надо будет сделать следующее:

1. Во время установки операционной системы создать одинаковые разделы на двух жестких дисках:

- swap - раздел подкачки, размер 1 Гб
- RAID partition - раздел RAID, выделить под него все оставшееся место за вычетом 1Гб

2. Объеденить оба жестких в рейд массив

3. Установить систему на рейд массив

4. Установить загрузчик на диск sdb

5. Настроить конфигурационный файл загрузчика, чтобы загрузка шла в случае неудачи с диска который еще работает.

Вроде все ясно.

Приступим....

Покажу как это делается в картинках. Вставляем DVD диск с CentOS в компьютер и перезагружаемся.

Нажимаем первый пункт, установка или обновление.

Нажимаем кнопку "SKIP"

Нажимаем NEXT

Нажимаем NEXT

Нажимаем NEXT

Нажимаем NEXT

Нажимаем NEXT

Нажимаем NEXT

Вводим пароль суперадминистратора

Выбираем "Create Custom Layout"

Видим два жестких диска sda и sdb, нажимаем CREATE

Выбираем Standart Partition и жмем Create.

Ставим галку напротив диска sda как на картинке.

Выбираем File System Type = swap и указываем размер 1000 MB

Заполняем и нажимаем кнопку OK, после чего создаться раздел SWAP объемом 1000 MB

Теперь создадим корневой раздел /.

Нажимаем опять кнопку Create. Выбираем RAID Partition как на картинке.

Ставим галочку на sda диске, выбираем File System type = software RAID.

А также ставим выбираем Fill to maximim alowable size и нажимаем кнопку OK.

Все, мы создали два раздела на первом жестком диске sda. Аналогичную операцию требуется проделать со вторым жестким диском sdb.

Нажимаем кнопку Create. Выбираем второй жесткий диск sdb (галка). Создаем на нем раздел Swap, объемом в 1000 МБ.

Галочка Fixed size.

Size - 1000

Нажать кнопку OK.

Нажимаем кнопку Create, выбираем File System Type- Software RAID

Галка - Fill to maximum allowable size

Кнопка - OK

Теперь у нас созданы одинаковые разделы двух жестких дисках.

Осталось объеденить эти два диска в RAID массив.

Нажимаем как обычно по кнопке Create, выбираем RAID Device.

Mount Point: /

File System Type: Ext4

RAID Device: md0

RAID Level: RAID1

Галочки напротив sda и sdb дисков.

Кнопка OK.

Все рейд массив создан. Осталось установить на него операционную систему.

Нажимаем по кнопке Next.

Нажимаем Write changes to disk.

Нажимаем Next, загрузчик Grub будет установлен на диск sda. После установки ОС, мы скопируем его на второй диск sdb,

чтобы система грузилась с любого диска в случае краха одного из них.

Минимальная инсталяция. Нажимаем Next

Процесс установки системы.

Установка завершена, нажмите Reboot для перезагрузки.

Вводим логин root

Пароль свой.

Проверим состояние массива:

# cat /proc/mdstat

Копируем загрузчик Grub на второй жесткий диск sdb.

Вводим в терминале:

# grub

grub> find /boot/grub/stage1

hd (0,1)

hd (1,1)

grub> root (hd0,1)

grub> setup (hd0)

grub> root (hd1,1)

grub> setup (hd1)

grub> quit

Этими командами мы скопировали загрузчик на второй жесткий диск sdb.

Теперь подправим конфигурационный файл grub.conf

# vi /boot/grub/grub.conf

Добавляем в этот файл строчку:

fallback=1

Этот параметр позволит загрузчику в случае неудачи загрузки с диска sda, загрузится с диска sdb.

А также надо удалить или закоментить строку:

splashimage=(hd0,1)/boot/grub/splash.xpm.gz

Но осталось еще добавить следующие строчки, чтобы Grub мог загрузится со второго жесткого диска:

title CentOS (2.6.32-358.el6.i686)

root (hd1,1)

kernel /boot/vmlinuz-2.6.32-358.el6.i686 ro root=UUID=fc8b1c7e-2529-4c2a-accf-3b27004968a6 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_MD_UUID=0dbaca2b:ef34020c:3a8414fa:f4311c8c SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

initrd /boot/initramfs-2.6.32-358.el6.i686.img

Вот полный файл grub.conf

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE: You do not have a /boot partition. This means that

# all kernel and initrd paths are relative to /, eg.

# root (hd0,1)

# kernel /boot/vmlinuz-version ro root=/dev/md0

# initrd /boot/initrd-[generic-]version.img

#boot=/dev/sda

default=0

timeout=5

fallback=1

#splashimage=(hd0,1)/boot/grub/splash.xpm.gz

hiddenmenu

title CentOS (2.6.32-358.el6.i686)

root (hd0,1)

kernel /boot/vmlinuz-2.6.32-358.el6.i686 ro root=UUID=fc8b1c7e-2529-4c2a-accf-3b27004968a6 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_MD_UUID=0dbaca2b:ef34020c:3a8414fa:f4311c8c SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

initrd /boot/initramfs-2.6.32-358.el6.i686.img

title CentOS (2.6.32-358.el6.i686)

root (hd1,1)

kernel /boot/vmlinuz-2.6.32-358.el6.i686 ro root=UUID=fc8b1c7e-2529-4c2a-accf-3b27004968a6 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_MD_UUID=0dbaca2b:ef34020c:3a8414fa:f4311c8c SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

initrd /boot/initramfs-2.6.32-358.el6.i686.img

Обязательно закоментируйте строчку:

splashimage=(hd0,1)/boot/grub/splash.xpm.gz

В противном случае будете видеть следующею ошибку если один из дисков умрет:

failed to read image

Все, теперь все должно работать! Проверьте чтобы в настройках Grub у вас были одинаковые настройки для двух дисков, в противном случае будут проблемы с загрузкой.

Чтобы массив быстрее перестраивался, можно внести специальную настройку:

# echo 50000 >/proc/sys/dev/raid/speed_limit_min

Обязательно, после всех проделанных операций, проверяйте как ведет себя массив без одного жесткого диска. Грузится ли система с одним диском.

Замена диска в массиве

Бывает так, что со временем диск в массиве умирает. Он может просто не определятся в BIOS (CentOS) или может чудить из за механических поломок или плохой поверхности.

Процедура замены в случае сгоревшего диска следующая:

1. Выключаете сервер

2. Вынимаете сгоревший диск и устанавливаете новый

3. Создаете разделы на новом диске как на выжившем работающем носителе.

4. Добавляете новый диск в массив.

5. Копируете загрузчик grub

Давайте рассмотрим последовательность замены диска если команда рапортует нам о нехватке диска в массиве - [U_]

# cat /proc/mdstat

cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda2[0]
7875520 blocks super 1.0 [2/1] [U_]
bitmap: 1/1 pages [4KB], 65536KB chunk
unused devices:

Как видим одного диска - нет!

Теперь сама процедура:

1. Выключаете сервер

# shutdown -h now

2. Вынимаете сгоревший диск и устанавливаете новый

Открутите винты и отсоедините шлейфы - уберите сгоревший диск.

За место него установите заведомо исправный диск.

3. Создаете разделы на новом диске как на выжившем работающем носителе.

Включите сервер и введите команду:

# sfdisk -d /dev/sda | sfdisk /dev/sdb --force

Этой командой мы копируем разделы с диска sda на диск sdb. Диск sda - это выживший, а диск sdb - это новый диск напарник.

Чтобы система увидела новые разделы диска sdb введите:

# sfdisk -R /dev/sdb

4. Добавляете новый диск в массив.

Далее, добавляйте новый диск в массив:

# mdadm /dev/md0 --add /dev/sdb2

5. Копируете загрузчик grub

Вводим в терминале:

# grub

grub> find /boot/grub/stage1

hd (0,1)

hd (1,1)

grub> root (hd0,1)

grub> setup (hd0)

grub> root (hd1,1)

grub> setup (hd1)

grub> quit

Процедура замены в случае если S.M.A.R.T. выдает неутишительный отчет с диагнозом - диск скоро умрет:

1. Убираете диск из массива

2. Выключаете сервер

2. Вынимаете сгоревший диск и устанавливаете новый

3. Создаете разделы на новом диске как на выжившем работающем носителе.

4. Добавляете новый диск в массив.

5. Копируете загрузчик grub

Здесь все тоже самое что и в первом случае, за исключением одного но - точнее первого пункта:

Чтобы убрать диск из массива введите команду:

# mdadm --manage /dev/md0 --fail /dev/sdb

Здесь мы указали что диск sdb сбойный, и что с ним работать уже нельзя.

Далее можно удалить его из массива:

# mdadm /dev/md0 -r /dev/sdb

Процедура добавления нового диска в массив идет уже по описанной процедуре которую я описал выше.

Краткий FAQ:

1. Массив создался под именем md0 с двумя разделами sda2 и sdb2, после отключения одного из дисков и дальнейшего включения массивов стало два md0 и md127. В первом md0 диск раздел sda2, а во втором md127 раздел диск sdb2.

Решение:

Отключаем массив md127:

# mdadm -S /dev/md127

Добавляем диск sdb2 в массив md0:

# mdadm /dev/md0 --add /dev/sdb2

Проверяем состояние массива:

# cat /proc/mdstat

Должна быть синхронизация...

Или, если первый способ не прошел, значить делаем так:

Создаем новый конфиг mdadm:

mdadm --detail --scan --verbose > /etc/mdadm.conf

Такое может быть если нету конфигурационного файла /etc/mdadm.conf

Ну и потом как обычно, делаем настройку для автомонтирования при загрузки системы:

Открываем файл /etc/fstab

и добавляем строчку для монтирования:

/dev/md0 /raid ext4 defaults 1 2

2. Как скопировать загрузчик Grub с одного диска на другой в массиве. Чтобы система грузилась при неудачной загрузки с одного из дисков.

Решение:

Находим разделы дисков:

# grub

> find /boot/grub/stage1

hd (0,1)

hd (1,1)

Копируем загрузчик:

> root (hd0,1)

> setup (hd0)

> root (hd1,1)

> setup (hd1)

> quit

3. Не правильно при монтировал массив в /etc/fstab, теперь файловая система упала в режим Read Only, что делать?

Появляются ошибки при редактировании файл /etc/fstab вроде этих:

W10: Warning: Changing a readonly file

E45: 'readonly' option is set (add !to override)

Решение:

Главное не паниковать, если не правильно при монтирован массив, то файловая система просто перейдет в режим Read Only.

Нам необходимо смонтировать файловую систему в режиме записи, для этого вводим следующею команду:

# mount -o remount,rw /

И далее исправить /etc/fstab так чтобы массив нормально функционировал.

4. Как сделать не большой тюнинг массива уровня 5?

Решение:

Добавляем в /etc/rc.d/rc.local строчку:

echo 8192 > /sys/block/md0/md/stripe_cache_size

Источник полностью: http://yvision.kz/post/352352

PS: Дополнение на CentOS 6.6, по установке grub на второй диск в массиве

...
Проверим состояние массива:
# cat /proc/mdstat
Копируем загрузчик Grub на второй жесткий диск sdb.
Вводим в терминале:
# grub
grub> find /boot/grub/stage1
hd (0,1)
hd (1,1)
grub> root (hd0,1)
grub> setup (hd0)
grub> root (hd1,1)
grub> setup (hd1)
grub> quit
Этими командами мы скопировали загрузчик на второй жесткий диск sdb.
...

Этого достаточно.

При имитации выхода из строя одного из дисков физическим отключением, после подключения его обратно в RAID-массив нужно проверить наличие диска в составе массива:
# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb2[1]
154240896 blocks super 1.0 [2/1] [_U]
bitmap: 2/2 pages [8KB], 65536KB chunk

И в случае отсутствия, добавить диск в массив выполнив команду (по аналоги, в зависимости от исключенного диска):
# mdadm /dev/md0 -a /dev/sda2
mdadm: re-added /dev/sda2

И дождаться синхронизации массива:
# watch cat /proc/mdstat

Комментарии

Изображение пользователя Crazy Rebel.

Где Вы такой древний текст

Где Вы такой древний текст раскопали? Два диска 35Гб... А вообще вариант рэйд на два диска сразу по моему опыту чревато неожиданными проблемами при восстановлении. Гораздо лучше использовать первый вариант.

Изображение пользователя Marat.

Возникла необходимость. Два

Возникла необходимость.
Два диска по 35 Гб у автора, потому что в виртуалке, скорее всего.
Какого рода проблемы?

Изображение пользователя Crazy Rebel.

Марат wrote:Возникла

Марат wrote:
Возникла необходимость.
Два диска по 35 Гб у автора, потому что в виртуалке, скорее всего.

Организовывать рэйд в виртуалке это имхо - маразматический маразм. кроме того вот эта фраза
Quote:
Допустим у нас новенький сервер, в нем установлено два жестких диска объемом 35 Гб.
как бы указывает на отсутствие виртуалок.

Марат wrote:
Какого рода проблемы?

проблемы с загрузчиком. ему ведь сволочи пофигу рэйд там у тебя или не рэйд и он прописывается в mbr одного диска и смортрит физическую карту дисков, так что если тот физический диск на котором загрузчик отказывает то начинаются весёлые танцы с бубном. Так что если надо, чтобы рейд был обязательно загрузочным, то тут лучше железные рэйды использовать.

Сегодня я бы всем однозначно советовал покупать ssd небольшого размера для системы и свопа и hdd для рэйда.

Изображение пользователя Marat.

Статью дополнил. К советам

Статью дополнил. К советам присмотрюсь.

Изображение пользователя manofring.

Млин тут че админы

Млин тут че админы локалхоста?
"Так что если надо, чтобы рейд был обязательно загрузочным, то тут лучше железные рэйды использовать." сразу видно чел ниразу не впирался с этим железным гуамном. Ну ну, я буду соболезновать, откровенно глумясь.
И да юзать цент не рекомендую, ибо я непонимаю ихнюю тупую политику которая не позволяет грузить бут из под лвм и из под мдраид. Тоесть в дебианах запросто можно грузится из загрузочногго тома ЛВМ, который звпросто может быть на РАИД 1.
Какая разница че там афтор использует, сути это не меняет.

Изображение пользователя Marat.

По мне софтрейд так же более

По мне софтрейд так же более дружелюбен при SOHO решениях. А при выходе из строя железного рейд-контроллера спасет или бекап, или наличие другого такого железного рейд-контроллера, но эти два условия у админов не всегда наблюдаются.
А в CentOS бут из mdadm грузится. Убедился после того, как ось на RAID-1 убил)
Но этож линукс, починил быстро. Слава бекапам и лайвсд дистрам на deb ;)

Изображение пользователя Crazy Rebel.

manofring wrote:Млин тут че

manofring wrote:
Млин тут че админы локалхоста?

Вы угадали. Я такую проблему отгрёб возможно по собственной недообразованности, но сейчас считаю что проще иметь для системы отдельный ssd.

Изображение пользователя manofring.

"о сейчас считаю что проще

"о сейчас считаю что проще иметь для системы отдельный ssd." однако богатые сча пошли админы локалхостов...а ж зависть берет :) А мы все на сасах и сказях...:)

Изображение пользователя Crazy Rebel.

manofring wrote: однако

manofring wrote:
однако богатые сча пошли админы локалхостов...а ж зависть берет :)

Для системы + своп 32Гб более чем достаточно (ну по крайней мере моему пусть и не локал но маленькому хосту), а стоимость ssd на 32Гб сопоставима и, даже меньше, со стоимостью любого винта скази или сас.

style="display:inline-block;width:728px;height:15px"
data-ad-client="ca-pub-4493870272388852"
data-ad-slot="6622567932">