программный raid под Linux

folk
Сообщений: 4177
Зарегистрирован: 11 сен 2009, 21:00

программный raid под Linux

Сообщение folk » 22 ноя 2012, 22:20

Может кому пригодится. Делаем программный Raid1 (mirror) на двух одинаковых дисках. Разбиваем абы как - на размеры разделов особо можно не смотреть.

1. Разбиваем первый диск на разделы командой
fdisk /dev/sda

Disk /dev/sda: 250.1 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x325b359c

Device Boot Start End Blocks Id System
/dev/sda1 * 1 5 40131 fd Linux raid autodetect
/dev/sda2 6 1311 10490445 fd Linux raid autodetect
/dev/sda3 1312 30401 233665425 5 Extended
/dev/sda5 1312 1443 1060258+ fd Linux raid autodetect
/dev/sda6 1444 6666 41953716 fd Linux raid autodetect
/dev/sda7 6667 11889 41953716 fd Linux raid autodetect
/dev/sda8 11890 17112 41953716 fd Linux raid autodetect
/dev/sda9 17113 22335 41953716 fd Linux raid autodetect
/dev/sda10 22336 30401 64790113+ 83 Linux

В командах это будет что то вроде
fdisk /dev/sda
n
p
1
ENTER
+32M
t
fd

ну и так далее.


2. Такие же в точности разделы создаем на втором диске.
sfdisk -d /dev/sda | sfdisk /dev/sdb

Возможно придется добавить --force если что то sfdisk не понравится - но будьте аккуратны - ДУМАЙТЕ.

3. убедитесь что таблицы разделов записались
иногда достаточно partprobe, можно перезагрузиться.

4. sda10 sdb10 не будут частями raid1 - просто разделы. Это так запланировано, не удивляйтесь
mke2fs /dev/sda10
mke2fs /dev/sdb10

5. Создаем raid

for i in 1 2 5 6 7 8 9
do
mknod /dev/md$i b 9 $i;
mdadm --create /dev/md$i --level=1 --raid-devices=2 --metadata=0.90 /dev/sda$i /dev/sdb$i
done

6. Создаем файловые системы на получившихся дисках

mke2fs /dev/md1
for var in 5 6 7 8 9
do
mke2fs -j /dev/md$var
done
mkswap -L swap1 /dev/md2
swapon -L swap1 /dev/md2

e2label /dev/md5 root
e2label /dev/md1 boot
e2label /dev/md6 var
e2label /dev/md7 usr
e2label /dev/md8 opt
e2label /dev/md9 home

7. теперь создаем загрузчики на обоих дисках
grub --no-floppy
find /boot/grub/stage1
# our disks are /dev/sda /dev/sdb and we received
# (hd0,0)
# (hd1,0)
device (hd0) /dev/sda
root (hd0,0)
setup (hd0)
# in sdb we use hd0 since we go here if actual hd0 failed
grub --no-floppy
device (hd0) /dev/sdb
root (hd0,0)
setup (hd0)

8. В /boot/grub/grub.conf добавляем что то вроде

title Linux
root (hd0,0)
kernel /boot/kernel-2.6.36-core2-v1 root=/dev/md5 raid=noautodetect md=5,/dev/sda5,/dev/sdb5 md=1,/dev/sda1,/dev/sdb1 md=6,/dev/sda6,/dev/sdb6 md=7,/dev/sda7,/dev/sdb7 md=8,/dev/sda8,/dev/sdb8 md=9,/dev/sda9,/dev/sdb9 md=2,/dev/sda2,/dev/sdb2

9. После запусков grub бывало слетала таблица разделов. Закономерности не нашел - стал просто грузиться и проверять сразу после запуска grub - жалко терять дальнейшие усилия по установке.
После создания всех разделов raid некоторое время будет синхронизироваться (см /proc/mdstat) - это нормально [UU] появится только по завершении синхронизации.

10 Можно теперь прописать в fstab (не указаны sda10 и sdb10)
LABEL="home" /home ext3 noatime 0 2
LABEL="swap1" none swap sw 0 0
LABEL="root" / ext3 noatime 0 1
LABEL="var" /var ext3 noatime 0 2
LABEL="boot" /boot ext2 noatime 1 2
LABEL="usr" /usr ext3 noatime 0 1
LABEL="opt" /opt ext3 noatime 0 2

Для просмотра состояния нашего raid смотрим
cat /proc/mdstat
[UU] - это значит все хорошо
[_U] или [U_] - это значит один из "дисков" помер и raid работает только на одной копии. надо срочно восстанавливать.

Для восстановления ситуации вроде [U_] для md2 из sda2 sdb2 можно идти таким путем:
mdadm --detail /dev/md2
внимательно читаем что получилось, помечаем отвалившийся раздел как fail, затем удаляем его и добавляем новый. Понятно что это надо делать скорее всего для всех md? так как обычно дохнет весь винт. Пример:
mdadm --stop /dev/md2
mdadm --fail /dev/md2 /dev/sdb2
mdadm --remove /dev/md2 /dev/sdb2
mdadm --add /dev/md2 /dev/sdb2
здесь в /dev/md2 состоящем из /dev/sda2 и /dev/sdb2 отказал sdb2, мы уже воткнули новый sdb (рабочий и такого же размера) сделали на нем такие же разделы при помощи
sfdisk -d /dev/sda | sfdisk /dev/sdb
(либо наоборот если отказал sda)

Далее надо прописать так же как и раньше grub

Замечу что были сложности с --metadata=0.90 - mdadm давал ошибку при --add. Удалось обойти загрузившись с дистрибутива - там другая версия mdadm которая отрабатывает без ошибки.

Удачи! И не забывайте запускать регулярно
smartctl -a /dev/sda
smartctl -a /dev/sdb
только там вы узнаете что один из ваших дисков уже смертельно болен
Последний раз редактировалось folk 30 ноя 2019, 15:54, всего редактировалось 1 раз.
Причина: test

Вернуться в «Computer Science»

Кто сейчас на форуме

Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 42 гостей