Создание Software RAID в Slackware Linux (linux slackware raid disk)




Введение

   Установка Linux на RAID не является очень сложным делом, особенно если
   вы понимаете что делаете, а не полагаетесь на волшебные инструкции от
   RedHat Linux с описанием окон и кнопок, которые нужно двигать мышкой,
   а нажимать колесиком. Именно поэтому в качестве примера выбран
   Slackware Linux, так как он похоже единственный дистрибутив, в котором
   чтобы что-то сделать, нужно четко понимать, что делаешь. И как
   следствие, если вы поймете как это делается в Slackware, то спокойно
   разберетесь, как это сделать в вашем любимом дистрибутиве.


Достаточности и необходимости

   Цель документа: установка Slackware 10.1 с нуля на IDE software RAID 1
   (mirror) из двух дисков. Используется ядро из дистрибутива - 2.4.29, в
   котором есть поддержка soft-raid. На самом деле достаточно взять любой
   дистрибутив с ядром 2.4.x и выше. Для запуска raid на ядрах 2.2.х
   придется собирать свое ядро с соответствующими патчами.

   Необходимо:

     * Два одинаковых винчестера. (Использование дисков разного размера
       возможно, но не рекомендуется (Прим. пер.: интересно, почему?))


     * Возможность загрузиться со Slackware Install CD. Для любителей
       других дистрибутивов:
          + ядро 2.4.х и выше
          + Рекомендуется LILO 22.5.7.2 и выше (Возможность загрузить
            систему с RAID появилась в LILO 22.0)
          + raidtools 0.90 или выше.

     * Умение пользоваться fdisk'ом. Ну или хотя бы понимать что такое
       таблица разделов, mbr, раздел и так далее.

     * Несильно погнутые руки для работы в командной строке.

     * Терпение и время. (Пиво опционально).


