|  
 
 
В:
Как лучше сконфигурировать программный RAID?
О:
Я обнаружил, что планирование файловой системы одна из
труднейших задач конфигурирования Unix.
Для ответа на Ваш вопрос, я могу написать, что мы сделаем.
Мы планируем следующую установку:
два EIDE диска, 2.1Гб каждый.
диск раздел т.монтирования размер   устройство
  1      1       /        300M   /dev/hda1
  1      2       swap      64M   /dev/hda2
  1      3       /home    800M   /dev/hda3
  1      4       /var     900M   /dev/hda4
  2      1       /root    300M   /dev/hdc1
  2      2       swap      64M   /dev/hdc2
  2      3       /home    800M   /dev/hdc3
  2      4       /var     900M   /dev/hdc4
                    
Каждый диск на отдельном контроллере (и отдельном кабеле).
Теоретически отказ контроллера и/или
отказ кабеля не запретит доступ к обоим дискам.
Также, мы возможно сможем получить повышение производительности
от параллельных операций на двух контроллерах/кабелях.
Установим ядро Linux в корневой (/)
раздел/dev/hda1.  Пометим этот раздел как загрузочный./dev/hdc1должен содержать ``холодную'' копию/dev/hda1. Это НЕ raid копия,
просто один-в-один копия. Только для использования в качестве 
восстановительного диска в случая отказа основного диска;
пометим/dev/hdc1как загрузочный, и используем его 
для хранения без переустановки системы.
Вы можете также поместить копию/dev/hdc1ядра в LILO для упрощения загрузки в случае отказа.
Теоретически, в случае отказа, так я все еще могу загрузить систему
вне зависимости от повреждения суперблока 
raid или других видов отказов и случаев, которые мне не понятны./dev/hda3и/dev/hdc3будут зеркалами/dev/md0./dev/hda4и/dev/hdc4будут зеркалами/dev/md1. мы выбрали /varи/homeдля зеркализации,
и в разных разделах, основываясь на следующей логике:
Идея использования нескольких отдельных разделов такова
если, по некоторой странной причине,
при ошибках человека, пропадении питания, или ошибках операционной системы
происходят повреждения - они ограничиваются одним разделом.
Типичный случай - исчезновение питания при записи на диск.
Это должно привести к повреждению файловой системы, что
должно быть исправлено программой/(корневой раздел ) будет содержать
относительно статическую, не изменяющуюся  информацию:
для всех практических применений, он должен быть
только для чтения, без фактической отметки и
монтирования только для чтения./homeдолжен содержать ''медленно изменяющиеся'' данные./varдолжен содержать быстро изменяющиеся данные,
включая спул почты, содержимое баз данных и логи web сервера. fsckпри следующей загрузке.  Если дажеfsckделает восстановление 
без создания дополнительных повреждений этим восстановлением, 
можно утешиться тем, что любые повреждения были ограничены
одним разделом.  В другом типичном случае
системный администратор делает ошибку в процессе операции восстановления,
что приводит к стиранию и разрушению всех данных.  Разделы могут 
помочь ограничить влияние ошибок оператора.Разумно обдумать размещение разделов
/usrили/opt.  В общем,/optи/home- лучший выбор для RAID-5 
разделов, если есть еще диски.  Предостережение:
НЕ помещайте/usrв RAID-5
раздел.  В случае серьезного отказа, вы можете обнаружить, что не
можете примонтировать/usr, и необходимый
набор утилит на нем (таких как сетевые утилиты или компилятор.) 
С RAID-1, если произошел отказ, и Вы не можете заставить RAID работать, Вы можете,
по крайней мере, смонтировать одно из двух зеркал. Вы не можете сделать это с любым
другим уровнем RAID (RAID-5, striping, или линейным соединением). Итак, чтобы завершить ответ на вопрос:
 
устанавливаем ОС на диск 1, раздел 1.
Не монтируем любые другие разделы. устанавливаем по инструкции RAID.конфигурирует md0иmd1.убеждаемся, что знаем что делать в случае отказа!
Делаем ошибку администратора сейчас и 
не ждем реального кризиса.
Эксперимент!
(мы выключаем питание при дисковой активности —
это нехорошо, но показательно).делаем несколько плохих mount/copy/unmount/rename/reboot для
записи /varна/dev/md1.
Делайте старательно, это не опасно.наслаждайтесь!В:
Какое различие между mdadd,mdrun, 
и т.д. командами, иraidadd,raidrunкомандами?
О:
Имена утилит сменились начиная с релиза 0.5 пакета raidtools. mdсхема именования использовалась в 0.43 и более старых версиях, 
в то время какraidиспользуется в 0.5 и более новых версиях.В:
Я хочу запустить RAID-linear/RAID-0 на 2.0.34 ядре .
Я не хочу применять raid патчи, так как они не нужны для 
RAID-0/linear.  Где я могу взять raid-утилиты для управления?
О:
Это трудный вопрос, в самом деле, новый пакет raid утилит
при сборке требует установленных патчей RAID-1,4,5. Я не знаю ни одной предкомпилированной
двоичной версии raid утилит, которые доступны на текущий момент.
Однако, эксперименты показывают, что бинарники raid утилит, когда 
скомпилированы с ядром 2.1.100, кажется хорошо работающими 
при создании RAID-0/linear раздела под 2.0.34.  Смельчаки спрашивали об этом, и я временно
поместил бинарники mdadd, mdcreate, и т.д. 
на http://linas.org/linux/Software-RAID/
Вы должны взять man страницы, и т. д. с обычного пакета утилит.
В:
Могу ли я strip/зеркализировать корневой раздел (/)?
Почему я не могу загружать Linux прямо сmdдиска?
О:
И LILO и Loadlin требуют не stripped/mirrored раздел
для считывания образа ядра. Если Вы хотите strip/зеркализировать
корневой раздел (/),
вы должны создать не striped/mirrored раздел для хранения ядра(ядер).
Обычно, этот раздел называют/boot.
Тогда Вы должны либо использовать начальную поддержку виртуального диска(initrd),
или патчи от Harald Hoyer
<
HarryH@Royal.Net>
которые позволяют использовать stripped раздел, как корневой раздел.
(Эти патчи - стандартная часть последних ядер серии 2.1.x)Существуют несколько подходов, которые могут быть использованы.
Один подход детально документирован в Bootable RAID mini-HOWTO:
ftp://ftp.bizsystems.com/pub/raid/bootable-raid.
 
 Как альтернативу, используйте mkinitrdдля построения образа ramdisk,
как показано ниже. 
 Edward Welbon
<
welbon@bga.com>
написал:
 
... все, что нужно - скрипт для управления установкой.
Для монтирования mdфайловой системы как корневой,
главное - построить начальный образ файловой системы,
который содержит необходимые модули и md утилиты для запускаmd. 
У меня есть простой скрипт, который это делает. 
Для загрузочной среды, у меня есть маленький дешевый SCSI диск
(170MB я получил его за 20долларов ).
Этот диск работает на AHA1452, им также может быть недорогой 
IDE диск на родном IDE интерфейсе.
От этого диска не требуется скорости, так как он предназначен, в основном, для загрузки. 
На диске создана маленькая файловая система содержащая ядро и 
образ initrd.
Начальной файловой системы должно хватать для загрузки модуля драйвера raid SCSI устройства
и запуска raid раздела, который будет корневым.
Тогда я делаю(
echo 0x900 > /proc/sys/kernel/real-root-dev
              
 0x900для/dev/md0)
и выхожу изlinuxrc.
Далее загрузка продолжается обычно. 
Я собрал большинство функций как модули кроме драйвера AHA1452,
который будит файловую систему initrd.
Таким образом у меня очень маленькое ядро. Этот метод простой и надежный,
я делаю так с  2.1.26 и никогда не было проблем, которых не мог бы запросто решить.
Файловая система даже выжила несколько 2.1.4[45] тяжелых 
разрушений без реальных проблем. 
В одно время у меня  были размечены raid диски так, что начальные цилиндры
первого raid диска содержали ядро и начальные цилиндры 
второго raid диска содержали образ начальной файловой системы,
вместо этого я использовал начальные цилиндры raid дисков
для подкачкм, так как они более быстрые цилиндры  (зачем терять их на загрузку?). 
Хорошо иметь недорогой диск для загрузки, так как 
с него просто загрузиться и, при необходимости, можно использовать как 
восстановительный диск. Если Вы интересуетесь, Вы можете взглянуть 
на скрипт, который создает мой начальный образ ramdisk и потом запускает LILO.Его достаточно для того, чтобы обрисовать картину.
Он не очень хорош, и, конечно, можно создать более
маленький образ файловой системы для начального ramdisk.
Было бы проще создать его более действенным.
Но он использует
http://www.realtime.net/~welbon/initrd.md.tar.gz
 LILOкак есть.
Если вы сделаете любые усовершенствования, пожалуйста, отправьте копию мне. 8-)В:
Я слышал, что я могу запустить зеркализацию поверх striping. Это правда?
Могу ли я запускать зеркализацию поверх петлевого устройства?
О:
Да, но не наоборот.  Вы можете поместить stripe поверх
нескольких дисков, и затем строить зеркализацию на базе этого.  Однако,
striping не может быть помещен на зеркало.
Короткое техническое объяснение этого - особенностью linear и stripe 
является использования ll_rw_blkпроцедуры для доступа.ll_rw_blkпроцедура
отображает дисковые устройства и сектора, но не блоки.  Блочные устройства могут
быть размещены одно поверх другого; но устройства, которые делают прямой, низкоуровневый
доступ к дискам, такие какll_rw_blk, не могут. 
 На текущий момент (Ноябрь 1997) RAID не может быть создан на
петлевом (loopback) устройстве, однако возможно, это скоро будет исправлено.
В:
У меня есть два маленьких диска и три больших диска.  Могу ли я
соединить два маленьких диска в RAID-0, и затем создать
RAID-5 из этого и больших дисков?
О:
Сейчас (Ноябрь 1997), для массива RAID-5, нет.
Сейчас, это можно сделать только для RAID-1 повер объединенных дисков.
В:
Какая разница между RAID-1 и RAID-5 для двух дисковой конфигурации
(имеется в виду разница между массивом RAID-1 построенном на двух дисках,
и массивом RAID-5 построенном на двух дисках)?
О:
Нет разницы в емкости. Также нельзя добавить диски 
ни в один из массивов для увеличения емкости (для деталей, смотрите вопрос ниже).
        
RAID-1 предоставляет преимущество в производительности чтения: драйвер RAID-1
использует технологию распределенного чтения для одновременного чтения двух секторов,
по одному с каждого устройства, это удваивает скорость считывания.
 
 Драйвер RAID-5, хотя и содержит много оптимизаций, сейчас (Сентябрь 1997) не реализует
то, что паритетный диск - фактически зеркальная копия диска с данными.  Таким образом,
выполняется последовательное чтение данных.
В:
Как я могу защититься от отказа двух дисков?
О:
Некоторые из алгоритмов RAID дают отказоустойчивость при отказе нескольких дисков,
но на данный момент это не реализовано в Linux.
Однако, программный RAID Linux может защитить от множественных отказов дисков
размещая массив поверх массива.  Например, девять дисков могут быть использованы для создания
трех массивов raid-5.
Затем, эти три массива могут быть объединены в один массив RAID-5.  Фактически, этот тип
конфигурации защищает от отказа трех дисков.  Заметьте, что много дискового пространства
''тратится'' на избыточность информации.
В общем, массив MxN будет использовать M+N-1 дисков на паритет.
Наименьшее количество пространства "теряется", когда M=N.
    Для NxN массива raid-5,
    N=3, 5 из 9 дисков используется для паритета (=55%)
    N=4, 7 из 16 дисков
    N=5, 9 из 25 дисков
    ...
    N=9, 17 из 81 дисков (=~20&процентов;)
            
 Другая альтернатива создать массив RAID-1 с
тремя дисками.  Заметьте, что все три диска содержат идентичные данные, и 2/3 пространства ''теряется''.
 
В:
Я  хочу понять, существует-ли что-то типа fsck: 
если раздел не был правильно демонтирован,fsckзапускается и исправляет файловую систему более  90% 
времени. Так как машина способна исправлять это сама 
с помощьюckraid --fix, почему не автоматизировать это?
О:
Это возможно сделать добавлением следующие строки в 
/etc/rc.d/rc.sysinit:
    mdadd /dev/md0 /dev/hda1 /dev/hdc1 || {
        ckraid --fix /etc/raid.usr.conf
        mdadd /dev/md0 /dev/hda1 /dev/hdc1
    }
            
или
    mdrun -p1 /dev/md0
    if [ $? -gt 0 ] ; then
            ckraid --fix /etc/raid1.conf
            mdrun -p1 /dev/md0
    fi
            
Перед предоставлением более полного и надежного скрипта,
рассмотрим теорию операций.
Gadi Oxman написал:
При неправильном завершении, Linux может быть в одном их следующих состояний:
Допустим мы используем массив RAID-1. В (2a), может случиться, что перед аварией
небольшое количество блоков данных было успешно записано 
только на несколько из зеркал, таким образом при следующей загрузке,
зеркала уже не будут идентичными.
      
Если мы проигнорировали разницу в зеркалах, the raidtools-0.36.3 
код балансировки чтения может выбрать для чтения
блоки из любого зеркала,
что приведет к противоречивому поведению (например, выводПри возникновении аварийного завершения дисковый кеш в 
памяти был синхронизирован с RAID набором; потерь данных нет.
При возникновении аварийного завершения в памяти дискового 
кеша было более новое содержимое, чем в RAID наборе; в 
результате повреждена файловая система и возможно потеряны 
данные.      
Это состояние может быть далее разделено на два других 
состояния:
      
При аварийном завершении Linux записывал данные.При аварийном завершении Linux не записывал данные. e2fsck -n /dev/md0будет отличаться от запуска к запуску).Так как RAID не защищает от неправильного завершения, обычно
нет никакого ''целиком корректного'' пути для устранения разницы в зеркалах
и повреждений файловой системы.
 Например, по умолчанию ckraid --fixбудет выбирать
