The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Переход на RAID-1 в Linux
Сохранность данных на диске можно обеспечить вторым диском, который работает
как зеркало для первого. Этот режим называется 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=0x81

      image="/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/boot

2. Смонтировать /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-only

9. lilo и потом перезагрузка.
       
 
16.02.2010 , Автор: Иванов Аркадий , Источник: http://www.arccomm.ru/OpenSource/Li...
Ключи: raid, linux, mdadm
Раздел:    Корень / Администратору / Система / Диски и файлы / RAID массивы

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, PavelR (??), 12:17, 17/02/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А что, старая статья на эту тему на этом ресурсе устарела и удалена ?
     
     
  • 2.15, Michael Shigorin (ok), 19:02, 19/08/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Не-а: http://www.opennet.dev/base/sys/root_soft_raid.txt.html
     

  • 1.2, charon (ok), 12:22, 17/02/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    ИМХО, всё это охренительно трудоёмко. Было бы здорово, если бы процедуру немного автоматизировали.
     
     
  • 2.3, sHaggY_caT (ok), 12:27, 17/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Статья о том, как исправить ошибку инсталляции. При сетапе через kickstart/AutoYast все гораздо проще

    Но такая статья (и заметки)  на OpenNet действительно есть.

     
  • 2.5, фноним (?), 15:47, 17/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    напиши скрипт. трудоёмко будет, когда диски сдохнут, а ты не вдупляешь как оно работает или когда скрипты навернятся.

    если понимаешь, что делаешь, то всё легко

     

  • 1.4, Ъ (?), 14:50, 17/02/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Как бы софтовые райды делать/пересобирать без перезагрузки, цены бы не было.
     
     
  • 2.6, фноним (?), 15:48, 17/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >Как бы софтовые райды делать/пересобирать без перезагрузки, цены бы не было.

    ну если корень не на рейде, то кто мешает? а если и на рейде, то его перемонтировать можно

     
     
  • 3.9, Ъ (?), 10:54, 18/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >ну если корень не на рейде, то кто мешает? а если и на рейде, то его перемонтировать можно

    В теории да, а на практике сильно зависит от разбивки.

     

  • 1.7, timon (?), 16:08, 17/02/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    lilo?
     
  • 1.10, Filosof (ok), 18:52, 19/02/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    я по этому мануалу себе рейдик для тестов делал.
    Кроме него видели и такой, в котором перезагрузка ненужна... Если интересно - могу поискать ссылку.
     
  • 1.11, аноним (?), 18:59, 19/02/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А если на диске LVM то действия аналогичны? Ну, понятно что root в другом месте будет в конфигурации загрузчика.
     
     
  • 2.12, altuhov.su (?), 22:34, 21/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Можно на LVM2 сделать зеркалирование средствами LVM
     
     
  • 3.14, const86 (ok), 09:57, 22/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > Можно на LVM2 сделать зеркалирование средствами LVM

    Зеркалирование в device-mapper какое-то мерзкое: метаданные держит на отдельном девайсе (что само по себе не так уж плохо, но чтобы средствами lvm сделать зеркалированный том на _двух_ PV, надо трясти бубном), да ещё и чтение не распределяет по зеркалам. Лучше уж делать два LV и поверх них md-raid1. Или наоборот, md-raid1 поверх дисков, а сверху LVM. Это всё не касается raid0, который в LVM работает не хуже, чем md-raid0.

     

  • 1.13, zerot (ok), 23:19, 21/02/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    вот вариант без LiveCD http://www.ourorbits.org/itview/articles/linuxraid.shtml от 2003 ещё года, второй описываемый вариант, названный альтернативным - как раз правильный для настоящего времени
     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру