Сохранность данных на диске можно обеспечить вторым диском, который работает как зеркало для первого. Этот режим называется RAID первого уровня (Redundant Array of Inexpensive Disks - избыточный массив недорогих дисков). По другому - RAID-1.
Рассмотрим случай, когда есть диск с установленной системой Linux и необходимо подключить второй диск и перевести эту пару в работу в режиме зеркала. Эта новая система должна выполнять следующие функции:
* Писать данные одновременно на оба диска
* При отказе одного диска грузиться как ни в чём ни бывало со второго.В Linux для этого есть драйвер MD, его поддержка загрузчиками LILO и GRUB и программа mdadm, с помощью которой мы управляемся с RAID-ами.
Итак, дан компьютер с установленной на раздел /dev/sda2 работающей системой Linux. Раздел /dev/sda1 - это swap. Также у нас в наличии подключенный второй диск /dev/sdb с такой же геометрией. Он пока пуст. Замечу, что развлекался я в Alt Linux Server 4.0.
Шаги по созданию raid-1:
Убеждаемся, что ядро поддерживает raid1. Этот модуль может быть статическим в ядре или в виде подгружаемого модуля. Если это не так, вытаскивайте ядро с kernel.org, конфигурите его, собирайте его, устанавливайте и перезапускайтесь с него.
Загружаем модуль, если они не статический:
modprobe raid1
Устанавливаем пакет MDADM.
Запускаем fdisk и делаем тип раздела /dev/sda2 как "Linux raid autodetect"
Перезагружаемся.
Делаем копию таблицы разделов первого диска на второй:sfdisk -d /dev/sda | sfdisk /dev/sdb
Создаём raid-1 массив только из одного раздела /dev/sdb2, поскольку /dev/sda2 сейчас пока занят - с него мы загрузились.
mdadm --create /dev/md0 --level=1 --raid-disk=2 missing /dev/sdb2
Параметр "missing" указывает программе, что у нас пока неполноценный массив и одного диска пока не хватает.
Примечание: состояние raid-массивов можно всегда посмотреть в /proc/mdstat.
Теперь создаём конфиг для mdadm. Файл называется /etc/mdadm.conf. Можно сделать это вручную:
MAILADDR 77777XX777@sms.primtel.ru
PROGRAM /sbin/mdadm-syslog-events
DEVICE partitions
ARRAY /dev/md0 level=raid1 num-devices=2 devices=/dev/sdb2,/dev/sda2 auto=mdВ этом файле указали адрес, куда слать сообщения о событиях в RAID и главное - из чего состоит наш RAID.
Примечание: Запись об устройствах в этом файле можно сделать автоматически:
mdadm --examine --scan >>/etc/mdadm.conf
Делаем файловую систему на /dev/md0 (мы уже имеем raid-1 !):
mkfs -t ext3 /dev/md0
Монтируем свежесозданный раздел:mkdir /mnt/md0
mount /dev/md0 /mnt/md0
Копируем систему с sda (предварительно стоит остановить все базы данных и прочие полезные программы):cp -dpRx / /mnt/md0
Обязательно следует скопировать ручками или создать inode для /dev/null и /dev/console в копии системы. В версиях ядер с udev без этого не обойтись.
Грузимся с Live DVD с Linux-ом в режиме восстановления системы (у меня DVD Alt Linux это умеет).mkdir /mnt/1
mount /dev/md0 /mnt/1
mount /dev /mnt/1/dev -o bind
mount /proc /mnt/1/proc -o bind
mount /sys /mnt/1/sys -o bind
chroot /mnt/1
Если вы всё сделали правильно, значит вы работает уже на своей системе на диске RAID-массива.
Добавляем в RAID-1 первый диск:
mdadm -a /dev/md0 /dev/sda2
Это длительная процедура. В этот момент началась синхронизация дисков. Её прерывать не следует. Просмотреть, что происходит можно так:
watch -n 5 cat /proc/mdstatРаз в 5 секунд будет выводиться инфо о состоянии нашего RAID-а.
После синхронизации, если вы добавляли автоматические записи в /etc/mdadm.conf, их стоит стереть и снова:mdadm --examine --scan >>/etc/mdadm.conf
Если вы делали это вручную, то ничего делать не надо, поскольку у вас там нормальная запись об устройствах, а не их UUID-ы.
Генерим новый RAM-диск:cd /boot
rm initrd-2.6.28.img
mkinitrd initrd-2.6.28.img 2.6.28Надеюсь, ваше ядро поддерживает модуль raid1. Если это не так, то ничего не получится. (См. самый первый пункт).
Обратите внимание, чтобы устройства жёстких дисков в Live CD были такими же, что и в вашей системе. Т.е. если в вашей системе это sda, то и при загрузке с LiveCD они должны быть sda, а не hda. Иначе в initrd могут не попасть нужные модули. Если это не так, выберите другой LiveCD или ручками в командной строке добавляйте в initrd не знаю уж какие модули.
Правим /etc/lilo.conf, отмечу важные строки и конфиг для моего ядра:default="2628"
boot="/dev/md0"
raid-extra-boot=mbr-only
disk=/dev/sda bios=0x80
disk=/dev/sdb bios=0x81image="/boot/vmlinuz-2.6.28"
label="2628"
initrd="/boot/initrd-2.6.28.img"
root="/dev/md0"
read-only
Затем выполняем "lilo". Предупреждение о том, что загрузочная запись будет в том числе и не на первом диске можно проигнорировать.
Правим /etc/fstab. Вместо корня на /dev/sda2 указываем /dev/md0:/dev/md0 / ext3 defaults 1 1
Перезагружаемся и работаем с RAID-1.ПРИМЕЧАНИЕ: Если у вас GRUB, то:
В /boot/grub/grub.conf должно быть:timeout 10 # Грузимся по умолчанию с sda, если не доступен, грузимся с sdb
default 0
fallback 1# Загрузка с первого диска
title 2628 (hd0,0)
kernel (hd0,0)/vmlinuz-2.6.28 root=/dev/md0# Загрузка со второго диска, если с первого не получилось
title 2628 (hd1,0)
kernel (hd1,0)/vmlinuz-2.6.28 root=/dev/md0Запускаем grub и делаем загрузочные записи на первом и втором диске
# grub
grub> root (hd0,0)
grub> setup (hd0)
grub> root (hd1,0)
grub> setup (hd1)
grub> quitДОПОЛНЕНИЕ: Если у вас нет спасательного DVD или Live-DVD или ещё какие проблемы (у меня случилось так, что спасательный режим DVD с Alt Linux 5.0 ни в какую не определял устройство DVD, а Live DVD не хотел иметь ничего общего с /dev/md0), то: после копирования системы с /dev/sda2 на /dev/md0 можно сделать так:
1. Сделать новую initrd для /dev/sda и скопировать на /dev/md0:
cd /boot
mkinitrd initrd-2.6.28.img 2.6.28
cp initrd-2.6.28.img /mnt/md0/boot2. Смонтировать /dev, /proc, /sys в /mnt/md0 (См. выше)
3. Поменять корень системы:
chroot /mnt/md0
4. В lilo.conf указать загрузку не с /dev/md0, а /dev/sda:
boot="/dev/sda"
5. В lilo.conf не вставлять строку:
raid-extra-boot=mbr-only
6. Перезагрузиться. Система загрузится с /dev/md0.
7. Сделать и дождаться результата:
mdadm -a /dev/md0 /dev/sda2
8. Исправить lilo.conf для полноценного RAID:
boot="/dev/md0"
raid-extra-boot=mbr-only9. lilo и потом перезагрузка.
URL: http://www.arccomm.ru/OpenSource/Linux_server/raid.html
Обсуждается: http://www.opennet.me/tips/info/2279.shtml
А что, старая статья на эту тему на этом ресурсе устарела и удалена ?
Не-а: http://www.opennet.me/base/sys/root_soft_raid.txt.html
ИМХО, всё это охренительно трудоёмко. Было бы здорово, если бы процедуру немного автоматизировали.
Статья о том, как исправить ошибку инсталляции. При сетапе через kickstart/AutoYast все гораздо прощеНо такая статья (и заметки) на OpenNet действительно есть.
напиши скрипт. трудоёмко будет, когда диски сдохнут, а ты не вдупляешь как оно работает или когда скрипты навернятся.если понимаешь, что делаешь, то всё легко
Как бы софтовые райды делать/пересобирать без перезагрузки, цены бы не было.
>Как бы софтовые райды делать/пересобирать без перезагрузки, цены бы не было.ну если корень не на рейде, то кто мешает? а если и на рейде, то его перемонтировать можно
>ну если корень не на рейде, то кто мешает? а если и на рейде, то его перемонтировать можноВ теории да, а на практике сильно зависит от разбивки.
lilo?
я по этому мануалу себе рейдик для тестов делал.
Кроме него видели и такой, в котором перезагрузка ненужна... Если интересно - могу поискать ссылку.
А если на диске LVM то действия аналогичны? Ну, понятно что root в другом месте будет в конфигурации загрузчика.
Можно на LVM2 сделать зеркалирование средствами LVM
> Можно на LVM2 сделать зеркалирование средствами LVMЗеркалирование в device-mapper какое-то мерзкое: метаданные держит на отдельном девайсе (что само по себе не так уж плохо, но чтобы средствами lvm сделать зеркалированный том на _двух_ PV, надо трясти бубном), да ещё и чтение не распределяет по зеркалам. Лучше уж делать два LV и поверх них md-raid1. Или наоборот, md-raid1 поверх дисков, а сверху LVM. Это всё не касается raid0, который в LVM работает не хуже, чем md-raid0.
вот вариант без LiveCD http://www.ourorbits.org/itview/articles/linuxraid.shtml от 2003 ещё года, второй описываемый вариант, названный альтернативным - как раз правильный для настоящего времени