содержимое первого действующего зеркала и обновлять другие зеркала.
Однако, в зависимости от точного времени аварии, 
данные на другом зеркале могут быть более свежие, 
и мы можем пожелать использовать их как источник для 
восстановления зеркал, или, возможно, использовать другой метод восстановления. Следующий скрипт реализует одну из самых здравых последовательностей 
загрузки.  В частности, он принимает меры предосторожности 
длинными, повторяющимися ckraid-ов при не совместных дисках, 
контроллерах, или драйверах 
контроллеров дисков.  Модифицируйте его, для соответствия своей 
конфигурации,
и скопируйте вrc.raid.init.  Затем вызовитеrc.raid.initпосле проверки fsck-ом монтирования rw 
корневого раздела, но перед 
проверкой fsck-ом оставшихся разделов.  Убедитесь, что текущий 
каталог в путях поиска (переменная PATH). 
    mdadd /dev/md0 /dev/hda1 /dev/hdc1 || {
        rm -f /fastboot             # force an fsck to occur  
        ckraid --fix /etc/raid.usr.conf
        mdadd /dev/md0 /dev/hda1 /dev/hdc1
    }
    # if a crash occurs later in the boot process,
    # we at least want to leave this md in a clean state.
    /sbin/mdstop /dev/md0
    mdadd /dev/md1 /dev/hda2 /dev/hdc2 || {
        rm -f /fastboot             # force an fsck to occur  
        ckraid --fix /etc/raid.home.conf
        mdadd /dev/md1 /dev/hda2 /dev/hdc2
    }
    # if a crash occurs later in the boot process,
    # we at least want to leave this md in a clean state.
    /sbin/mdstop /dev/md1
    mdadd /dev/md0 /dev/hda1 /dev/hdc1
    mdrun -p1 /dev/md0
    if [ $? -gt 0 ] ; then
        rm -f /fastboot             # force an fsck to occur  
        ckraid --fix /etc/raid.usr.conf
        mdrun -p1 /dev/md0
    fi
    # if a crash occurs later in the boot process,
    # we at least want to leave this md in a clean state.
    /sbin/mdstop /dev/md0
    mdadd /dev/md1 /dev/hda2 /dev/hdc2
    mdrun -p1 /dev/md1
    if [ $? -gt 0 ] ; then
        rm -f /fastboot             # force an fsck to occur  
        ckraid --fix /etc/raid.home.conf
        mdrun -p1 /dev/md1
    fi
    # if a crash occurs later in the boot process,
    # we at least want to leave this md in a clean state.
    /sbin/mdstop /dev/md1
    # OK, just blast through the md commands now.  If there were
    # errors, the above checks should have fixed things up.
    /sbin/mdadd /dev/md0 /dev/hda1 /dev/hdc1
    /sbin/mdrun -p1 /dev/md0
    
    /sbin/mdadd /dev/md12 /dev/hda2 /dev/hdc2
    /sbin/mdrun -p1 /dev/md1
            
В дополнение к указанному, Вы должны создатьrc.raid.halt, который должен выглядеть как показано ниже:
    /sbin/mdstop /dev/md0
    /sbin/mdstop /dev/md1
            
Модифицируйте обаrc.sysinitиinit.d/haltдля включения этого в место, где файловая система уже демонтирована
при halt/reboot.  (Заметьте
чтоrc.sysinitдемонтирует и перезагружает еслиfsckзавершился с ошибкой.)
В:
Могу я установить одну половину RAID-1 зеркала на один диск, который есть у меня сейчас и
затем позже взять другой диск и просто его добавить?
О:
С текущими утилитами - нет, во всяком случае не простым способом.  В частности,
вы не можете просто скопировать содержимое одного диска на другой и затем их спаровать.
Это потому, что драйвера RAID используют часть пространства в конце раздела для размещения 
суперблока.  Это слегка уменьшает количество пространства, доступного для файловой системы;
если Вы просто попробуете принудительно
поставить  RAID-1 на раздел с существующей файловой системой, 
raid суперблок перезапишет часть файловой системы и обрубит данные.
Так как ext2fs файловая система разбрасывает фалы по разделу случайным образом
(для избежания фрагментации), есть хороший шанс, что файл будет 
лежать в самом конце раздела  перед окончанием диска.
Если Вы сообразительны, я предлагаю Вам вычислить сколько места нужно под суперблок
RAID, и сделать вашу файловую систему немного короче,
оставив место на перспективу.
Но тогда, если вы такой умный, Вы должны также быть способны модифицировать
утилиты для автоматизации этого процесса.
(Утилиты не так уж сложны).
 
 Заметка: Внимательный читатель заметит, что следующий трюк может 
сработать; я не пытался проверить это:
Сделайте mkraidс/dev/null, как одним из устройств.
Тогдаmdadd -rс только одним, истинным диском 
(не делайте mdadd/dev/null).mkraidдолжен быть успешно создать raid массив, когда 
mdadd шаг выполняется - файловая система запущена в "деградированном" режиме, 
как если бы один из дисков отказал. Вперед
Назад
Содержание
 |  |