Перед началом

   Если у вас IDE диски, то советуем вам поставить их на разные шины. Это
   не столько для обеспечения отказоустойчивости (в случае умирания
   одного винта есть вероятность, что он заблокирует шину и второй
   винчестер не сможет нормально работать), но и для увеличения
   производительности. Также убедитесь, что в BIOS стоит опция "Загрузка
   с CD-ROM". Я обычно на машине с двумя шинами IDE ставлю CD-ROM привод
   как secondary slave.

   Теперь загружайтесь со Slackware Install CD. Когда загрузка дойдет до
   приглашения "Boot:", вам нужно будет выбрать ядро, которое
   соответствует вашему железу. Далее загрузка будет продолжаться. На
   самом деле установка системы на RAID не сильно отличается от обычной
   установки Slackware Linux.

   Перед тем как запустить "setup" вы должны создать разделы на диске.
   Особо обращаем ваше внимание на то, что ставить систему нужно на
   второй винчестер (в нашем случае это /dev/hdc), который подключен к
   secondary IDE bus. Набирайте в консоли:

           # fdisk /dev/hdc


   Для создания RAID не требуется как то по особенному разбивать диск.
   Все делается так же, как будто это просто одно-дисковый сервер. Мне
   нравится следующая разбивка диска: разделы для /, swap, /usr/local,
   /var и /home. По причине того, что объем свободного пространства на
   IDE дисках слабо отражается на содержимом кошелька, не стоит
   скупиться, создавая / и swap. Избыточность в нашем случае не стоит
   ничего против вероятности возможных проблем с нехваткой места в
   разделе. Вот пример разбивки винчестера на 20G:

        Disk /dev/hdc: 255 heads, 63 sectors, 2434 cylinders
        Units = cylinders of 16065 * 512 bytes

           Device Boot    Start       End    Blocks   Id  System
        /dev/hdc1   *         1       262   2104483+  83  Linux native
        /dev/hdc2           263       524   2104515   82  Linux swap
        /dev/hdc3           525      1314   6345675   83  Linux native
        /dev/hdc4          1315      2434   8996400    5  Extended
        /dev/hdc5          1315      1837   4200966   83  Linux native
        /dev/hdc6          1838      2434   4795371   83  Linux native


   Обратите внимание, что /dev/hdc1 помечен, как загрузочный. Это
   обязательно нужно сделать, чтобы RAID работал нормально.

   После создания разделов выходите из fdisk'а и не забудьте убедиться,
   что таблица разделов записалась на диск и ядро ее применило. (Не
   поленитесь перевести сообщения fdisk'а. Вполне возможно, что там
   написано что-то типа "При записи таблицы разделов обнаружено, что
   устройство занято другим приложением. Таблица будет применена после
   перезагрузки".) Вообще перезагрузка после манипуляций с таблицей
   разделов не будет лишней, особенно если вы собираетесь использовать
   ReiserFS. После перезагрузки, запускайте "setup" и начинайте установку
   согласно инструкции по установке, не забыв обратить внимание на
   некоторые моменты:

     * Так как в дальнейшем процессе установки необходимо будет
       копировать содержимое раздела на другой винчестер, стоит подумать
       об сокращении времени этого копирования. То есть на этом этапе
       устанавливать минимальную Linux-систему, в дальнейшем можно будет
       доставить необходимые пакеты уже на raid. Я думаю вы прекрасно
       знаете, что нужно ставить, чтобы получить минимальную Slackware
       Linux-машину. Хотя могу и повторить:
          + Необходимые вам пакеты из серий A и AP.
          + Пакет glibcso из серии A или свежий пакет glibc из серии D.
          + Не забудьте поставить пакет raidtools из серии AP
          + (От переводчика: я еще поставил sshd из серии N. И всю
            настройку производил через сеть.)


     * Установите LILO используя "expert mode". Убедитесь, что LILO
       установлен в master boot record (MBR) правильного диска (/dev/hdc)
       и ваш / раздел (в нашем случае это /dev/hdc1) помечен как
       загрузочный (bootable flag, напротив этого раздела в fdisk'е будет
       стоять "*")



Первая загрузка

   После окончания установки перегружайтесь с винчестера (не забудьте
   вынуть CD-ROM из привода и проверьте boot sequence в BOIS'е). Если все
   пройдет нормально, то система загрузится используя /dev/hdc1 в
   качестве / раздела. Если же все-таки система не грузится, то
   загружайтесь с CD-ROM'а или дискеты и тщательно проверяйте
   /etc/lilo.conf. Также будьте внимательны при выборе загрузочного
   устройства в BIOS'е, одинаковые винты будут выглядеть одинаково,
   возможно вы просто не с того винта грузитесь. Если же все-таки BIOS
   оказался слишком дурным, что не захотел грузить систему со второго
   винчестера, то как вариант попробуйте установить LILO в mbr первого
   диска, указав ему брать / раздел со второго, все равно LILO потом
   нужно будет переконфигурировать. Этот трюк помогал мне, когда
   попадались невнятные SCSI-контроллеры, которые не давали возможности
   указывать загрузочный диск.

   На следующем шаге нужно создать разделы на первом винчестере (в нашем
   случае это /dev/hda). Для лучшего использования дискового пространства
   диск следует разбить точно также, как и второй. Команда fdisk -l
   /dev/hdc поможет вам разбить диск цилиндр в цилиндр.

   В итоге у вас должно получиться два диска разбитых одинаково. Точнее,
   почти одинаково: на первом винчестере вам нужно будет сделать
   существенное изменение: тип разделов должен быть не "Linux native", а
   "Linux raid autodetect" c кодом 0xFD. Если вы все сделали правильно,
   то по идее у вас должно получиться что-то вроде этого:

        Disk /dev/hda: 255 heads, 63 sectors, 2434 cylinders
        Units = cylinders of 16065 * 512 bytes

           Device Boot    Start       End    Blocks   Id  System
        /dev/hda1   *         1       262   2104483+  fd  Linux raid autodetect
        /dev/hda2           263       524   2104515   82  Linux swap
        /dev/hda3           525      1314   6345675   fd  Linux raid autodetect
        /dev/hda4          1315      2434   8996400    5  Extended
        /dev/hda5          1315      1837   4200966   fd  Linux raid autodetect
        /dev/hda6          1838      2434   4795371   fd  Linux raid autodetect


Файл конфигурации RAID-массива - /etc/raidtab

   После того, как мы подготовили первый диск для создания RAID, самое
   время создать файл конфигурации массивов RAID, который будет
   использоваться драйвером md для корректной конфигурации массива.
   Запустите ваш любимый emacs и, руководствуясь нижеприведенным
   примером, создайте ваш raidtab.

        raiddev                 /dev/md0
        raid-level              1
        nr-raid-disks           2
        nr-spare-disks          0
        persistent-superblock   1
        device                  /dev/hda1
        raid-disk               0
        device                  /dev/hdc1
        failed-disk             1
        chunk-size              32

        raiddev                 /dev/md1
        raid-level              1
        nr-raid-disks           2
        nr-spare-disks          0
        persistent-superblock   1
        device                  /dev/hda3
        raid-disk               0
        device                  /dev/hdc3
        failed-disk             1
        chunk-size              32

        raiddev                 /dev/md2
        raid-level              1
        nr-raid-disks           2
        nr-spare-disks          0
        persistent-superblock   1
        device                  /dev/hda5
        raid-disk               0
        device                  /dev/hdc5
        failed-disk             1
        chunk-size              32

        raiddev                 /dev/md3
        raid-level              1
        nr-raid-disks           2
        nr-spare-disks          0
        persistent-superblock   1
        device                  /dev/hda6
        raid-disk               0
        device                  /dev/hdc6
        failed-disk             1
        chunk-size              32


   Для каждой пары совпадающих разделов на диске, из которых будут
   создаваться отдельные разделы массива, должен быть блок с директивой
   raiddev, объявляющий соответствующее разделу массива /dev/mdX
   устройство.

   Обратите внимание, что я использовал директиву failed-disk, которая
   позволяет запретить дублировать изменения первого диска на втором и
   которая указывает на второй диск, на /dev/hdc, с которого вы сейчас
   реально загрузили систему. Для подробной информации об возможных
   директивах этого файла можно прочитать в man 5 raidtab


Создание RAID устройств

   После того, как вы создали /etc/raidtab уже пора окончательно
   создавать RAID. Запустите mkraid для каждого /dev/mdX, которые вы
   придумали в /etc/raidtab. Например так:
   # mkraid /dev/md0

   Процесс создания массивов вы сможете посмотреть в псевдофайле
   /proc/mdstat, который вообще является очень полезным для мониторинга
   RAID подсистемы вашего компьютера. Сейчас например можете взглянуть,
   как выглядит система, у которой присутствует только половина массива,
   для каждого устройства, которые вы создали будет отдельная строчка.
   Примерно вот так:

        Personalities : [raid1]
        read_ahead 1024 sectors
        md0 : active raid1 hda1[0] 2104384 blocks [2/1] [U_]
        md1 : active raid1 hda3[0] 6345600 blocks [2/1] [U_]
        md2 : active raid1 hda5[0] 4200896 blocks [2/1] [U_]
        md3 : active raid1 hda6[0] 4795264 blocks [2/1] [U_]
        unused devices:


   Теперь наступает самое интересное, теперь, когда /dev/mdX созданы,
   пора создать на них файловые системы.
   # mkreiserfs /dev/md0

   Или какую вы предпочитаете файловую систему, такую и делайте.


Копирование операционной системы в RAID

   И снова здравствуйте! Вы уже практически подошли к самому интересному
   в создании RAID'а. Теперь вам надо скопировать все файлы со второго
   диска в raid-массив. Есть множество различных способов сделать это.
   Тут я опишу ни самый быстрый, ни самый красивый способ, но думаю этот
   способ будет ясно понят любым человеком, который в состоянии дочитать
   до этого места.

   Первое: монтируем новый / раздел к /mnt.

        # mount /dev/md0 /mnt


   Второе: создаем каталоги - точки монтирования других новых разделов.
   Не забудьте здесь указать ваши каталоги и ваши разделы.

        # mkdir -p /mnt/usr/local
        # mkdir -p /mnt/var
        # mkdir -p /mnt/home


   Третье: монтирует новые разделы.

        # mount /dev/md1 /mnt/usr/local
        # mount /dev/md2 /mnt/var
        # mount /dev/md3 /mnt/home


   Четвертое: копируем систему со второго винчестера на RAID.

        # cp -a /bin /mnt
        # cp -a /boot /mnt
        # cp -a /dev /mnt
        # cp -a /etc /mnt
        # cp -a /home /mnt
        # cp -a /lib /mnt
        # cp -a /root /mnt
        # cp -a /sbin /mnt
        # cp -a /tmp /mnt
        # cp -a /usr /mnt
        # cp -a /var /mnt
        # mkdir -p /mnt/mnt
        # mkdir -p /mnt/proc


   Пятое: исправляем /mnt/etc/fstab, чтобы он указывал на новые разделы,
   которые являются RAID массивом. Только убедитесь что вы редактируете
   fstab именно из /mnt/etc/fstab, а не с текущего / раздела.


Загрузка с RAID массива

   Шестое и последнее: переконфигурирование LILO. Запускайте ваш любимый
   редактор и редактируйте /mnt/etc/lilo.conf. (Заметьте что
   редактируется lilo.conf, который лежит в RAID, не перепутайте). В нем
   вам нужно поправить две директивы boot и root. В итоге они должны
   указывать на устройство /dev/md0 (то есть на / раздел в RAID'e). Также
   вам нужно будет добавить опцию raid-extra-boot = mbr, которая
   появилась только в LILO 22.0, впрочем это неважно, все равно более
   старые версии не смогут загрузиться с /dev/md. В итоге ваш
   /mnt/etc/lilo.conf должен выглядеть примерно так:

        # LILO configuration file
        # generated by 'liloconfig'
        #
        # Start LILO global section
        boot = /dev/md0
        raid-extra-boot = mbr
        #compact        # faster, but won't work on all systems.
        # delay = 5
        # Normal VGA console
        vga = normal
        # ramdisk = 0     # paranoia setting
        # End LILO global section
        # Linux bootable partition config begins
        image = /vmlinuz
          root = /dev/md0
          label = Linux
          read-only # Non-UMSDOS filesystems should be mounted read-only for checking
        # Linux bootable partition config ends


   Теперь остается только установить LILO с этими новыми изменениями. Для
   этого у lilo предусмотрена опция -r, которая позволяет сменить
   корневой каталог до выполнения каких-либо операций:

        # lilo -r /mnt


   Теперь все. Перегружайтесь. Не забудьте только выставить в BIOS'е
   загрузку в первого винчестера.


Дополнение зеркал

   Загрузились? Попробуйте проверьте командой df, откуда вы загрузились и
   куда:

        Filesystem           1k-blocks      Used Available Use% Mounted on
        /dev/md0               2071288    566236   1399836  29% /
        /dev/md1               6245968    185484   5743204   4% /usr/local
        /dev/md2               4134832      3220   3921568   1% /var
        /dev/md3               4719868     38036   4442072   1% /home


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

   Сейчас мы находимся в точке, которая моделирует сбой одного
   винчестера. То есть как будто вы только что заменили отказавший
   винчестер и должны его разбить. Ситуация отличается только тем, что
   сейчас второй винчестер уже разбит на разделы, единственное что:
   неправильно разбит. Сейчас вам нужно изменить тип разделов на /dev/hdc
   с "Linux native" на "Linux raid autodetect". Если бы у вас был чистый
   винчестер, то сразу нужно было бы создавать разделы с типом 0xFD. Так
   что берите fdisk /dev/hdc и тренируйтесь восстанавливать. После
   создания/правки таблицы разделов вас скорее всего попросят
   перегрузиться.

   Теперь предпоследний шаг: дополнение зеркал. Здесь все очень просто.
   Выполняете raidhotadd mirror partition:

        # raidhotadd /dev/md0 /dev/hdc1
        # raidhotadd /dev/md1 /dev/hdc3
        # raidhotadd /dev/md2 /dev/hdc5
        # raidhotadd /dev/md3 /dev/hdc6


   и смотрите в /proc/mdstat, как RAID становится настоящим mirror'ом. В
   конечном итоге вы получите следующее:

        Personalities : [raid1]
        read_ahead 1024 sectors
        md0 : active raid1 hdc1[1] hda1[0]
              2104384 blocks [2/2] [UU]

        md1 : active raid1 hdc3[1] hda3[0]
              6345600 blocks [2/2] [UU]

        md2 : active raid1 hdc5[1] hda5[0]
              4200896 blocks [2/2] [UU]

        md3 : active raid1 hdc6[1] hda6[0]
              4795264 blocks [2/2] [UU]

        unused devices:


   Да, забыли последний шаг: поменяйте в /etc/raidtab директивы
   failed-disk на raid-disk.

   Поздравляю, теперь ваша система установлена на RAID 1 (mirroring).


Заключение

   Теперь, если вы устанавливали Slackware Linux в минимальной установке,
   то самое время вернутся и продолжить установку необходимых пакетов.
   Также многие считают, что установка заканчивается только после
   пересборки ядра. Специально для таких хочу заметить, что для того
   чтобы вы смогли загрузиться с вашего RAID'а, поддержка "RAID support"
   и "RAID-1 (mirroring) mode" должны быть вкомпилены в ядро, а не
   собираться модулями.


Источник статьи