Установка ОС Linux Software RAID1 на сервера Intel  
  Содержание  


Эти материалы являются объектом авторского права и защищены законами РФ и международными соглашениями о защите авторских прав. Перед использованием материалов вы обязаны принять условия лицензионного договора на использование этих материалов, или же вы не имеете права использовать настоящие материалы

Авторская площадка "Наши орбиты" состоит из ряда тематических подразделов, являющихся моими лабораторными дневниками, содержащими записи за разное, иногда продолжительно отличающееся, время. Эти материалы призваны рассказать о прошедшем опыте, они никого ни к чему не призывают и совершенно не обязательно могут быть применимы кем-то ещё. Это только лишь истории о прошлом


  • общий обзор вариантов с RAID
  • установка ОС с поддержкой software RAID1
  • настройка сетевой консоли
  • альтернативный метод создания зеркал
  • восстановление программных зеркал

 
  Общий обзор  

Установка и конфигурирование установка ОС Linux на сервера SuperMicro имеет ряд особенностей, знание которых позволяет не наступать на грабли повторно. Поехали

Soft- или hardware RAID ?

первый вопрос - если нужен RAID, то какой RAID использовать. Встроенный SCSI контроллер серверов (AIC7902) с интегрированной технологией HostRAID позволяющий строить массивы уровня 0 и 1 без привлечения возможностей операционной системы. Альтернативой является создание software RAID встроенную возможность ОС Linux. Итак, плюсы и минусы обоих вариантов:


 
  Hardware RAID описание (по результатам тестирования)  

RAID1 управляется из HostRAID Bios либо через AdaptecStorageManager (есть софт под Windows и Linux) кроме собственно зеркала можно указать диски HotSpare, автоматически включаемые в зеркало в момент выхода из строя одного из основных HDD. При замене сбойного диска на новый зеркало автоматически синхронизируется с работающего на новый диск однако в случае использования HotSpare зеркало переконфигурируется на использование основного неповрежденного и HotSpare, и установка нового HDD вместо отказавшего не влечет автоматического перестроения зеркала. Такой новый диск можно указать как HotSpare

Hardware RAID - плюсы:

  • не загружен процессор, не используется ОС
  • возможность вынести "зеркало" на отдельный уровень, предназначенный именно для работы с "зеркалами"

Hardware RAID - минусы:

  • RAID1 (RAID0 за ненадобностью не тестировали) имеет свой внутренний формат. Это значит, что в случае отказа контроллера, получить доступ к содержимому RAID будет нельзя, т.к. данные располагаются на HDD во внутреннем формате контроллера HostRAID. Кроме того, при выходе из строя и контроллера, и одного из дисков, доступ при наличии резервного (внешнего) контроллера можно будет получить только при наличии запасного диска, т.к. "зеркало" из одного диска создать нельзя. Метод защиты - держать "под парами" внешний SCSI контроллер и дополнительный жесткий диск, который позволит получить доступ к RAID в нештатной ситуации.
  • нет возможности включить в RAID только часть HDD
  • большая привязка к геометрии дисков, т.е. новый (подменный) диск должен иметь равный или больший объём
  • необходимость установки на сервер дополнительного софта для мониторинга состояния "зеркал"

 
  Software RAID описание (по результатам тестирования)  

software RAID является встроенным механизмом ОС Linux и позволяет строить массивы различных уровней (в т.ч. 0,1,5 ...) с- и без- HotSpare устройств. Поддержка RAID различных уровней является частью ядра, конфигурирование RAID может выполняться двумя независимыми комплексами утилит, обращающимися к общим командам ядра и дающих один результат

Software RAID - плюсы:

  • возможность использовать под RAID только часть HDD (отдельный раздел), что обеспечивает большую гибкость при использовании новых HDD вместо сбойных и снимает вопрос привязки к геометрии дисков
  • возможность работы с RAID из ОС в процессе работы "боевого" сервера, в т.ч. в режиме горячей замены (в нашем случае такой режим перестроения RAID1 тестировался, однако Adaptec особо указывает, что его драйвера для SCSI контроллера не гарантированно работают в режиме горячей замены)
  • возможность мониторинга состояния "зеркал" средствами ОС
  • очень большой плюс - возможность "откатить" зеркало, что позволяет загрузиться с HDD, работающем в зеркале, как с одиночного диска (требует предварительной загрузки с boot-CDROM и переконфигурирования ОС. Этот механизм также оттестирован, но не тестировалась заргузка с HDD на другом сервере). Фактически это значит, что software RAID не пишет информацию на HDD в особом формате

Software RAID - минусы:

  • требует дополнительного конфигурирования RAID системным администратором
  • не перестраивает зеркало автоматически при замене сбойного HDD нужно руками дать команду перестроения. Однако можно ожидать, что в режиме использования HotSpare резервные разделы при сбоях подхватываются автоматически (не тестировалось)
  • в случае большой загрузки ОС, предположительно, способен оттягивать на себя часть ресурсов ОС, уменьшая производительность сервера. Однако это не RAID5, здесь не нужно считать контрольные суммы, и можно ожидать очень малую нагрузку на ОС

какой же RAID использовать ? однозначный вывод пока не делается, однако дальнейшее описание подразумевает, что выбран вариант использования Software RAID1, т.к. он имеет некотроые подводные камни в процессе конфигурирования, которые стоит описать


 
  Установка ОС с поддержкой RAID1  

предлагаемая технология конфигурирования зеркала включает следующие этапы:

  • установка ОС на одиночный диск
  • создание зеркала Разбиение разделов второго HDD, создание файла конфигурации raidtools и собственно создание зеркала (включающего пока только второй HDD)
  • создание в построенных зеркалах файловых систем
  • наполнение зеркала Копирование содержимого основного HDD в разделы созданного зеркала
  • конфигурирование загрузки с зеркала Переконфигурирование системы на зеркале для загрузки с него (в т.ч. изменение /etc/fstab, создание имиджа initrd для загрузки с RAID1, добавление в загрузчик дополнительного режима загрузки с зеркала)
  • загрузка с зеркала и перестроение зеркала для включения в него начального HDD
  • запись загрузчика на оба HDD для обеспечения возможности загрузки с любого диска
  • тестирование полученного RAID1

Установка ОС на одиночный диск Первые и основные грабли драйвера для контроллера AIC7902 нет в дистрибутиве RHL9, драйвера есть на CD диске, идущем к серверу, они же дублируются на сайте ADAPTEC. Это прекомпилированные модули для определенных версий ядра, без исходников. Отсюда следует, что установить новое ядро мы не можем (т.к. в общем случае модуль грузится только в свое ядро). Итак, для установки ОС необходимо:

  • создать дискету с драйверами (образ берем на CD, идущем с сервером) именно для нашего дистрибутива RHL9 с ядром 2.4.20-8 вставляем диск дистрибутива и в появившемся после загрузки первом окне говорим
    # linux dd
    т.е. установить Linux с дополнительными драйверами
  • далее следуем обычному ходу установки, СОЗДАВАЯ разделы на втором диске (/dev/sdbX - это делается руками), и устанавливая начальный загрузчик в /dev/sda (а это делается автоматически)
  • после установки системы перегружаемся и проверяем, что все загружается и работает. За исключением сетевой платы, драйвера которой также нужно взять с технологического CD, скомпилировать и установить, как указано в readme к исходникам

на этот момент мы имеем работоспособную ОС, работающую на отдельном HDD. Далее необходимо развернуть софтверное зеркало, чтобы обеспечить отказоустойчивость сервера применительно к самой ненадежной части - жестким дискам

создание зеркала

  • необходимо создать разделы на первом HDD так, чтобы из размер (поцилинрово) был не меньше сооветствующих разделов второго HDD, тип разделов должен быть равен 0xfd (RAID autodetect, команда 't' утилиты fdisk)
  • не забываем установить boot flag у корневого раздела (команда 'a' утилиты fdisk)
  • далее необходимо создать конфигурационный файл для утилит создания зеркала (raidtools) /etc/raidtab, причем для каждого раздела необходимо добавить в него свой конфигурационный блок:

    raiddev /dev/md0
    raid-level 1
    persistent-superblock 1
    chunk-size 64
    nr-raid-disks 2
    nr-spare-disks 2
    device /dev/sda1
    raid-disk 0
    device /dev/sdb1
    failed-disk 1

    причем можно заметить, что второй HDD (на текущий момент описания загрузочный) также представлен в конфигурации, но помечен как сбойный, что необходимо для предотварщения преждевременной синхронизации зеркал
  • после создания разделов на первом HDD и создания конфигурационного файла необходимо создать собственно зеркало, что делается командами:
    # mkraid -R /dev/md0
    для каждого зеркала. Факт создания и состояние созданных зеркал можно просмотреть в файле /proc/mdstat
  • далее создаем в построенных зеркалах файловые системы. Например для корневого зеркала это делается комнадой
    # mkfs.ext3 /dev/md0
    а для swap раздела командой
    # mkswap /dev/mdX
    аналогично создаем FS на всех требуемых зеркалах

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

  • создаем отдельный каталог и монтируем корневое зеркало
    mkdir /a.tmp
    mount /dev/md0 /a.tmp
  • при наличии дополнительных точек монтирования создаем соответствующи каталоги в /a.tmp и монтируем к ним соответствующие зеркала. Например, так:
    # mkdir /a.tmp/var
    # mount /dev/md1 /a.tmp/var
  • не забываем создать раздел /a.tmp/proc. Далее необходимо скопировать данные второго диска на первый командами
    # cp -a /boot /a.tmp
    # cp -a /bin /a.tmp

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

конфигурирование загрузки с зеркала

  • необходимо изменить содержимое файла /a.tmp/etc/fstab так, чтобы точки монтирования указывали на соответствующие зеркала
  • создать файл образа начальной загрузки командой
    # mkinitrd with=raid1 /boot/raidinitrd.img 2.4.20-8
    добавить в файл конфигурации загрузчика секцию загрузки с RAID
    title RAID Linux
    kernel /boot/vmlinuz-2.4.20-8 root=/dev/md0
    initrd /boot/raidinitrd.img
    boot
    root (hd0,0)
    setup (hd0)
  • переустановить загрузчик командой на оба HDD для обеспечения загрузки с любого HDD, для чего войти в меню загрузчика командой
    # grub
    и ввести следующие команды
    grub>device (hd0) /dev/sda
    grub>root (hd0,0)
    grub>setup (hd0)
    grub>device (hd0) /dev/sdb
    grub>root (hd0,0)
    grub>setup (hd0)
  • не забыть скопировать измененные файлы в файловую систему на зеркале
    # cp -a /boot/raidinitrd.img /a.tmp/boot/raidinitrd.img
    # cp -a /boot/grub/grub.conf /a.tmp/boot/grub/grub.conf

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

перестроение зеркала

на текущий момент описания сервер должен быть загружен с зеркала и корректно работать. Проверить состояние можно командами df и mount, которые показывают смонтированные файловые системы. Это должны быть зеркала /dev/mdX

далее необходимо перестроить зеркало, чтобы включить в него второго HDD, для чего:

  • необходимо изменить тип разделов на втором HDD на тип 0xfd (Linux RAID autodetect) утилитой fdisk
  • инициировать синхронизацию каждого зеркала командой
    # raidhotadd /dev/md0 /dev/sdb1
    состояние синхронизации можно увидеть в файле /proc/mdstat
  • по окончании синхронизации не забываем внести изменения в /etc/raidtab - failed-disk меняем на raid-disk

 
  Альтернативные методы создания Software RAID1 (mdadm)  

Создание из дисков RAID1

  • Разметить разделы целевого диска по аналогии с исходным так, чтобы разделы целевого диска были не меньше соответствующих им разделов исходного диска (поблочно). Для этого можно воспользоваться оболочкой fdisk. В частном случае дисков с равной геометрией можно воспользоваться командой
    # sfdisk -d /dev/sdb > /tmp/sdb.out && sfdisk /dev/sda < /tmp/sdb.out
    Примечание: Было замечено,что dd if=/dev/sdb of=/dev/sda bs=512 count=1 на дисках scsi 73G работает не корректно
  • Изменить тип вновь созданных разделов на целевом диске на "fd" - Linux RAID Autodetect, для чего воспользоваться командой "t" оболочки fdisk. Альтернативный путь - использовать команду sfdisk --change-id /dev/<имя диска> fd
  • Создаем RAID1 (degraded) для каждого раздела командой
    # mdadm -vC /dev/<имя массива, например, /dev/md0> -l1 -n2 /dev/<имя раздела> missing
    - для 1-го раздела. "missing" стоит в позиции исходного диска, который пока не должен становиться зеркалом
  • создаем FS на разделах RAID1 командами:
    для ext3: mkfs.ext3 /dev/md1 - для 1-го раздела (root)
    для swap: mkswap /dev/md2
  • создаем образ начальной загрузки (см. описание возможных граблей в разделе с raid-tools) командой
    mkinitrd --with=raid1 /boot/raidinitrd.img `uname -r`
    альтернатива - при перекомпиляции ядра включить код RAID1 в само ядро, а не модули
  • подмонтировать RAID разделы и скопировать содержимое разделов с ОС аналогичные разделы RAID1
  • Изменить точки монтирования в fstab файле на RAID разделе, чтобы они смотрели уже на разделы RAID
  • добавляем в конфигурацию загрузчика разделы для загрузки с RAID:
    Внести в /etc/grub/grub.conf

    title RHL9 + RAID1 (boot from HDD1)
    root (hd0,0)
    kernel /boot/vmlinuz-2.4.20-8 root=/dev/md0
    initrd /boot/raidinitrd.img

    title RHL9 + RAID1 (boot from HDD2)
    root (hd1,0)
    kernel /boot/vmlinuz-2.4.20-8 root=/dev/md0
    initrd /boot/raidinitrd.img
  • Запись в MBR ОБОИХ HDD загрузочной информации - чтобы иметь возможность загрузиться с любого диска
    # grub
    выполнить команды:
    grub>device (hd0) /dev/sda
    grub>root (hd0,0)
    grub>setup (hd0)
    grub>device (hd0) /dev/sdb
    grub>root (hd0,0)
    grub>setup (hd0)
  • Здесь необходимо перезагрузиться - уже с RAID
  • Меняем тип разделов на fd на исходном диске командой аналогично описанному выше
  • Включаем в RAID1 каждый требуемый раздел исходного диска командой
    # mdadm -v /dev/<имя RAID раздела> -a /dev/<имя раздела для включения в RAID1>
    проконтролировать состояние синхронизации можно командой
    # watch -n 5 cat /proc/mdstat
  • после синхронизации перезагрузить сервер. Всё

 
  Восстановление программных зеркал (mdadm)  

Для восстановления в случае отказа одного из дисков программного зеркала в Linux необходимо понимать последовательность процесса загрузки. Вот она:

загрузка BIOS Указанием в BIOS загрузочного диска определяется, с какого жесткого диска (другого носителя) будет загружен код бутлоадера (в нашем случае используется GRUB). В процессе создания зеркал для типовых серверов SuperMicro под Linux код бутлоадера записывается на оба жестких диска, что позволяет в случае полного отказа первого диска загрузить GRUB со второго диска. В BIOS SuperMicro есть возможность указать, с какого диска грузиться

загрузка GRUB Бутлоадер обеспечивает выбор загружаемого ядра и дополнительных компонент (например, специально подготовленного образа загрузки, чем обеспечивается загрузка с RAID даже если ядро не имеет жестко - не в виде модулей - вкомпилированных драйверов RAID). В конфигурации GRUB для типового сервера предусмотрено также два варианта инициализация Linux с первого и со второго диска, т.к. бутлоадер может загружаться с одного диска, а ядро операционной системы находится на другом диске. В принципе, GRUB позволяет выйти в командный режим и вручную поменять параметры загрузки, в т.ч. и root-диск, но в условиях нештатной ситуации предпочтительнее иметь наработанную схему действий

загрузка initrd Первая стадия инициализации ОС Linux в принципе может отсутствовать, но в используемых типовых конфигурациях применяется. Так называемый загрузочный образ, специально подготовленный для каждого конкретного случая, позволяет обеспечить загрузку ОС Linux с устройств, драйвера которых не вкомпилированы в ядро жестко. Он востребован на начальных этапах, когда механизм загрузки модулей ядра должен как-то получить доступ к этим модулям (например к RAID), расположенным на устройстве, доступ к которому требует этих самых (RAID) драйверов

загрузка ядра Собственно загрузка ОС Linux в штатную работу, в процессе которого монтируются файловые системы, указанные в /etc/fstab (в том числе тома RAID)

Почему так сложно ? Дело в том, что различные нештатные ситуации приводят к доступности или недоступности жестких дисков, а особенностью ОС Linux является динамическое присвоение имен жестким дискам. Это ведет к тому, что в одних ситуациях второй SCSI диск может быть виден как /dev/sdb, а в других ситуациях тот же диск может быть виден как /dev/sda. Понимание последовательности загрузки помогает четко определить последовательность восстановления зеркала

Исследование вариантов нештатных ситуаций

Отказ первого HDD

  • сбойный диск виден ОС - засада возможна, если при перезагрузке сбойный диск вообще перестал восприниматься ОС Linux, либо был извлечен, но нового диска на замену установлено не было. См. следующий абзац
  • сбойный диск невиден ОС - засада ожидалась при перезагрузке после такого сбоя. Первый HDD был невиден, и в управляющих структурах RAID помечен как сбойный. После перезагрузки второй HDD получает имя первого, для RAID помеченного как сбойный, тогда как имени второго HDD в этом случае у Linux просто нет
  • Однако эксперимент показал, что при извлечении сбойного диска ОС Linux перезагружается таки нормально, именуя оставшийся диск как /dev/sda и корректно загружаясь с него
  • Как же грамотно заменить диски ? После выключения питания необходимо извлечь сбойный диск и установить вместо сбойного новый пустой диск, чтобы при включении имена HDD не сбились, либо извлечь первый (сбойный) диск и сразу же установить на его место второй (работоспособный) диск, либо просто извлечь сбойный диск с учетом отсутствия возможности «горячего подключения» HDD все будет правильно
  • Если этого сделано не было, для установки диска на замену отказавшему потребуется еще раз останавливать сервер и выключать питание. Крайним методом является пересборка зеркала с нуля, благо диски можно подключать и без RAID

Отказ второго HDD

  • диск виден или не виден -- особых проблем не предвидится, т.к. имя диска, оставшегося в работе, не меняется при перезагрузке. Просто вывести диск из RAID, заменить его (с выключением компьютера), разметить аналогично первому и включить разделы в RAID
  • Здесь также необходимо отметить, что согласно описанию к драйверам SCSI Adaptec U320 для Linux реализация горячей замены может работать некорректно, всвязи с чем любые изменения конфигурации, связанные с заменой диска, должны выполняться с остановкой сервера

  • Проведенный эксперимент подтвердил некорректную обработку установки нового HDD в режиме горячей замены (при работающей ОС). Удаление HDD воспринимается нормально в трех из четырех проведенных экспериментов, однако последующая установка нового HDD на работающей системе (в разные слоты, с перезагрузкой перед добавлением и без нее) выводит на консоль отладочную информацию в цикле или приводит к панике ядра

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

Собственно процедуры восстановления зеркала Последовательность восстановления зеркала такова:

  • потушить сервер и выключить питание
  • удалить сбойный диск и установить чистый диск ему на замену. Если диск содержит размеченные разделы, тем более с разделами типа fd «RAID autodetect», разделы нужно удалить, т.к. в процессе «шлифовки» инструкции напарывались на панику ядра при наличии некорректных fd-разделов
  • запустить сервер. Если загрузка не производится (например забыли удалить загрузочную запись со вновь вставленного диска, а он первый в последовательности), то переключить последовательность загрузки в BIOS сервера
  • после загрузки с корректно работающего диска зеркала создать на новом (сменном) диске разделы включения в зеркало, поблочно не меньшие, чем на работающем диске. Также указать тип разделов как fd «RAID autodetect» командой T из интерфейса fdisk. В случае равной геометрии быстро создать корректную таблицу разделов (с уже установленным типом разделов fd) можно следующей командой
    # sfdisk -d /dev/<работоспособный диск> | sfdisk /dev/<целевой диск>
  • включить вновь созданные разделы в зеркала командой
    mdadm /dev/<имя зеркала> -a /dev/<включаемый раздел, например sda1>
  • отследить факт перестроения зеркал в файле /proc/mdstat и командой
    # lsraid -p
  • установить на новый диск загрузчик GRUB, запустив оболочку командой grub, и введя в ней следующие команды
    device (hd0) /dev/<имя нового диска, например sdb>
    root (hd0,0)
    setup (hd0)
  • перезагрузить сервер для проверки корректности загрузки, что лучше сделать, но можно не делать сразу на критичных по времени простоя серверах

(C) Белонин С.С., декабрь 2003 г., Брянск

(даты последующих модификаций не фиксируются)


 
        
   
    Нравится     

(C) Белонин С.С., 2000-2024. Дата последней модификации страницы:2019-12-04 00:43:28