Миграция с RAID1 на RAID5 в mdadm без потери данных

    Допустим есть у нас под Linux софтварный RAID1 собранный с помощью mdadm:
    # cat /proc/mdstat
    Personalities : [raid1]
    md0 : active raid1 sdb[1] sda[0]
          8387572 blocks super 1.2 [2/2] [UU]

    И появился у нас еще один винчестер который хотелось бы воткнуть в данную машину расширив доступное дисковое пространство не потеряв при этом в отказоустойчивости т.е. перейти с RAID1 на RAID5.

    Для этого останавливаем имеющийся массив командой:
    # mdadm --stop /dev/md0
    Если вы загружаетесь с этого рейда то остановить его разумеется не получится и необходимо будет использовать какой-нибудь LiveCD…
    Затем перезаписываем метаданные старого RAID1 создав поверх него RAID5 из тех же двух дисков:
    # mdadm --create /dev/md0 --level 5 --raid-devices 2 /dev/sda /dev/sdb
    Программа ругнется что эти диски уже участвуют в RAID1, но мы смело продолжим создание:
    mdadm: /dev/sda appears to be part of a raid array:
        level=raid1 devices=2 ctime=Wed Aug  4 08:28:45 2010
    mdadm: /dev/sdb appears to be part of a raid array:
        level=raid1 devices=2 ctime=Wed Aug  4 08:28:45 2010
    Continue creating array? y
    mdadm: Defaulting to version 1.2 metadata
    mdadm: array /dev/md0 started.

    Подождем немного пока пройдет ребилд новосозданного рейда:
    md0 : active raid5 sdb[2] sda[0]
          8387072 blocks super 1.2 level 5, 512k chunk, algorithm 2 [2/1] [U_]
          [>....................]  recovery =  4.2% (355076/8387072) finish=2.2min speed=59179K/sec
    

    Получится по сути тот же RAID1.

    После окончания процесса добавим в рейд наш новый диск (как spare):
    # mdadm --add /dev/md0 /dev/sdc
    И расширим рейд до трех активных дисков:
    # mdadm --grow /dev/md0 --raid-disks=3
    Ждем пока не закончится reshape рейда:
    md0 : active raid5 sdc[3] sdb[2] sda[0]
          8387072 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
          [>....................]  reshape =  2.5% (212480/8387072) finish=9.6min speed=14165K/sec

    После этого расширим пересозданный дисковый раздел проверив его на ошибки перед этим (пример для ext2/3):
    # e2fsck -f /dev/md0
    # resize2fs -p /dev/md0

    Также не забываем обновить конфиг:
    # mdadm --examine --scan >> /etc/mdadm.conf
    и при необходимости пересобрать initrd.

    Если в процессе этих операций не произойдет никаких сбоев то все данные которые были на RAID1 перенесутся на RAID5 без каких либо потерь. Проверено мной лично! Правда на виртуалке… ;)
    Метки:
    Поделиться публикацией
    Комментарии 51
    • +3
      для меня это пример чисто хабровой статьи :) Спасибо!
      • +1
        Да ну. Вот куда уехать из Москвы от дыма, или как начать уже работать, наконец, вместо того, что бы постоянно читать блог «Учись работать» на/вместо работы, это да.
    • 0
      Шикарно!

      У меня сейчас RAID 5 на четырех 400-гиговых дисках. Планировал переходить на двухтерабайтники, но меня останавливала необходимость покупать сразу три на 15 тыр.

      Благодаря вашей заметке могу поначалу ограничиться двумя. Спасибо!

      PS Самую малость не хватает кармы вас лично поплюсовать. :)
      • +1
        кстати RAID5 можно начать и с одного диска:
        # mdadm --create /dev/md0 --level 5 --raid-devices 2 /dev/sda missing
        т.е. один диск объявляется отсутствующим и рейд будет degraded
        израт конечно :) но если расчитывать на рост в будущем можно и так…
      • +3
        Как раз собирался втыкать третий диск. Спасибо!
        • +1
          Стоит не забывать недостатки 5го рейда, а статья — хороша, спасибо.

          «Недостатки RAID 5 проявляются при выходе из строя одного из дисков — весь том переходит в критический режим (degrade), все операции записи и чтения сопровождаются дополнительными манипуляциями, резко падает производительность. При этом уровень надежности снижается до надежности RAID-0 с соответствующим количеством дисков (то есть в n раз ниже надежности одиночного диска). Если до полного восстановления массива произойдет выход из строя, или возникнет невосстановимая ошибка чтения хотя бы на еще одном диске, то массив разрушается, и данные на нем восстановлению обычными методами не подлежат.»
          ru.wikipedia.org/wiki/RAID
          • +1
            raid5 еще на запись ооочень медленный
            • 0
              я бы не сказал что падение производительности так уж велико, а при увеличении кол-ва шпинделей (более трех-четырех) на нормальном железе может и к уровню RAID0 приблизится :)
              • 0
                не приблизится, всегда будет медленнее, так как запись блока с контрольными суммами на каждый n-1 блок никто не отменял.
                • 0
                  ну я не сказал что вплотную приблизится, но из-за параллелизации обращения к винтам скорость работы должна увеличится
                  • 0
                    увы, у нас присутствует такой фактор как вычисление блока контрольных сумм. Чем больше количество дисков в raid5 тем больше объем вычислений. Например такой вполне современный недорогой контроллер Promise SuperTrack EX8650 считает эту сумму медленнее чем скорость записи на современный диск. Соответственно скорость записи raid5 будет гораздо медленнее raid0, Да и текущие софтварные реализации тоже считают контрольную сумму относительно медленно.
                    • 0
                      думаю на каком нибудь Ксeoне это практически не будет чувствоваться…
              • +1
                Вы утрируете, заметно будет при работе с СУБД, но эта проблема решается увеличением количества дисков + SAS 15k. Под СУБД хорошо пойдет 01, но там на избыточность слишком большие расходы.
                • 0
                  я не утрирую, заметно будет всегда при количестве клиентов больше одного. Если один читает а другой пишет raid5 становится гигантской проблемой. Виной тут именно медленная запись.
                  • 0
                    С каких пор медленная запись является причиной проблем с чтением? ;)
                    Если серьезно то для раздачи статики если записи почти нет, разница с более быстрыми рейдами будет не большая.
                    Так что не надо быть категоричным и выбирать тип рейда в зависимости от задач, а не личных предпочтений…
                    • +1
                      Ну может у человека рейд перестраивается каждый день, тогда он действительно начинает работать оооочень медленно :)
                      • 0
                        если бы у вас винт мог одновременно и читать и писать независимо, то конечно никаких проблем бы не было. Но увы, при записи скорость чтения падает значительно. Так вот на raid5 это просто катастрофично.
                      • +1
                        В данный момент RAID5 12 дисков(1 spare) контроллер 3Ware 9690SA-4i4e вполне себе нормально держат нагрузку в 4,5 млн обращений, это не считая запросов с внешних хостов. Хранилище картинок и видео.
                        • 0
                          сколько при этом записей на эти 4.5 миллионов? :)
                          • 0
                            4,5 млн чтение, около 3х млн запись.
                            • 0
                              а за какой период времени 4.5/3 миллионов? :)
                              • 0
                                так когда же начнутся проблемы?
                          • 0
                            www.fcenter.ru/online.shtml?articles/hardware/hdd/25562
                            чудес не бывает, raid5/6 как обычно проигрывает raid0
                            • +1
                              о, внезапно, Капитан. Это ужасная правда открыла глаза мне на этот мир, розовые очки разрушены, я больше не смогу жить с мыслью, что массив с избыточностью медленнее, чем обычный страйп. Винить себя в моем суициде придется Вам.
                              • 0
                                однако читайте с чего все началось, человек утверждал как раз что raid5 к страйпу приближается по скорости, можете спокойно кушать свою шляпу.
                                • 0
                                  В mdadm если массив не деградировавший, то контрольные суммы не учитываются при операциях чтения и скорость считывания данных с кучи параллельно работающих винтов вполне может приблизится к страйпу на таком же железе ;)
                                  Или вы тролль или узко мыслите…
                                  • –1
                                    мда… чукча не читатель чукча писатель…

                                    ещё раз замечу с чего началось (достаточно посмотреть по ветке выше):

                                    я написал " raid5 еще на запись ооочень медленный "

                                    xalcountix ответил: " я бы не сказал что падение производительности так уж велико, а при увеличении кол-ва шпинделей (более трех-четырех) на нормальном железе может и к уровню RAID0 приблизится :) "

                                    • 0
                                      вообще разговор зашел насчет того что в некоторых случаях производительность raid5 вполне удовлетворительная и даже есть живые примеры тому, но судя по тому что для вас априори данный тип рейда медленный в любых случаях по определению не вижу смысла продолжать данную дискуссию…
                                      • –1
                                        вообщето вы отвечали на мой комментарий про ужасы raid5 на запись, причем в очень странной форме, что якобы он в этом ( в скорости на запись) приближается к raid0. Конечно для вас теперь не имеет смысла этот разговор, так как оплошав можно только наплевать в карму но свою ошибочность не признать.
                                        • 0
                                          На тот комментарий я отвечал не от фонаря… У меня на работе есть RAID5 массив на 14 SATA дисков, контроллер Areca, тока что специально протестировал:
                                          — последовательное чтение 410 МБ/с
                                          — запись 278 МБ/с (мегабайт!)
                                          Как по мне достойная скорость работы для большинства приложений, тут гигабитный интерфейс скорее будет узким горлышком, а не RAID5. Никаких ваших «ужасов» я не вижу…
                                          Так что мои слова что большое количество шпинделей на нормальном железе может приблизится (но не сравняться!) к RAID0, разумеется построенном на немного меньшем количестве дисков, накладные расходы на RAID5 никуда не уходят. Для особо понятливых это значит, что если хочешь хорошие скорости и отказоустойчивость при оптимальном использовании дискового пространства — берешь кучу дисков, быстрый рейд-контролер и строишь на них RAID5.
                                          Наверно вы таки тролль! :)
                                          • –1
                                            однако отставание от raid0 ПРОСТО ЧУДОВИЩНОЕ. Raid0 14 дисков, современные диски обеспечивают примерно 100 мегабайт на запись и чуть больше на чтение. Простое перемножение дает нам 14000 мегабайт в сек последовательное чтение/запись. Итого в 7 раз хуже запись, в 3.5 раза хуже чтение. ГДЕ ПРИБЛИЖЕНИЕ?! Приближение это отставание никак не в разы.
                                            • 0
                                              там лишний ноль написал, но в разы правильные написаны
                                              • 0
                                                таких скоростей никогда не будет — никакой контроллер вам столько не прокачает!
                                                видно что вы теоретик и тролль!
                                                все! надоело уже вас кормить!
                      • 0
                        RAID5+Hot Spare — вполне надёжное сочетание. Резервный диск конечно удорожает систему, но надёжность важнее.
                        • 0
                          Spare с одной стороны вещь полезная, но на ребилд все равно тратится время и в этот момент рейд остается уязвимый… Уж лучше RAID6 поднять. Со Spare единственное преимущество что я вижу это намного меньшая нагрузка на винт пока он в резерве, по сути включение/выключение только. В RAID6 два избыточных винта трудятся по полной…
                          • +1
                            На ребилд время тратится, никуда не денешься. А 6-й RAID просто логическое развитие 5-го, с усугублением недостатков последнего: ещё более низкая скорость чтения/записи и ещё большее потребление дискового пространства под служебные нужды, увеличенная нагрузка на RAID контроллер… Вобщем, каждый админ решает сам, какой тип RAID использовать, исходя из возможностей и потребностей. Компромиссы, мать их ети…
                            • +2
                              >>Со Spare единственное преимуществ
                              Единственное преимущество любого массива при наличии HS — в том, что при выходе из строя одного из участников массива не надо резко срываться и ставить диск на замену. Сдох диск? Ну и отлично, пусть пока на HS перестроится, а админ спокойненько позвонит в саппорт и закажет замену. Приедет замена — поставит в сервер, пометит как HS.
                        • +2
                          добавлю, что не забудьте последнее ядро поставить, помню как я убил три дня на 2.6.28-2.6.31 пока не вышло 2.6.32 процесс ребилда/решейпа подвисал в произвольном месте
                          • 0
                            при написании статьи проверял на Debian testing — все отлично
                            • 0
                              а какой размер массива был? :)
                              • 0
                                на Debian stable уже год крутится 8тб рейд, ребилды и расширения проходили нормально. Ядро 2.6.26, стандартное дебиановское.
                                • 0
                                  ну обратно откатываться я не рискнул, у мну было 12ТБ
                                • 0
                                  Да я на виртуалке тестил, по 8 гиг образы всего :)
                                  Планирую в скором времени собрать рейд на двухтерабайтниках доведя их кол-во постепенно до 6.
                                  Потому и начал все эти исследование
                            • +2
                              начиная с ядра 2.6.35 такое можно проворачивать не только с raid1 и raid5.
                              вот, что теперь можно делать:

                              — Add support for Raid0->Raid10 takeover
                              — Add support for Raid0->Raid5 takeover
                              — Add support for Raid5->Raid0 and Raid10->Raid0 takeover
                              — Add support for Raid5->Raid4 takeover
                              — Add support for Raid0->Raid4 takeover
                              — Add support for Raid4->Raid0 takeover
                              • 0
                                RAID5 уже пора похоронить.
                                Лучше было купить не один, а два жестяка и собрать 10ку (1+0)
                                • 0
                                  например для меня полезный объем важнее быстродействия т.ч. никого хоронить не надо :)
                                  • +1
                                    А если у тебя хранилище, например, для виртуального кластера vmware? В котором 24 слота. Туда тоже 10ку накатишь? ;) Или все же откопаешь RAID5? ;)
                                  • +1
                                    А что это за RAID5 из 2-х жестаков??? Вроде бред какой-то… RAID5 создается минимум из 3-х жестких дисков, при выходе 1 из строя рейд теряет избыточность и становится, по сути, RAID0, только дополнительно считаются контрольные суммы и постоянно пишутся на оставшиеся жестаки (что приводит к износу, но совсем не добавляет защиты).
                                    А RAID5 из 1 диска (тут сверху кто-то писал) — так это вообще туфта…
                                    • 0
                                      Вы правы, с первого взгляда это бред, но это как бы промежуточное состояние перед добавлением 3-го диска…
                                      Как я понял RAID5 из 2-х дисков чтото типа RAID1 только на второй диск пишутся контрольные суммы, а не данные. Смысла в этом мало, но позволяет в любой момент расширить массив.
                                      А RAID5 из 1 диска это скорее пример гибкости mdadm! ;) Его можно использовать только при условии что в ближайшем будущем будут добавлены все остальные диски для нормального функционирования массива. Например есть один диск и должны подвести еще парочку, а данные уже можно понемногу переносить…
                                      • 0
                                        На сколько я понял, описан процесс миграции, когда некуда положить все данные с зеркального рейда. И приходится выдумать способы «перевернуться» имеющимися средствами.

                                        Отказ жесткого диска в процессе 1 ребилда (с 1 до 5-ки) приведет к потере данных и сбору информации по останкам файловой системы. Это допустимо для домашней машины, возможно.

                                        Как минимум, стоило сделать копию всех данных с 1-го (или 2-го) винта на «новый» 3-й и уже потом заниматься переворачиванием рейд-1 в рейд-5. так мы обезопасим эту «секцию» работы по расширению массива.

                                        Когда заходил в топик, честно говоря, интересно было посмотреть как преобразовать массивы из 4-6-8 заполненых дисков из «зеркала» в рейд-5

                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.