linas@linas.org
Переводчик: Максим Дзюманенко max@april.kiev.ua
Этот документ распространяется под GPL лицензией. Авторские права принадлежат Linas Vepstas ( linas@linas.org). Разрешается свободно использовать, копировать, распространять этот документ для любых целей, при условии указания имени автора/редактора и этой заметки во всех копиях и/или поддерживаемых документах и немодифицированных версиях этого документа. Этот документ распространяется в надежде, что он будет полезен, но БЕЗ ВСЯКОЙ ГАРАНТИИ, явной или неявной. Были предприняты все усилия для уверенности в правильности приведенной информации, автор /редактор / хранитель и переводчик НЕ НЕСУТ ОТВЕТСТВЕННОСТИ за любые ошибки, или повреждения, прямые или косвенные, причиненные в результате использования информации приведенной в этом документе.
Не смотря на то, что RAID разработан для увеличения надежности системы путем введения избыточности, он может создавать ложное чувство безопасности и уверенности, если используется неправильно. Эта ложная уверенность может привести к большой беде. В частности заметьте, что RAID разработан для защиты от *дисковых* отказов, а не отказов *питания* или ошибок *оператора*. Отказы питания, ошибки при разработке ядра, или ошибки оператора/администратора могут привести к невосстановимому повреждению данных! RAID *не* заменяет подобающего резервирования Вашей системы. Знайте что Вы делаете, тестируйте, будьте осведомлены и сознательны!
Домашняя страница перевода - http://dmv.webjump.com/HOWTOs/. Обновленные версии, в первую очередь, появляются тут.
О: RAID означает "Redundant Array of Inexpensive Disks", - путь создания быстрых и надежных дисковых подсистем из отдельных дисков. В мире PC, "I" понимают как "Независимые"("Independent"), где маркетинговыми усилиями продолжают различать IDE и SCSI. В оригинальном понимании, "I" означает "Недорогие (Inexpensive) по сравнению мейнфреймом 3380 DASD, размером с холодильник". Хорошие дома выглядят дешевыми по сравнению с его монстрообразными устройствами, а бриллиантовые кольца - безделушками.
О: Этот документ - tutorial/HOWTO/FAQ для пользователей MD расширения ядра Linux, соответствующих утилит, и их применения. Расширение MD программно реализует RAID-0 (striping), RAID-1 (mirroring), RAID-4 и RAID-5. Это означает, что для MD не требуется специального оборудования или дисковых контроллеров для достижения многих преимуществ RAID.Этот документ НЕ введение в RAID; вы должны искать его в другом месте.
О: Striping (RAID-0) и линейное соединение являются частью 2.x серии ядер. Его код - продукт производственного качества; он хорошо понятен и хорошо поддерживается. Он используется в некоторых очень больших USENET серверах новостей.RAID-1, RAID-4 и RAID-5 - часть ядра 2.1.63 и выше. Для ранних 2.0.x и 2.1.x ядер, существуют патчи, которые реализуют эту функцию. Не считайте обязательным обновиться до ядра 2.1.63; обновление ядра - процесс трудный; *намного* проще пропатчить ранние ядра. Большинство пользователей RAID работают с 2.0.x ядрами, и там сфокусирована большая часть исторической разработки RAID. Текущие снимки - производственного качества; т.е. нет известных ошибок, но есть некоторые грубые места и не проверенные системные установки. Большое количество людей используют программный RAID в производственном окружении.
Горячее восстановление на RAID-1 было представлено недавно (Август 1997) и должно рассматриваться как альфа качества. Горячее восстановление RAID-5 должно быть альфа качества сейчас.
Предостережение о 2.1.x нестабильных ядрах: они менее стабильны во многих отношениях. Некоторые из новейших дисковых контроллеров (таких как Promise Ultra) поддерживаются только в 2.1.x ядрах. Однако, 2.1.x ядра часто меняются в части драйверов блочных устройств, в коде DMA и прерываний, в PCI, IDE и SCSI коде, и в драйверах дисковых контроллеров. Комбинация этих факторов в совокупности с дешевыми жесткими дисками и/или низкого качества кабелями могут привести к значительным неприятностям. Утилита
ckraid
как иfsck
иmount
создают значительную нагрузку на RAID подсистему. Это может привести к блокировке дисков при загрузке, где даже магическая alt-SysReq клавишная комбинация не сохранит день. Будьте осторожны с 2.1.x ядрами, и ожидайте проблем. Или вернитесь к 2.0.34 ядру.
О: Программный RAID-0 и линейный режим - присутствуют во всех версиях текущих ядер Linux. Патчи для программных RAID-1,4,5 имеются на http://luthien.nuclecu.unam.mx/~miguel/raid. См. также квази-зеркало ftp://linux.kernel.org/pub/linux/daemons/raid/ для патчей, инструментов и других интересных вещей.
О:
- Общий обзор RAID: http://www.dpt.com/uraiddoc.html.
- Общие опции Linux RAID: http://linas.org/linux/raid.html.
- Последняя версия этого документа: http://linas.org/linux/Software-RAID/Software-RAID.html.
- Linux-RAID архив почтовой переписки: http://www.linuxhq.com/lnxlists/.
- Домашняя страница Linux Software RAID: http://luthien.nuclecu.unam.mx/~miguel/raid.
- Инструменты Linux Software RAID: ftp://linux.kernel.org/pub/linux/daemons/raid/.
- Как установить linear/stripped Software RAID: http://www.ssc.com/lg/issue17/raid.html.
- Bootable RAID mini-HOWTO: ftp://ftp.bizsystems.com/pub/raid/bootable-raid.
- Root RAID HOWTO: ftp://ftp.bizsystems.com/pub/raid/Root-RAID-HOWTO.
- Linux RAID-Geschichten: http://www.infodrom.north.de/~joey/Linux/raid/.
О: Linas Vepstas собрал это все вместе. Однако, большая часть информации, и некоторые фразы были предоставлены
- Bradley Ward Allen < ulmo@Q.Net>
- Luca Berra < bluca@comedia.it>
- Brian Candler < B.Candler@pobox.com>
- Bohumil Chalupa < bochal@apollo.karlov.mff.cuni.cz>
- Rob Hagopian < hagopiar@vu.union.edu>
- Anton Hristozov < anton@intransco.com>
- Miguel de Icaza < miguel@luthien.nuclecu.unam.mx>
- Marco Meloni < tonno@stud.unipg.it>
- Ingo Molnar < mingo@pc7537.hil.siemens.at>
- Alvin Oga < alvin@planet.fef.com>
- Gadi Oxman < gadio@netvision.net.il>
- Vaughan Pratt < pratt@cs.Stanford.EDU>
- Steven A. Reisman < sar@pressenter.com>
- Michael Robinton < michael@bzs.org>
- Martin Schulze < joey@finlandia.infodrom.north.de>
- Geoff Thompson < geofft@cs.waikato.ac.nz>
- Edward Welbon < welbon@bga.com>
- Rod Wilkens < rwilkens@border.net>
- Johan Wiltink < j.m.wiltink@pi.net>
- Leonard N. Zubkoff < lnz@dandelion.com>
- Marc ZYNGIER < zyngier@ufr-info-p7.ibp.fr>
Copyrights
- Copyright (C) 1994-96 Marc ZYNGIER
- Copyright (C) 1997 Gadi Oxman, Ingo Molnar, Miguel de Icaza
- Copyright (C) 1997, 1998 Linas Vepstas
- По закону об авторском праве, дополнительные авторские права принадлежат помощникам, указанным выше.
Спасибо всем за приведенное здесь!
О: RAID - путь комбинирования нескольких дисков в одно целое для увеличения скорости и/или надежности. Существует несколько различных типов и реализаций RAID, каждый со своими преимуществами и недостатками. Например, помещая копию одинаковых данных на два диска (называется зеркализация дисков, или RAID уровня 1), скорость чтения может быть повышена поочередным считыванием с каждого диска зеркала. В среднем, каждый диск менее занят, т.к. он обрабатывает только половину операций чтения (для двух дисков), или 1/3 (для трех дисков), и т.д. В дополнение, зеркало может повышать надежность: если один диск выходит из строя, другой диск содержит копию данных. Различные пути комбинирования дисков в один, обозначаются уровнями RAID, могут обеспечить большую эффективность хранения, чем просто зеркализация, или могут изменить производительность по задержкам (времени доступа), или производительность пропускной способности (скорости передачи), для чтения или записи, в то же время поддерживается избыточность - это полезно для противодействия отказам.Хотя RAID может защитить от отказа, он не защищает от ошибок оператора и администратора (человека), или потерь вызванных ошибками программ (возможно и ошибками собственно программной реализации RAID). Сеть изобилует трагическими историями о системных администраторах, которые неправильно устанавливали RAID, и потеряли все свои данные. RAID - не заменяет необходимость частого, регулярного планового резервного копирования.
RAID может быть реализован аппаратно, в виде специальных дисковых контроллеров, или программно, как модуль ядра который связывает низкоуровневый драйвер диска, и файловую систему, которая находится на нем. Аппаратный RAID - всегда "дисковый контроллер", - это устройство к которому могут подсоединяться диски. Обычно он представляет собой плату, которая вставляется в слот ISA/EISA/PCI/S-Bus/MicroChannel. Однако, некоторые RAID контроллеры - в виде ящика, который соединяется кабелями с используемым дисковым контроллером, и дисками. Меньшие из них помещаются в дисковой стойке; большие могут быть встроены в дисковый шкаф со своими собственными стойками и источником питания. Последние аппаратные RAID используют с последними и быстрейшими процессорами, что обеспечивает обычно лучшую общую производительность, несмотря на значительную цену. Это потому, что большинство RAID контроллеров поставляются с встроенными процессорами на борту и кеш-памятью, которые могут значительно разгрузить суммарную обработку главного процессора, насколько позволяет скорость поступления данных в большой кеш контроллера. Старые аппаратные RAID могут работать как "тормоз" когда используются с новейшими процессорами: вчерашние модные встроенные процессоры и кеш могут быть бутылочным горлышком, и их производительность часто превосходится чисто-программными RAID и новыми, но простыми в других отношениях, дисковыми контроллерами. Аппаратные RAID могут иметь преимущество над чисто-программными RAID, если используют синхронизацию шпинделей дисков и знают позицию дисковых пластин относительно головок диска и желаемого дискового блока. Однако, большинство современных (дешевых) дисков не предоставляют эту информацию, во всяком случае, средства управления этим и т.о., большинство аппаратных RAID не имеет этих преимуществ. Аппаратные RAID различных производителей, версий и моделей обычно не совместимы: если RAID контроллер отказывает, он должен быть заменен на другой контроллер того-же самого типа. На момент написания (Июнь 1998), широкое разнообразие аппаратных контроллеров используется под Linux; однако, никакой из них, на текущий момент, не поставляется с утилитами конфигурации и управления, которые запускаются под Linux.
Software-RAID - набор модулей ядра, вместе с утилитами управления, которые реализуют чисто программный RAID, и не требуют необычной аппаратуры. Подсистема Linux RAID реализована в ядре, как уровень над низкоуровневыми драйверами дисков (для IDE, SCSI и Paraport устройств), и интерфейсом блочных устройств. Файловая система, будь то ext2fs, DOS-FAT, или другая, работает поверх блочного интерфейса. Программный RAID, по своей программной природе, склонен быть более гибким, чем аппаратная реализация. Обратная сторона этого - требуется больше процессорного времени, по сравнению с аппаратной реализацией. Конечно, цена не превзойденная. Кроме того программный RAID имеет одну важную отличительную особенность: он оперирует базируясь на разделах, где несколько отдельных дисковых разделов собираются вместе для создания разделов RAID. В этом отличие от большинства аппаратных решений RAID, которые объединяют вместе целые диски в массив. В аппаратных RAID, факт, что массив RAID - прозрачен для операционной системы, упрощает управление. В программном, гораздо больше конфигурационных опций и вариантов, что запутывает дело.
На момент написания (Июнь 1998), администрирование RAID под Linux далеко от простоты, и это лучше пробовать опытным системным администраторам. Теория функционирования сложна. Системные инструменты требуют модификации загрузочных скриптов. И восстановление дискового отказа непростая задача, и способствует ошибкам человека. RAID не для новичков, и полученный прирост в надежности и производительности, может запросто перевеситься излишней сложностью. Действительно, современные диски - невероятно надежны и современные процессоры и контроллеры вполне мощные. Вы можете более просто получить желаемую надежность и производительность купив диск высшего качества и/или быструю аппаратуру.
О: Различные уровни RAID имеют различную производительность, избыточность, емкость, надежность и ценовые характеристики. Большинство, но не все, из уровней RAID предоставляют повышенную защиту от отказов диска. Из тех, которые предоставляют избыточность, RAID-1 и RAID-5 более популярны. RAID-1 предлагает лучшую производительность, в то же время RAID-5 применяется для более продуктивного использования имеющихся емкостей накопителей. Однако, настройка производительности - совсем иное дело, так как производительность зависит от множества различных факторов, от типа приложения, до размеров stripe-ов, блоков, и файлов. Более трудные аспекты настройки производительности откладываются до более поздних разделов этого HOWTO.Далее описывается разница между уровнями RAID в контексте реализации программного RAID в Linux.
- RAID-linear простое объединение разделов для создания большого виртуального раздела. Это применяется если у Вас несколько маленьких дисков, и Вы хотите создать один большой раздел. Это объединение не предлагает избыточности, и фактически уменьшает общую надежность: если один из дисков выходит из строя, весь раздел выходит из строя.
- RAID-1 так же называемый "зеркализацией"("mirroring"). Два (или более) раздела, все одинакового размера, каждый содержит точную копию всех данных, блок в блок. Зеркализация дает сильную защиту от отказов диска: если один диск отказывает, есть другой с точной копией данных. Зеркализация также может помочь увеличить производительность подсистемы ввода-вывода, так как запросы на чтение могут быть разделены между несколькими дисками. К несчастью, зеркализация также менее эффективна в смысле емкости: два зеркальных раздела могут вместить не больше данных, чем один раздел.
- Striping - базовая концепция всех других уровней RAID. stripe - непрерывная последовательность дисковых блоков. stripe может быть размером с один дисковый блок, или может состоять из тысяч. Устройства RAID разделяют содержащие их разделы дисков на stripe-ы; различные уровни RAID различаются в том, как они организуют stripe-ы, и как данные размещаются на них. Взаимодействие между размером stripe-ов, типичными размерами файлов в системе, и их положением на диске - определяет общую производительность подсистемы RAID.
- RAID-0 подобна RAID-linear, исключая то, что компоненты разделов делятся на strip-ы и затем чередуются. Подобно RAID-linear, результат - один большой виртуальный раздел. Так же как и в RAID-linear, это не предполагает избыточности, и тоже уменьшает общую надежность: отказ одного диска ударит по всему. RAID-0 часто претендует на увеличение производительности по сравнению RAID-linear. Однако, это может быть или не быть справедливо, в зависимости от характеристик файловой системы, типичного размера файла по сравнению с размером stripe, и типа рабочей нагрузки. Файловая система
ext2fs
уже рассеивает файлы по разделу, стараясь минимально фрагментировать. Итак, на простейшем уровне, любой доступ может быть выполнен к одному из нескольких дисков, и таким образом, чередование stripe-ов по многим дискам предоставляет реальные преимущество. Однако, существует разница в производительности, она зависит от данных, рабочей загрузки, и размера stripe.
- RAID-4 чередует stripe-ы подобно RAID-0, но требуется дополнительный раздел для размещения информации о четности. Четность используется для получения избыточности: если один из дисков отказывает, данные на оставшихся дисках могут быть использованы для воссоздания данных на отказавшем диске. Получаем N дисков с данными, и один диск с четностью, stripe четности вычисляется так - берется один stripe из каждого диска с данными, и XOR-ятся вместе. Итак, емкость (N+1)-дисков массива RAID-4 равна N, что намного лучше чем зеркализация (N+1) дисков, и почти так же хорошо, как RAID-0 на N. Заметьте, что для N=1, где один диск с данными, и один паритетный, RAID-4 эквивалентен зеркализации, при этом каждый из двух дисков копирует друг друга. Однако, RAID-4 НЕ дает производительности чтения зеркализации, и имеет пониженную производительность записи. По просту, это потому, что обновление паритета требует чтения старого паритета, перед тем, ка новый паритет может быть вычислен и записан. При большом количестве операций записи, паритетный диск может стать "бутылочным горлышком", т.к. каждая операция записи должна обращаться к паритетному диску.
- RAID-5 освободжден от "бутылочного горлышка" при записи на RAID-4 размещением паритетных stripe вперемешку на каждом диске. Однако, производительность записи все еще не столь хороша, как при зеркализации, так как паритетный stripe все же должен быть считан и XOR-ен перед записью. Производительность чтения тоже не так хороша, как при зеркализации, так как, после этого, есть только одна копия данных, не две или более. Принципиальное преимущество RAID-5 над зеркализацией то, что он предоставляет избыточность и защиту от отказа одного диска, в то же время предоставляет намного больше емкости, когда используется с тремя или более дисками.
- RAID-2 и RAID-3 редко используются, и в некоторой степени стали устаревшими для современных дисковых технологий. RAID-2 подобен RAID-4, но размещает ECC информацию вместо паритетной. С тех пор как все современные диски реализуют ECC в себе, это предоставляет маленькую дополнительную защиту. RAID-2 может дать большую целостность данных, если пропало питание в процессе записи; однако, резервные аккумуляторы и чистое завершение работы могут дать ту же выгоду. RAID-3 подобен RAID-4, исключая то, что он использует наименьший возможный размер stripe. Как результат, любая операция чтения будет включать в себя все диски, делая перекрытие запросов ввода-вывода трудным/невозможным. Для избежания задержек при ожидания вращения, RAID-3 требует синхронизации всех шпинделей дисков. Большинство современных дисков не имеют способности синхронизировать шпиндели, или, если и имеют, не имеют нужных соединителей, кабелей, и документации производителей. Ни RAID-2 ни RAID-3 не поддерживаются драйверами программного RAID в Linux.
- Прочие уровни RAID определены различными исследователями и поставщиками. Многие из них представляют наложение одного типа raid поверх другого. Некоторые требуют специального оборудования, а другие защищены патентами. Нет единой схемы именования этих уровней. Иногда преимущества этих систем небольшие, или по крайне мере не проявляются пока система не слишком нагружена. Исключая размещение RAID-1 поверх RAID-0/linear, Программный RAID Linux не поддерживает никакие друге варианты.
О: Я обнаружил, что планирование файловой системы одна из труднейших задач конфигурирования 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 утилит при сборке требует установленных патчей RAID-1,4,5. Я не знаю ни одной предкомпилированной двоичной версии raid утилит, которые доступны на текущий момент. Однако, эксперименты показывают, что бинарники raid утилит, когда скомпилированы с ядром 2.1.100, кажется хорошо работающими при создании RAID-0/linear раздела под 2.0.34. Смельчаки спрашивали об этом, и я временно поместил бинарники mdadd, mdcreate, и т.д. на http://linas.org/linux/Software-RAID/ Вы должны взять man страницы, и т. д. с обычного пакета утилит.
/
)?
Почему я не могу загружать 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-dev0x900
для/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-)
О: Да, но не наоборот. Вы можете поместить stripe поверх нескольких дисков, и затем строить зеркализацию на базе этого. Однако, striping не может быть помещен на зеркало.Короткое техническое объяснение этого - особенностью linear и stripe является использования
ll_rw_blk
процедуры для доступа.ll_rw_blk
процедура отображает дисковые устройства и сектора, но не блоки. Блочные устройства могут быть размещены одно поверх другого; но устройства, которые делают прямой, низкоуровневый доступ к дискам, такие какll_rw_blk
, не могут.
На текущий момент (Ноябрь 1997) RAID не может быть создан на петлевом (loopback) устройстве, однако возможно, это скоро будет исправлено.
О: Сейчас (Ноябрь 1997), для массива RAID-5, нет. Сейчас, это можно сделать только для RAID-1 повер объединенных дисков.
О: Нет разницы в емкости. Также нельзя добавить диски ни в один из массивов для увеличения емкости (для деталей, смотрите вопрос ниже).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 используют часть пространства в конце раздела для размещения суперблока. Это слегка уменьшает количество пространства, доступного для файловой системы; если Вы просто попробуете принудительно поставить RAID-1 на раздел с существующей файловой системой, raid суперблок перезапишет часть файловой системы и обрубит данные. Так как ext2fs файловая система разбрасывает фалы по разделу случайным образом (для избежания фрагментации), есть хороший шанс, что файл будет лежать в самом конце раздела перед окончанием диска.Если Вы сообразительны, я предлагаю Вам вычислить сколько места нужно под суперблок RAID, и сделать вашу файловую систему немного короче, оставив место на перспективу. Но тогда, если вы такой умный, Вы должны также быть способны модифицировать утилиты для автоматизации этого процесса. (Утилиты не так уж сложны).
Заметка: Внимательный читатель заметит, что следующий трюк может сработать; я не пытался проверить это: Сделайте
mkraid
с/dev/null
, как одним из устройств. Тогдаmdadd -r
с только одним, истинным диском (не делайте mdadd/dev/null
).mkraid
должен быть успешно создать raid массив, когда mdadd шаг выполняется - файловая система запущена в "деградированном" режиме, как если бы один из дисков отказал.
О: Избыточность уровней RAID предназначена для защиты от отказа диска, не от отказа питания. Есть несколько путей восстановления в этой ситуации.В любом случае, вышеуказанные шаги только синхронизируют массив raid. Для файловых систем возможно все еще необходимо устранение ошибок: для этого, нужно запустить fsck на активном, но не смонтированном устройстве.
- Метод (1): Использовать raid утилиты. Он может быть использован для синхронизации raid массивов. Он не устраняет повреждение файловой системы; после синхронизации raid массивов, файловая система все еще нуждается в исправлении с помощью fsck. Raid массивы могут быть проверены
ckraid /etc/raid1.conf
(для RAID-1, или,/etc/raid5.conf
, и т.д..) Запускckraid /etc/raid1.conf --fix
выберет оин один диск из дисков массива (обычно первый), для использования его в качестве главной копии, и копирования его блоков на другие диски зеркала. Для обозначения диска, который должен быть использован как главный, вы можете использовать--force-source
флаг: например,ckraid /etc/raid1.conf --fix --force-source /dev/hdc3
. Комманда ckraid может быть безопасно запущена без опции--fix
для проверки неактивного RAID массива без внесения изменений. Если Вы удовлетворены предполагаемыми изменениями, примените опцию--fix
.- Метод (2): Параноидальный, длительный по времени, не намного лучше, чем первый путь. Представим двух-дисковый массив RAID-1, состоящий из разделов
/dev/hda3
и/dev/hdc3
. Вы можете попробовать следующее:Вместо последних двух шагов, Вы можете запустить
fsck /dev/hda3
fsck /dev/hdc3
- Решите, который из двух разделов содержит меньше ошибок, или где проще восстановление, или на котором находятся нужные Вам данные. Выберите один, только один, для вашей новой ``главной'' копии. Предположим Вы выбрали
/dev/hdc3
.dd if=/dev/hdc3 of=/dev/hda3
mkraid raid1.conf -f --only-superblock
ckraid /etc/raid1.conf --fix --force-source /dev/hdc3
, что будет быстрее.- Метод (3): Версия для ленивых людей. Если Вы не хотите ждать завершения долгой проверки fsck, просто пропустите первые три шага выше, и начинайте прямо с последних двух шагов. Только после завершения запустите
fsck /dev/md0
. Метод (3) на самом деле замаскированный метод (1).С трех-дисковым массивом RAID-1, есть много вариантов, таких как использование двух дисков для выбора ответа. Утилиты автоматизации этого пока (Сентябрь 97) не существуют.
О: Избыточность уровней RAID предназначена для защиты от отказов дисков, а не от отказов питания. Так как диски в массиве RAID-4 или RAID-5 не содержат файловой системы, которую fsck может читать, есть несколько опций восстановления. Вы не можете использовать fsck для предварительной проверки и/или восстановления; Вы должны использовать сначала ckraid.Комманда
ckraid
может быть безопасно запущена без опции--fix
для проверки неактивного массива RAID без внесения любых изменений. Когда Вы удовлетворены предложенными изменениями, примените опцию--fix
.
Если Вы хотите, Вы можете попробовать обозначить один из дисков как ''отказавший диск''. Делайте это с флагом
--suggest-failed-disk-mask
.Только один бит должен быть установлен в флаге: RAID-5 не может восстанавливать два отказавших диска. mask - битовая маска: итак:
0x1 == первый диск 0x2 == второй диск 0x4 == третий диск 0x8 == четвертый диск, и т.д.Или Вы можете выбрать модификацию секторов с паритетом, используя флаг
--suggest-fix-parity
flag. Это заново вычислит паритет из других секторов.
Флаг
--suggest-failed-dsk-mask
и--suggest-fix-parity
может быть безопасно использован для проверки. Никаких изменений не будет сделано, если не указан флаг--fix
. Итак, Вы можете экспериментировать с различными возможными вариантами восстановления.
/dev/md0
состоит из двух разделов
жестких дисков:
/dev/hda3
и /dev/hdc3
.
Недавно, диск с /dev/hdc3
отказал,
был заменен на новый диск. Мой лучший друг,
который не разбирается в RAID, сказал, что сейчас правильно сделать
''dd if=/dev/hda3 of=/dev/hdc3
''.
Я попробовал это, но все по прежнему не работает.
О: Вы должны отстранить Вашего друга от компьютера. К счастью, не произошло никаких серьезных повреждений. Вы можете все восстановить запустив:При запуске
mkraid raid1.conf -f --only-superblockdd
, были созданы две идентичные копии раздела. Это почти правильно, исключая то, что расширение ядра RAID-1 предполагает различие в суперблоке. Итак, когда Вы пробуете активировать RAID, программа обратит внимание на проблему, и деактивирует один из двух разделов. Пересоздав суперблок, вы должны получить полностью рабочую систему.
mkraid
нет флага
--only-superblock
. Что мне делать?
О: В новых утилитах убрали поддержку этого флага, заменив его флагом--force-resync
. Как мне сообщили с последней версией утилит и программ работает такая последовательность:После этого,
umount /web (что было смонтировано на /dev/md0) raidstop /dev/md0 mkraid /dev/md0 --force-resync --really-force raidstart /dev/md0cat /proc/mdstat
должно доложитьresync in progress
, и далее можноmount /dev/md0
с этого места.
/dev/md0
состоит из двух
разделов: /dev/hda3
and /dev/hdc3
.
Мой лучший друг(подруга?), который не разбирается в RAID,
запустил без меня fsck
на /dev/hda3
,
и сейчас RAID не работает. Что я должен делать?
О: Вы должны пересмотреть свое понятие - ``лучший друг''. В общем,fsck
не должна запускаться на отдельных разделах массива RAID. Предположим ни один из разделов тяжело не поврежден, потерь данных нет, и RAID-1 устройство может быть восстановлено так:Это должно вернуть ваше зеркало к работе.
- делаем резервную копию файловой системы на
/dev/hda3
dd if=/dev/hda3 of=/dev/hdc3
mkraid raid1.conf -f --only-superblock
О: Потому что каждый компонент раздела в RAID-1 зеркале является просто точной копией файловой системы. В крайнем случае, зеркализация может быть запрещена, и один из разделов может быть смонтирован и безопасно запущен как обычная, не-RAID файловая система. Если Вы готовы перезапуститься используя RAID-1, то демонтируйте раздел, и следуйте вышеприведенным инструкциям для восстановления зеркала. Заметьте, что вышеуказанное работает ТОЛЬКО для RAID-1, и ни для какого другого уровня.Возможно, Вам удобнее изменить направление копирования: копировать с диска, который был нетронут на тот, который был. Просто будьте уверены, что после этого запускаете fsck на md.
fsck /dev/md0
?
О: Да, безопасно запускатьfsck
на устройствахmd
. Фактически, это единственное безопасное место запускаfsck
.
О: Как только диск откажет, драйвер нижнего уровня вернет код ошибки драйверу RAID. RAID драйвер пометит этот диск в суперблоках RAID хороших дисков как ``плохой''(bad) (таким образом позже мы сможем узнать, которые из дисков хорошие, а которые нет), и продолжит работу RAID на оставшихся действующих зеркалах.Это, конечно, предполагает, что диск и драйвер нижнего уровня в состоянии обнаружить ошибки чтения/записи и не будут, к примеру, молча искажать данные. Это справедливо для текущих дисков (схем обнаружения ошибок используемых в них), и основы работы RAID.
О: Работа далека от завершения ``горячей замены''. С этим свойством, можно добавить несколько ``резервных'' дисков в RAID набор (уровня 1 или 4/5), и как только диск отказал, он будет воссоздан на ходу на одном из резервных дисков, без необходимости остановки массива.Однако, для использования этого свойства, резервные диски должны быть определены на момент загрузки или должны добавляться на ходу, что требует использования специального шкафа и соединителей, которые позволяют добавлять диск при включенном питании.
На Октябрь 97, доступна бета версия MD, которая позволяет:
По умолчанию, автоматическая реконструкция сейчас (Декабрь 97) запрещена по умолчанию, в основном по причине предварительного характера этой работы. Она может быть включена изменением значения
- RAID 1 и 5 восстановление на резервных дисках
- RAID-5 восстановление паритета после неправильного завершения
- добавление резервных дисков в уже работающий массив RAID 1 или 4/5
SUPPORT_RECONSTRUCTION
вinclude/linux/md.h
.
Если при создании в массиве сконфигурированы резервные диски и реконструкция в ядре включена, резервный диск уже будет содержать суперблок (записанный утилитой
mkraid
), и ядро будет реконструировать его содержимое автоматически (без необходимости шагов: вызовmdstop
, замены диска,ckraid
,mdrun
).
Если Вы не запустили автоматическую реконструкцию, и не сконфигурировали диски с горячей заменой, рекомендуется процедура описанная Gadi Oxman < gadio@netvision.net.il> :
- Сейчас, как только один диск удален, набор RAID будет запущен в деградированном режиме. Для восстановления полноценного функционирования, Вы должны:
Теперь массив будет запущен со всеми дисками, и снова будет защищен от отказа одного диска.
- остановить массив (
mdstop /dev/md0
)- заменить отказавший диск
- запустить
ckraid raid.conf
для реконструкции содержимого- запустить массив снова (
mdadd
,mdrun
).На текущий момент, не возможно назначить один резервный диск нескольким массивам. Каждый массив требует своего собственного резервного диска.
О:
Ядро ведет протокол событий с
``KERN_ALERT
'' приоритетом в syslog.
Существует несколько программных пакетов, которые наблюдают за
файлами syslog, и автоматически подают сигнал на PC динамик,
звонят на пейджер, посылают почту, и т.д.
О: Gadi Oxman < gadio@netvision.net.il> пишет: Обычно, для запуска RAID-5 набора из n дисков вы должны:В случае, если один из дисков отказал, Вы все также должны
mdadd /dev/md0 /dev/disk1 ... /dev/disk(n) mdrun -p5 /dev/md0mdadd
их, как и при обычном запуске. (?? попробуйте использовать /dev/null вместо отказавшего диска ??? и посмотрите, что получится). После этого массив будет активен в деградированном режиме с (n - 1) диском. Если ``mdrun
'' не удается, ядро фиксирует ошибку (например, несколько отказавших дисков, или неправильное завершение). Используйте ``dmesg
'' для отображения сообщений об ошибках ядра от ``mdrun
''. Если набор raid-5 поврежден исчезновением питания, в отличие от отказа диска, можно попробовать создать новый RAID суперблок:RAID массив не предоставляет защиту от отказа питания или краха ядра, и нельзя гарантировать корректное восстановление. Воссоздание суперблока приведет к игнорированию положения пометкой всех устройств, как ``OK'', как будто ничего не случилось.
mkraid -f --only-superblock raid5.conf
О: Типичный рабочий сценарий следующий:
- RAID-5 массив активен.
- Одно устройство отказывает во время активности массива.
- Микропрограмма диска и низкоуровневые драйвера Linux диска/контроллера обнаруживают отказ и сообщают код ошибки MD драйверу.
- MD драйвер продолжает поддерживать безошибочную работу
/dev/md0
устройства для верхних уровней ядра (с потерей производительности) используя оставшиеся рабочие диски.- Системный администратор может, как обычно,
umount /dev/md0
иmdstop /dev/md0
.- Если отказавшее устройство не заменено, системный администратор может запустить массив в деградированном режиме, запустив
mdadd
andmdrun
.
О:
О: Если Вы заботитесь о RAID, Высокой надежности, и UPS, то, возможно, также хорошая мысль - быть суеверным. Это не повредит, не так ли?
fsck
выдает очень много ошибок. Это нормально?
О: Нет. И, если Вы запускали fsck не в "режиме только для чтения; без обновлений", вполне возможно, что у Вас повреждены даные. К несчастью, часто встречающийся сценарий - случайное изменение порядка дисков в массиве RAID-5, после замены диска. Хотя суперблок RAID содержит правильный порядок, не все утилиты используют эту информацию. В частности, текущая версияckraid
будет использовать информацию указанную в-f
флаге (обычно, файл/etc/raid5.conf
) вместо данных из суперблока. Если указанный порядок неверный, то замененный диск будет реконструирован неправильно. Симптом этого - многочисленные ошибки выдаваемыеfsck
.И, если вы удивлены, да, кое-кто потерял все свои данные из-за этой ошибки. Настоятельно рекомендуется сделать копию всех данных перед ре-конфигурированием RAID месива.
mdstop
только для того, чтобы
убедиться, что диски синхронизированы. Это ДЕЙСТВИТЕЛЬНО необходимо?
Не достачно де-монтирования файловой системы?
О: Командаmdstop /dev/md0
будет:
- помечать диски как ''чистые''. Это позволит нам обнаружить неправильное завершение, например из-за отказа питания или краха ядра.
- синхронизирует массив. Это менее важно после де-монтирования файловой системы, но важно если к
/dev/md0
был доступ не через файловую систему (например посредствомe2fsck
).
О: На 18 сентября 1997, это - "2.0.30 + pre-9 2.0.31 + Werner Fink's swapping patch + the alpha RAID patch". На Ноябрь 1997, это - 2.0.31 + ... !?
О: Убедитесь, что/usr/include/linux
символическая ссылка на/usr/src/linux/include/linux
. Убедитесь, что новые файлыraid5.c
, и т.д. скопированы в свое правильное расположение. Иногда комманда patch не создает новые файлы. Попробуйте указать флаг-f
дляpatch
.
О: raidtools-0.42 требует linuxthreads-0.6 с: ftp://ftp.inria.fr/INRIA/Projects/cristal/Xavier.Leroy Как альтернатива - glibc v2.0.
mdrun -a /dev/md0: Invalid argument
О: Используйтеmkraid
для инициализации RAID перед первым использованием.mkraid
стиранием разделов RAID гарантирует, что массив RAID изначально в согласованном состоянии. Дополнительно,mkraid
создаст RAID суперблоки.
mdrun -a /dev/md0: Invalid argument
.
Установки такие:
cat /proc/mdstat
показывает
Personalities : read_ahead not set md0 : inactive sda1 sdb1 6313482 blocks md1 : inactive md2 : inactive md3 : inactive
mdrun -a
выдает сообщение об ошибке
/dev/md0: Invalid argument
О: Попробуйтеlsmod
(или,cat /proc/modules
) чтобы увидеть, загружены ли raid модули. Если нет, Вы можете загрузить их явно командойmodprobe raid1
илиmodprobe raid5
. Либо, если Вы используете автозагрузчик, и ожидаете, что их загрузитkerneld
, а он этого не делает - это, возможно, из-за того что загрузчику не хватает информации для загрузки модулей. Отредактируйте/etc/conf.modules
и добавьте следующие строки:alias md-personality-3 raid1 alias md-personality-4 raid5
mdadd -a
я получаю ошибку:
/dev/md0: No such file or directory
. И действительно, вроде-бы
нигде нет никакого /dev/md0
. И что мне теперь делать?
О: Пакет raid-tools должен создать устройства когда вы запускаетеmake install
как root. Или Вы можете сделать следующее:cd /dev ./MAKEDEV md
/dev/md0
,
Я пытаюсь монтировать и получаю следующую ошибку:
mount: wrong fs type, bad option, bad superblock on /dev/md0,
or too many mounted file systems
. Что не так?
О: Вы должны создать файловую систему на/dev/md0
перед монтированием. Используйтеmke2fs
.
На моем Linux 2.0.30, при выполненииmkraid
на RAID-1 устройстве, при очистке двух отдельных разделов, я получил на консоль сообщения об ошибках"Cannot allocate free page"
, и"Unable to handle kernel paging request at virtual address ..."
ошибки в системном log-е. На этот момент, система стала совершенно не готова к использованию, но кажется восстановленной после этого. Работоспособность кажется восстановленной без прочих ошибок, и я успешно использую мой RAID-1. Однако ошибки смущают. Какие идеи?
О: Это хорошо известная ошибка в ядре 2.0.30. Она устранена в 2.0.31 ядре; или откатитесь к 2.0.29.
mdrun
устройство RAID-1, RAID-4 или RAID-5.
Если я пробую mdrun
на добавленном посредством mdadd
устройстве, я получаю сообщение
''invalid raid superblock magic
''.
О:
Проверьте, запускали ли Вы mkraid
часть установочной
процедуры.
/dev/md0
, ядро выплевывает кучу
ошибок, таких как md0: device not running, giving up !
и I/O error...
. Я успешно добавил мои устройства в
виртуальное устройство.
О:
для использования, устройство должно быть запущено. Используйте
mdrun -px /dev/md0
где x = l для линейного объединения,
0 для RAID-0 или 1 для RAID-1 и т.д.
cat /proc/mdstat
показывает
общий размер устройства, но df
показывает только размер первого
физического устройства.
О:
Вы должны сделать mkfs
на новом md-устройстве перед
первым использованием, чтобы файловая система заняла все устройство.
/etc/mdtab
используя mdcreate, я сделал
mdadd
, mdrun
и fsck
на двух моих разделах /dev/mdX
. Все выглядит
нормально перед перезагрузкой. Как только я перегрузился, я
получаю ошибки fsck
на обоих разделах: fsck.ext2: Attempt to read block from filesystem resulted in short
read while trying too open /dev/md0
. Почему?! Как это исправить?!
О: В процессе загрузки, разделы RAID должны быть запущены перед проверкойfsck
. Это должно быть сделано в одном из следующих скриптов. В одних дистрибутивах,fsck
вызывается из/etc/rc.d/rc.S
, в других - из/etc/rc.d/rc.sysinit
. Добавьте в этот файлmdadd -ar
*перед* запускомfsck -A
. Еще лучше, чтобы запускалсяckraid
, еслиmdadd
завершается с ошибкой. Как это сделать подробно обсуждается в вопросе 14 секции ''Восстановление Ошибок''.
invalid raid superblock magic
когда
пытаюсь запустить массив, который состоит из разделов более 4Гб.
О: Эта ошибка сейчас исправлена. (Сентябрь 97) Убедитесь, что у Вас свежий драйвер raid.
Warning: could not write 8 blocks in inode
table starting at 2097175
когда пытаюсь запустить mke2fs на
разделе более 2Гб.
О: Кажется это проблемаmke2fs
(Ноябрь 97). Временный выход - взять код mke2fs и добавить#undef HAVE_LLSEEK
вe2fsprogs-1.10/lib/ext2fs/llseek.c
прямо перед первым#ifdef HAVE_LLSEEK
, затем пересобрать ядро.
ckraid
сейчас не способен читать /etc/mdtab
О: Формат конфигурационного файла RAID0/linear используемый в/etc/mdtab
устарел, однако он будет поддерживаться некоторое время. Сейчас обновленные конфигурационные фалы называются/etc/raid1.conf
и т.д.
raid1.o
) не загружаются автоматически;
но они загружаться через modprobe перед mdrun. Как я могу это устранить?
О: Для автозагрузки модулей, мы можем добавить следующее в/etc/conf.modules
:alias md-personality-3 raid1 alias md-personality-4 raid5
mdadd
13 устройств, и теперь я пробую
mdrun -p5 /dev/md0
и получаю сообщение:
/dev/md0: Invalid argument
О: Конфигурация по умолчанию для программного RAID - 8 физических устройств. Отредактируйтеlinux/md.h
изменив#define MAX_REAL 8
на большее число, и пересоберите ядро.
md
с разделами на
последнем SPARCstation 5. Я думаю, что это связано с
disk-labels.
О:
Sun disk-labels сидят в первом килобайте раздела.
Для RAID-1, Sun disk-label не играют роли, так как
ext2fs
будет проскакивать метку на каждом зеркале.
Для других raid уровней (0, линейного соединения и 4/5) это -
проблема; (на Декабрь 97) они все еще не адресуются.
О: Да! Программный RAID будет работать с любым дисковым контроллером (IDE или SCSI) и любыми дисками. Не должны быть идентичны ни диски, ни контроллеры. Например, зеркало RAID может быть создано с одной половиной зеркала на SCSI диске, и другой половиной на IDE диске. Диски могут не быть одного размера. Нет ограничений на смешивание и соответствие дисков и контроллеров.Это потому, что программный RAID работает с дисковыми разделами, не непосредственно с дисками. Одна рекомендация - для RAID уровней 1 и 5, разделы, используемые для одного набора, должны быть одного размера. Если для создания RAID 1 или 5 массивов используются неодинаковые разделы, то излишек пространства на более длинных разделах теряется (не используется).
О: Mylex/BusLogic FlashPoint платы с RAIDPlus являются фактически программными RAID, а не аппаратными RAID. RAIDPlus поддерживается только Windows 95 и Windows NT, но не Netware или любой Unix платформой. Помимо загрузки и конфигурирования, в драйвере ОС, на самом деле, реализована поддержка RAID.Даже если теоретически возможна поддержка Linux-ом RAIDPlus, реализация RAID-0/1/4/5 в ядре Linux намного более гибкая и должна быть большую производительность, так что мало причин поддерживать RAIDPlus непосредственно.
О: "Я думаю, да" - лучший имеющийся ответ на время написания этого (Апрель 98). Много пользователей сообщают, что они без проблем используют RAID с SMP приблизительно год. Однако, на Апрель 98 (circa kernel 2.1.9x), были замечены следующие проблемы:
- Драйвер Adaptec AIC7xxx SCSI не безопасен при SMP (Общая заметка: Adaptec адаптеры имеют длинную, продолжительную и вобще ветвистую историю проблем. Даже если они выглядят более доступными, широко распространенными и дешевыми SCSI адаптерами, необходимо их избегать. Учитывая факторы потери времени, разочарования, и поврежденных данных, Adaptec окажется самой дорогостоящей ошибкой, которую Вы когда-либо делали. Вобщем, если у Вас проблемы с SMP на 2.1.88, попробуйте патч ftp://ftp.bero-online.ml.org/pub/linux/aic7xxx-5.0.7-linux21.tar.gz Я не уверен будет ли этот патч вставлен в более поздние ядра 2.1.x. Для дальнейшей информации, взгляните на почтовые архивы для Марта 1998 на http://www.linuxhq.com/lnxlists/linux-raid/lr_9803_01/ Как обычно, из-за быстро-меняющейся природы последних ядер 2.1.x серии, проблемы описанные в этом почтовом списке могут быть или могут не быть устранены в то время, как Вы читаете этот документ.)
- насколько известно IO-APIC с RAID-0 на SMP падает в 2.1.90
О: Miguel de Icaza < miguel@luthien.nuclecu.unam.mx> написал:Я изменил код ext2fs для способности поддерживать много устройств вместо обычного предположения - одно устройство на файловую систему.Итак, когда вы хотите расширить файловую систему, вы запускаете служебную программу, которая делает необходимые изменения на новом устройстве (вашем дополнительном разделе) и затем, Вы только говорите системе расширить файловую систему используя указанное устройство.
Вы можете расширить файловую систему новым устройством во время работы системы, без остановки (и когда есть свободное время, вы можете удалить удалить устройства из ext2 набора, снова без необходимости переходить в однопользовательский режим или любого подобного хака).
Вы можете получить патч для ядра 2.1.x с моей web страницы:
http://www.nuclecu.unam.mx/~miguel/ext2-volume
О: Сейчас (сентябрь 1997) - нет, нельзя без стирания всех данных. Утилита преобразования, позволяющая это делать еще не существует. Проблема в том, что структура и размещение массива RAID-5 зависит от количества дисков в массиве. Конечно, вы можете добавить диски заархивировав массив на ленте, удалив все данные, создав новый массив, и восстановив данные с ленты.
/dev/hdb
на /dev/hdc
?
Из-за глупых кабельно/корпусно/размерных дурацких решений, я создал
мой RAID набор на одном IDE контроллере (/dev/hda
и /dev/hdb
). Сейчас я усвоил несколько вещей, я хочу
перейти от /dev/hdb
к /dev/hdc
.
Что должно случиться, если я просто сменю /etc/mdtab
и
/etc/raid1.conf
файлы для отображения нового положенияe?
О: Для RAID-0/linear, нужно только осторожно указать диски в том-же порядке. Тикам образом, в выше приведенном примере, если оригинальная конфигурациято новая конфигурация *должна* быть
mdadd /dev/md0 /dev/hda /dev/hdbДля RAID-1/4/5, ''RAID число'' диска хранится в суперблоке RAID, и следовательно порядок в котором диски указаны не важен. RAID-0/linear не содержит суперблока из-за своего старого дизайна, и желания сохранить обратную совместимость со старым дизайном.
mdadd /dev/md0 /dev/hda /dev/hdc
О: Да. Michael из BizSystems нашел хитрый способ сделать это. Однако фактически, подобно всем манипуляциям с RAID массивами содержащими данные, это опасно и склонно к человеческим ошибкам. Перед началом сделайте резервную копию данных.Я сделаю следующие допущения: --------------------------------------------- диски изначально: hda - hdc raid1 разделы hda3 - hdc3 имя массива /dev/md0 новые hda - hdc - hdd raid5 разделы hda3 - hdc3 - hdd3 имя массива: /dev/md1 Вы должны заменить соответствующие номера дисков и разделов для Вашей конфигурации системы. Это справедливо для всех примеров конфигурационных файлов. -------------------------------------------- СДЕЛАЙТЕ РЕЗЕРВНУЮ КОПИЮ ПЕРЕД ТЕМ, КАК ЧТО-ЛИБО ДЕЛАТЬ 1) перекомпилируйте ядро для включения и raid1 и raid5 2) инсталируте новое ядро и проверьте наличие личных свойств raid 3) отключите избыточный раздел на массиве raid 1. Если это раздел смонтирован как root (как у меня), Вы должны быть осторожны. Перегрузите компьютер без запуска raid устройств или загрузитесь с восстановительной системы ( там должны иметься raid утилиты ) запустите не избыточный raid1 mdadd -r -p1 /dev/md0 /dev/hda3 4) сконфигурируйте raid5 но с таким конфигурационным файлом, заметьте, что здест нет записи hda3, а hdc3 повторяется. Это необходимо, так как raid утилиты не хотят, чтобы Вы это делали. ------------------------------- # конфигурация raid-5 raiddev /dev/md1 raid-level 5 nr-raid-disks 3 chunk-size 32 # Алгоритм размещения паритета parity-algorithm left-symmetric # Резервные диски для горячей реконструкции nr-spare-disks 0 device /dev/hdc3 raid-disk 0 device /dev/hdc3 raid-disk 1 device /dev/hdd3 raid-disk 2 --------------------------------------- mkraid /etc/raid5.conf 5) активируйте массив raid5 в не избыточном режиме mdadd -r -p5 -c32k /dev/md1 /dev/hdc3 /dev/hdd3 6) создайте файловую систему на массиве mke2fs -b {blocksize} /dev/md1 рекомендуемый размер блока 4096, в отличие от стандартных 1024. Это увеличит использование памяти для процедур kernel raid и сделает размер блока равным размеру страницы. Так как у меня много небольших файлов в моей системе, я использую компромиссное значение 2048. 7) смонтируйте где-то два устройства raid mount -t ext2 /dev/md0 mnt0 mount -t ext2 /dev/md1 mnt1 8) переместите данные cp -a mnt0 mnt1 9) проверьте идентичность данных 10) остановите оба массива 11) откорректируйте информацию в файле raid5.conf замените /dev/md1 на /dev/md0 замените первый диск для чтения /dev/hda3 12) обновите новый массив до полного избыточного состояния (ЭТО РАЗРУШИТ ОСТАВШУЮСЯ НА raid1 ИНФОРМАЦИЮ) ckraid --fix /etc/raid5.conf
/dev/sda2
и
/dev/sda3
. Устройство намного медленнее, чем отдельный раздел.
md - это куча мусора?
О: Для запуска устройства RAID-0 на полную скорость, у Вас должны разделы на разных дисках. Кроме того, помещая две половины зеркала на один диск Вы не получаете защиты от отказа диска.
О: Не очевидно, что RAID-0 даст большую производительность; фактически, в некоторых случаях, он может сделать хуже. Файловая система ext2fs распределяет фалы по всему разделу, и пытается хранить все блоки файла вместе, в основном в целях избежания фрагментации. Таким образом, ext2fs ведет себя "как если бы" stripe-ы были (переменного размера) размером с файл. Если есть несколько дисков соединяются в один линейный RAID, это приведет к статистическому распределению файлов на оба диска. Таким образом, по крайней мере для ext2fs, линейный RAID работает во многом подобно RAID-0 с большим размером stripe. Наоборот, RAID-0 с маленьким размером stripe при одновременном доступе к нескольким большим файлам может вызвать излишнюю дисковую активность, приводящую к снижению производительности.Во многих случаях, RAID-0 может явно выигрывать. Например, представьте большой файл базы данных. Так как ext2fs пытается объединить вместе все блоки файла, велики шансы, что она заполнит только одно устройство при использовании линейного RAID, но будет разделять на много кусочков, при использовании RAID-0. Теперь представим несколько нитей (ядра) пытающихся получить произвольный доступ к базе данных. При линейном RAID, весь доступ пойдет на один диск, что не так эффективно, как параллельный доступ, создаваемый RAID-0.
О: Для понимания этого, давайте рассмотрим пример с тремя разделами; 50Мб, 90Мб и 125Мб. Назовем D0 50Мб диск, D1 90Мб диск и D2 125Мб диск. Когда Вы запускаете устройство, драйвер вычисляет 'strip zones'. В этом случае, он найдет 3 зоны, определенные подобно этому:Z0 : (D0/D1/D2) 3 x 50 = 150MB всего в этой зоне Z1 : (D1/D2) 2 x 40 = 80MB всего в этой зоне Z2 : (D2) 125-50-40 = 35MB всего в этой зоне.Вы можете видеть, что общий размер зон - размер виртуального устройства, но, в зависимости от зоны, striping различается. Z2 особенно неэффективна,так как там только один диск. Так какext2fs
и большинство других файловых систем Unix распределяют файлы по всему диску, У Вас 35/265 = 13% шансов, что заполнение закончится на Z2, и не получится никаких преимуществ RAID-0. (DOS пытается заполнить диск от начала до конца, и таким образом, старые файлы должны храниться на Z0. Однако, эта стратегия приводит к резкой фрагментации файловой системы, это причина того, что никто кроме DOS так не делает.)
md
.
Это даст значительное увеличение производительности?
Производительность в самом деле заметна?
О: Ответ зависит от используемой Вами конфигурации.
- Производительность Linux MD RAID-0 и линейного RAID:
Если система слишком загружена вводом-выводом, статистически, часть пойдет на один диск, а часть на другой. Таким образом, производительность увеличится по сравнению с одиночным диском. Фактическое увеличение сильно зависит от текущих данных, размера stripe, и других факторов. В системе с низким вводом-выводом, производительность эквивалентна производительности одного диска.
- Производительность чтения Linux MD RAID-1 (зеркализация):
MD реализует балансировку чтения. То есть, код RAID-1 будет поочередно выбирать каждый из дисков (двух или более) зеркала, производя поочередное чтение с каждого диска. В случае небольшого ввода-вывода, это вовсе не изменит производительность: Вы будете ждать завершения чтения одного диска. Но, с двумя дисками и при высокой загрузке вводом-выводом, возможно получить практически удвоенную производительность, так как опреации чтения будут выполняться с каждого диска одновременно. Для N дисков в зеркале, это может увеличить производительность в N раз.
- Производительность записи Linux MD RAID-1 (зеркализация):
Нужно ждать, пока запишутся данные на все диски зеркала. Это из-за того, что копия данных должна быть записана на каждый из дисков зеркала. Таким образом, производительность будет приблизительно эквивалентна производительности записи на один диск.
- Производительность чтения Linux MD RAID-4/5:
Статистически, данный блок может быть на любом из дисков, и, таким образом, производительность чтения RAID-4/5 во многом подобна RAID-0. Она зависит от данных, размера stripe, и приложения. Она не будет так хороша, как производительность чтения в зеркальном массиве.
- Производительность записи Linux MD RAID-4/5:
Она, в общем, должна быть предположительно меньше, чем у одного диска. Это из-за того, что на один диск должна быть записана информация о паритете, в то время как на другой - данные. Однако, в случае вычисления нового паритета, старый паритет и старые данные должны быть сначала считаны. Старые данные, новые данные и старый паритет должны быть объединены операцией XOR для определения новой информации о паритете: это требует циклов процессора и дополнительного доступа к дискам.
О: Ваша цель максимальная пропускная способность, или минимальные время доступа? Нет простого ответа, так как на производительность влияет много факторов:
- операционная система - будет один процесс/нить, выполнять доступ к диску или несколько?
- приложение - выполняется доступ к данным последовательно или с произвольно?
- файловая система - группируются файлы или рассредотачиваются ( ext2fs группирует блоки файлов, и рассредотачивает сами файлы)
- драйвер диска - количество блоков упреждающего чтения (это настраиваемый параметр)
- CEC аппаратура - один дисковый контроллер или несколько?
- контроллер жесткого диска - может ли выполнять множество запросов или нет? Имеет ли кеш?
- Жесткий дик - размер памяти кеш-буфера -- Достаточен ли будет для обработки размеров записей и желаемой частоты обращений?
- физическая организация - количество блоков в цилиндре -- доступ к блокам на различных цилиндрах приведет к пере-позиционированию головки.
О: Так как RAID-5 создает загрузку ввода-вывода, которая одинаково распределена на несколько устройств, лучшая производительность будет получена, когда RAID набор сбалансирован использованием идентичных дисков, идентичных контроллеров, и одинаковым (небольшим) числом дисков на каждом контроллере. Однако заметьте, что использование идентичных компонент увеличивает возможность множества одновременных отказов, например из-за внезапного толчка или урона, перегрева, или скачка электричества во время грозы. Смешивание марок и моделей помогает минимизировать этот риск.
О: Если используется текущая (Ноябрь 1997) RAID-4/5 реализация, строго рекомендуется создавать файловую систему сmke2fs -b 4096
вместо 1024 байтов, по умолчанию.Это потому, что текущая реализация RAID-5 резервирует одну 4Кб страницу памяти на дисковый блок; если размер блока диска будет 1Кб, тогда 75% памяти, которую резервирует RAID-5 для осуществления ввода-вывода, не используется. Если размер блока диска совпадает с размером страницы памяти, тогда драйвер (потенциально) может использовать всю страницу. Итак, для файловой системы с размером блока 4096 в отличие от системы с размером блока 1024, драйвер RAID будет потенциально ставить в очередь 4 раза производя ввод-вывод с драйверам нижнего уровня без расходования дополнительной памяти.
Заметка: пометки выше НЕ применимы драйверу программного RAID-0/1/линейного.
Заметка: высказывание о 4Кб странице памяти применимо к архитектуре Intel x86. Размер страницы на Alpha, Sparc, и других процессорах различается; я думаю на Alpha/Sparc он 8Кб (????). Скорректируйте соответственно указанное значение.
Заметьте: если на Вашей файловой системе много небольших файлов (файлов размером менее 10Кб), значительная чaсть дискового пространства может быть потеряна. Это из-за того, что файловая система распределяет дисковое пространство частями размером в блок. Выделение больших блоков маленьким файлам приводит к потерям дискового пространства: таким образом, Вы можете поставить небольшой размер блока, получить большую эффективность использования емкости, и не беспокоиться о "потерянной" памяти из-за несоответствия размера блока размеру страницы памяти.
Заметка: большинство ''типичных'' систем не содержат много маленьких файлов. То есть, хотя могут быть тысячи небольших файлов, это будет приводить к потере только от 10 до 100Мб, что, возможно, приемлимо, учитывая производительность, на много-гигабайтном диске.
Однако, для серверов новостей, может быть десятки и сотни тысяч небольших файлов. В этом случае, меньший размер блока, и таким образом сохраненная емкость, может быть более важной, чем более эффективный ввод-вывод.
Заметка: существует экспериментальная файловая система для Linux, которая пакует маленькие фалы и группы файлов в один блок. Она имеет большую производительность, если средний размер файла намного меньше размера блока.
Заметка: Будущие версии могут реализовать схемы, которые лишат смысла вышеприведенную дискуссию. Однако, это сложно реализовать, так как динамическое распределение на ходу может привести к мертвым-блокировкам (dead-locks); текущая реализация выполняет статическое предварительное выделение.
О: Размер куска - количество смежных данных на виртуальном устройстве, которы смежные и на физическом устройстве. В этом HOWTO, "кусок" и "stripe" подразумевают одно и то же: что часто называется "stripe" в другой документации по RAID, в MD man страницах называется "кусок" ("chunk"). Stripe-ы или куски применимы только к RAID 0, 4 и 5, так как stripe-ы не используются в зеркализации (RAID-1) и простом соединении (линейный RAID). Размеры stripe влияют на задержку, пропускную способность, и конкуренцию между отдельными операциями (возможность одновременного обслуживания перекрывающихся запросов ввода-вывода).Предполагая использование файловой системы ext2fs, и текущих правил ядра для упреждающего чтения, большие размеры stripe почти всегда лучше, чем маленькие размеры, и размеры stripe от почти четырех до полного цилиндра диска наилучшие. Чтобы понять это требование, рассмотрим эффективность больших stripe на маленьких файлах, и маленьких stripe на больших файлах. Размер stripe не влияет на производительность чтения на маленьких файлах: для массива из N дисков, файл имеет 1/N вероятность попасть целиком в один stripe на любой диск. Таким образом, и задержка и производительность чтения сравнима с чтением одного диска. Предположим, что маленькие файлы статистически хорошо распределяются по файловой системе, (и, на файловой системе ext2fs, они дожны), грубо в N раз более упорядочены, конкурентные чтения должны быть возможны без значительных коллизий между ними. Наоборот, если используются очень маленького размера stripe-ы, и последовательно читается большой файл, то чтение будет выдаваться всем дискам массива. Для чтения одного большого файла, задержка будет почти двойная, так как увеличивается вероятность нахождения блока в трех четвертях оборота диска или далее. Однако заметьте аргумент: пропускная способность может увеличиться почти в N раз для чтения одного большого файла, так как N дисков могут читать одновременно (то есть, если используется упреждающее чтение, то все диски остаются активными). Но есть другй контр-аргумент: если все диски уже заняты чтением файла, то попытки одновременного чтения второго или третьего файла приведут к значительной борьбе, разрушив производительность, так как алгоритмы управления диском будут двигать головками вдоль пластины. Таким образом, большие stripe-ы будут почти всегда приводить к большей производительности. Единственное исключение - случай, при использовании хорошего алгоритма упреждающего чтения, где один поток в одно время читает один большой файл, и он требует наивысшей возможной производительности. В этом случае желательны небольшие stripe-ы.
Заметьте, что этот HOWTO ранее рекомендовал небольшие размеры stripe-ов для спула новостей или других систем с множеством мелких файлов. Это плохой совет, и вот почему: спулы новостей содержат не только много маленьких файлов, но также и большие суммарные файлы, также как и большие каталоги. Если суммарный файл более одного stripe, его чтение задействует много дисков, замедляя все, так как каждый диск выполняют позиционирование. Подобным образом, текущая файловая система ext2fs просматривает каталоги в линейной, последовательной манере. Таким образом, чтобы найти данный файл или inode, в средней части будет прочитана половина каталога. Если этот каталог простирается на несколько stripe-ов (несколько дисков), чтение каталога (такое как при команде ls) будет очень медленным. Спасибо Steven A. Reisman < sar@pressenter.com> за эту поправку. Steve также добавил следующее:
Я обнаружил, что использование 256k stripe дает намного лучшую производительность. Я подозреваю, что оптимальный размер должен быть размером с цилиндр диска (или, может быть размером с кеш диска). Однако, современные диски содержат зоны с различным количеством секторов (и размер кеша варьируется в зависимости от модели диска). Невозможно гарантировать, что stripe-ы не будут пересекать границу цилиндра.
Утилиты позволяют задавать размер в Кбайтах. Вы можете указать его величиной с размер страницы Вашего CPU (4Кб на x86).
mke2fs
:
mke2fs -b 4096 -R stride=nnn ...Кокое должно быть значение nnn?
О: Флаг-R stride
используется, чтобы указать файловой системе размер RAID stripe-ов. Так как только RAID-0,4 и 5 использует stripe-ы, а RAID-1 (зеркализация) и линейный RAID не используют, этот флаг применим только к RAID-0,4,5. Знание размера stripe-а позволяетmke2fs
выделять блок и битовый поля inode так, что они не все хранятся на одном физическом устройстве. Неизвестный помощник написал:Прошлой весной я заметил, что один диск из пары всегда больше занят вводом-выводом, и отследил - это из-за этих блоков мета-данных. Ted добавил опциюДля файловой системы с блоком 4Кб, с размером stripe в 256Кб, нужно использовать-R stride=
, в мой вариант ответа и предложение обходного варианта.-R stride=64
.Если Вы не доверяете флагу
-R
, Вы можете получить подобный эффект другим путем. Steven A. Reisman < sar@pressenter.com> написал:Другое соображение - файловая система используемая на устройстве RAID-0. Файловая система выделяет ext2 8192 блоков в группу. У каждой группы есть свой набор inode-ов. Если есть 2, 4 или 8 дисков, эти inode скапливаются на первом диске. Я распределили inode-ы по всем дискам, указав mke2fs выделять только 7932 блоков на группу.Некоторые страницы mke2fs не описывают флаг[-g blocks-per-group]
используемый при этой операции.
md
,
так, чтобы все автоматически стартовало в процессе загрузки?
О: Rod Wilkens < rwilkens@border.net> написал:Вот что я сделал: вставил ``Для raid-5, Вы должны посмотреть на код возвратаmdadd -ar
'' в ``/etc/rc.d/rc.sysinit
'' прямо после загрузки модулей, и перед проверкой дисков ``fsck
''. Таким образом, Вы можете вставить устройство ``/dev/md?
'' в ``/etc/fstab
''. Затем вставить ``mdstop -a
'' прямо после де-монтирования всех дисков ``umount -a
'', в файле ``/etc/rc.d/init.d/halt
''.mdadd
, и если он ошибочен, сделатьдля восстановления любых повреждений.
ckraid --fix /etc/raid5.conf
md0
? Это для сервера новостей,
и у меня есть 9 дисков... Нужно ли говорить, что мне нужно больше, чем
два. Это возможно?
О: Да. (описать как это сделать)
О: Обычно, аппаратный RAID считается производительнее программного RAID, так как аппаратные контроллеры, часто содержат большой кеш, и могут лучше выполнять планирование параллельных операций записи. Однако, интегрированный программный RAID может (и дает) определенное преимущество при реализации в операционной системе.Например, ... мммм. Мы обходим молчанием темное описание кеширования реконструированных блоков в буферный кеш ...
На дуальных PPro SMP системах, мне рассказывали, что производительность программного RAID превышала производительность плат аппаратного RAID известных производителей с кратностью от 2 до 5 раз.
Программный RAID также очень интересная опция для избыточных серверных систем высокой готовности. В такой конфигурации, два CPU подсоединены к одному набору SCSI дисков. Если один север рушится или отказывается отвечать, то другой сервер может
mdadd
,mdrun
иmount
массив программного RAID, и продолжить работу. Этот режим работы не всегда возможен с многими аппаратными RAID контроллерами, из-за состояний конфигурации которое аппаратные контроллеры могут поддерживать.
О: Нет, по крайней мере до смены старшего номера версии. MD версия x.y.z состоит из трех подверсий:x: старший номер версии. y: младший номер версии. z: номер уровня патча.Версия x1.y1.z1 драйвера RAID поддерживает RAID массив с версией x2.y2.z2 в случае (x1 == x2) и (y1 >= y2). Различные номера патчей (z) для тех же (x.y) версий разработаны по большей мере совместимыми.Младший номер версии увеличивается всякий раз, когда код RAID массива изменяется таким образом, что он несовместим с старыми версиями драйвера. Новые версии драйвера должны поддерживать совместимость с старыми RAID массивами.
Старший номер версии увеличивается, если более не имеет смысла поддерживать старые RAID массивы в новом коде ядра.
Для RAID-1, не правдоподобно, чтобы ни дисковый уровень ни структура суперблока изменились в ближайшее время. Скорее всего любые оптимизации и новые свойства (реконструкция, многопоточные утилиты, горячая замена, и т.п.) не отразятся на физическом размещении.
mdstop /dev/md0
говорит, что устройство занято.
О: Есть процесс, который держит открытым файл на/dev/md0
, или/dev/md0
все еще смонтирован. Завершите процесс илиumount /dev/md0
.
О: Существует новая утилита, называемаяiotrace
в каталогеlinux/iotrace
. Она читает/proc/io-trace
и анализирует/строит графики из его вывода. Если Вы чувствуете, что блочная производительность Вашей системы слишком низкая, просто посмотрите на вывод iotrace.
SPEED_LIMIT
равное 1024Кб/сек. Что это значит?
Это ограничивает производительность?
О:SPEED_LIMIT
используется для ограничения скорости реконструкции RAID при автоматической реконструкции. По существу, автоматическая реконструкция позволяет Вамe2fsck
иmount
сразу после неправильного завершения, без предварительного запускаckraid
. Автоматическая реконструкция также используется после замены отказавшего диска.Для избежания подавления системы при реконструкции, нить реконструкции контролирует скорость реконструкции и уменьшает ее, если она слишком высока. Предел 1Мб/сек был выбран как разумная норма, которая позволяет реконструкции завершаться умеренно быстро, при создании только небольшой нагрузки на систему, не мешая другим процессам.
О: Синхронизация шпинделей используется для поддержания вращения нескольких дисков с одинаковой скоростью, так что пластины дисков всегда точно выровнены. Это используется некоторыми аппаратными контроллерами для лучшей организации записи на диски. Однако, в программном RAID, эта информация не используется, и синхронизация шпинделей может даже снизить производительность.
О: Leonard N. Zubkoff отвечает: Да она действительно быстра, но Вам не нужно использовать MD для получения striped подкачки. Ядро автоматически разделяет подкачку по нескольким пространствам подкачки с одинаковым приоритетом. Например, следующие записи из/etc/fstab
разделяют подкачку по пяти дискам в три группы:/dev/sdg1 swap swap pri=3 /dev/sdk1 swap swap pri=3 /dev/sdd1 swap swap pri=3 /dev/sdh1 swap swap pri=3 /dev/sdl1 swap swap pri=3 /dev/sdg2 swap swap pri=2 /dev/sdk2 swap swap pri=2 /dev/sdd2 swap swap pri=2 /dev/sdh2 swap swap pri=2 /dev/sdl2 swap swap pri=2 /dev/sdg3 swap swap pri=1 /dev/sdk3 swap swap pri=1 /dev/sdd3 swap swap pri=1 /dev/sdh3 swap swap pri=1 /dev/sdl3 swap swap pri=1
О: Во многих случаях, ответ - да. Используя несколько контроллеров для параллельного доступа к дискам увеличивает производительность. Однако, действительное приращение фактически зависит от вашей конфигурации. Например, как сообщили (Vaughan Pratt, Январь 98) что один 4.3Гб Cheetah подключенный к Adaptec 2940UW может дать до 14Мб/сек (без использования RAID). Установив два диска на один контроллер, и используя конфигурацию RAID-0 привело к увеличению производительности до 27 Мб/сек.Заметьте,что 2940UW контроллер - "Ultra-Wide" SCSI контроллер, теоретически способный к пакетным передачам 40Мб/сек, так что указанные измерения не неожиданность. Однако, более медленный контроллер подключенный к двум быстрым дискам будет бутылочным горлышком. Также заметьте, что большинство внешних SCSI подключений (таких как секции с лотками горячей замены) не могут работать на 40Мб/сек, из-за проблем с кабелями и электрических шумов.
Если Вы разрабатываете систему с несколькими контроллерами, помните, что большинство дисков и контроллеров в среднем работает на 70-85% их максимальной скорости.
Также заметьте, что использование одного контроллера на диск может, по всей вероятности, уменьшить простой системы из-за отказа контроллера или кабеля (теоретически -- только в случае правильной обработки драйвером отказа контроллера. Не все драйвера SCSI представляются способными обрабатывать эту ситуацию без паники или иных блокировок).
О: Высокая готовность дело трудное и дорогостоящее. Тяжело Вам пробовать сделать систему отказоустойчивой, тяжело и еще более дорого ее получить. Следующие подсказки, советы, идеи и не проверенные слухи могут помочь Вам в этом.
- IDE диски могут отказать так, что отказавший диск на на IDE шлейфе будет препятствовать работе хорошего диска на том же кабеле, таким образом это выглядит как отказ двух дисков. Так как RAID не защищает от отказа двух дисков, нужно либо подключать по одному диску на IDE шлейф, или, если два диска, то они должны относиться к различным RAID томам.
- SCSI диски могут отказать так, что отказавший диск на SCSI цепочке может мешать работе любого устройства в цепочке. Режим отказа приводит к замыканию общего (разделяемого) контакта готовности устройства; так как этот контакт общий, не может быть выполнен никакой арбитраж, пока замыкание не устранено. Таким образом, два диска в одной цепочке SCSI не должны относиться к одному RAID массиву.
- Подобные замечания применимы к контроллерам дисков. Не подгружайте каналы к одному контроллеру; используйте несколько контроллеров.
- Не используйте все диски одного производителя или модели. Не так уж редко сильная гроза отключала два или более диска. (Да, мы все используем подавители бросков напряжения, но они вовсе не совершенны). Другими убийцами являются жара и плохое охлаждение диска. Дешевые диски часто работают перегретыми. Использование различных марок дисков и контроллеров уменьшает вероятность того, что что бы то ни было отключит один диск (перегрев, физический удар, вибрация, бросок электричества) и одновременно повредит другие диски.
- Для защиты от отказа контроллера или процессора, можно построить окружение SCSI диска с "двумя хвостами", т.е. подсоединенным к двум компьютерам. Один компьютер монтирует файловую систему в режиме чтение-запись, а другой монтирует ее в как только-чтение, и действует как горячий резерв. Когда горячий резерв, определяет, что главный компьютер отказал (с помощью watchdog), он выключает питание главного (для гарантии, что он в самом деле не работает), и затем выполняет fsck и перемонтируется в режиме чтение-запись. Если кто-либо запустит это, дайте мне знать.
- Всегда используйте UPS, и выполняйте правильное завершение. Хотя неправильное завершение может не повредить диски, запуск ckraid даже на маленьких массивах мучительно медленный. Вы должны избегать запуска ckraid насколько это возможно. Или Вы можете покопаться в ядре и запустить отлаживаемый код горячей реконструкции ...
- SCSI кабеля, как известно, очень темпераментные создания, и склонны создавать всяческие проблемы. Используйте кабеля наивысшего качества, из тех которые можно купить. Используйте так называемый bubble-wrap, чтобы убедиться, что ленточные кабеля не слишком близко расположены и не влияют друг на друга. Тщательно соблюдайте ограничения на длину.
- Взгляните на SSI (Serial Storage Architecture). Хотя она несколько дорога, по слухам менее склонна к ошибочным режимам, чем SCSI.
/dev/sdaxx
, которое мы можем использовать для оценки
производительности на raid устройствах??
Существует ли GUI утилита для наблюдения дисковой производительности??
Bradley Ward Allen < ulmo@Q.Net> написал:
Идеи включают:(Итак в общем, все, что я могу предложить - избавиться от утилит и поместить их в ядро; так я это вижу, это - файловая система, а не игрушка.)
- Параметры загрузки для указания ядру какие устройства - MD устройства (без ``
mdadd
'')- Сделать MD прозрачным для ``
mount
''/``umount
'' без использования ``mdrun
'' и ``mdstop
''- Интегрировать ``
ckraid
'' в ядро, и запускать его при необходимости
- Работа с массивами, которые могут свободно пережить одновременный, или в разное время, отказ N дисков, где N - целое > 0 устанавливаемое администратором
- Лучшая обработка застывания ядра, отключения питания, и других внезапных завершений
- Не отключать целый диск, если только часть его отказала, если ошибки секторов занимают менее 50% доступа при 20 попытках различных обращений, то просто продолжаем игнорируя эти сектора этого отдельного диска.
- Плохие сектора:
- Механизм для сохранения плохих секторов в другом месте диска.
- Если существует обобщенный механизм для маркировки деградировавших плохих блоков, которые вышестоящие уровни файловой системы могут распознать, использовать его. Программный он или нет.
- Возможен альтернативный механизм извещения вышестоящего уровня, что размер диска более маленький, прямо выравнивая для вышестоящего уровня сдвигать части исключенных областей диска. Это может помочь с деградированными блоками.
- Недостаток вышеуказанных идей, сохранять маленькое (устанавливаемое администратором) количество пространства для резервирования плохих блоков (равномерно распределенное по диску?), и использовать его (как можно более близко) вместо плохих блоков, при их появлении. Конечно, это не эффективно. Более того, ядро должно вести log каждый раз при нахождении RAID массивом плохого сектора и делать это с ``
crit
'' уровнем предупреждения, просто дать понять администратору, что его диск содержит пылинку в себе (или соприкосновение головки с пластиной).- Программно-переключаемые диски:
- ``запретить этот диск''
должно блокировать, пока ядро не завершит проверки наличия данных для сбрасывания на диск при завершении (таких как завершение XOR/ECC/других коррекций ошибок), затем освободить диск от использования (чтобы его можно было вынуть и т.п.);
- ``разрешить этот диск''
должно, при соответствии,
mkraid
новый диск и затем запустить его для использования для ECC или любых операций, расширяя RAID5 массив;- ``изменить размер массива''
должно переопределять общее чило дисков и чило избыточных дисков, и результатом должно быть изменение размера массива; без потери данных, хорошо было бы сделать это должным образом, но я потратил много времени пытаясь описать, как это должно делаться; в любом случае, необходим режим, где массив будет блокироваться ( возможно, на несколько часов (ядро должно заносить что-то в log каждые десять секунд));
- ``разрешение диска при сохранении данных''
это должно сохранить данные на диске как есть и перемещать их, как положено, на систему RAID5, так что ужасающее сохранение и восстановление не должно происходить каждый раз когда кто-то ``поднимает''систему RAID5 (вместо этого, может быть проще сохранять только один раздел вместо двух, он может поместится на первый как сжатый gzip-ом файл);
- ``пере-разрешение диска''
должно быть операторской подсказкой операционной системе попробовать ранее отказавший диск (это должен быть, как я думаю, просто вызов запрещения, а потом разрешения).
Прочие идеи не из сети:
- finalrd аналог для initrd, для упрощения raid на корневой файловой системе.
- режим только-чтение для raid, чтобы упростить вышесказанное
- Помечать RAID том как чистый всякий раз когда не сделано "частичной записи". -- То есть, всякий раз нет транзакций записи, котрые были зафиксированы на одном диске, но все еще не завершены на другом диске. Добавить период "неактивности записи" (для избежания частого позиционирования головок на суперблок RAID при относительной занятости RAID тома).