Как увеличить размер программного RAID-массива в Linux

  • Автор:

mdadm-extending-000.pngОбъемы данных в современных системах растут с каждым днем и тот объем, который еще вчера считался достаточным, сегодня уже не способен удовлетворить текущие требования. Также дешевеют носители данных, особенно это касается твердотельных накопителей, что рано или поздно поставит администратора перед необходимостью апгрейда дисковой подсистемы. Но как быть, если вы используете программный RAID в Linux? В этой статье мы рассмотрим наиболее часто встречающийся сценарий с заменой дисков на более емкие и расширением объема массива.

Несмотря на то, что в качестве примера мы использовали Debian 9 все нижеизложенное будет справедливо для любого базирующегося на Debian дистрибутиве, а с небольшими поправками (там, где касается установки загрузчика) для любой Linux-системы.

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

Итак, у нас в системе используются два виртуальных жестких диска объемом 20 ГБ которые мы хотим заменить на новые виртуальные диски объемом в 30 ГБ желательно без существенного простоя системы.

Прежде всего ознакомимся с текущей конфигурацией дисковой подсистемы. Будет очень полезно выполнить перезагрузку и войдя в BIOS уточнить с какого именно физического диска мы загружаемся.

mdadm-extending-001.png

В нашем случае это первый физический диск. Теперь загрузимся в систему и выполним команду:

lsblk

ее вывод позволяет в удобном виде увидеть структуру текущей дисковой подсистемы.

mdadm-extending-002.pngКак можно увидеть, в нашем случае на двух физических жестких дисках sda и sdb расположены два программных массива raid1: md0 с корневой файловой системой и md1 с разделом подкачки объемом 16,8 ГБ и 3,2 ГБ соответственно.

Следующим шагом нам нужно посмотреть разметку на физических дисках, это можно сделать при помощи утилиты fdisk, но лучше использовать ее аналог с псевдографическим интерфейсом - cfdisk. Запустим ее с указанием интересующего нас диска:

cfdisk /dev/sda

mdadm-extending-003.pngЗдесь мы видим, что диск имеет таблицу разделов MBR (Label: dos в шапке) и содержит первичный раздел sda1 объемом 16,8 ГБ типа fd Linux RAID, а также логический раздел sda2, в котором находится еще один раздел типа fd Linux RAID размером 3,2 ГБ - sda5.

Запомним эти данные, так как аналогичную по структуре разметку нам нужно будет воспроизвести на новом жестком диске. Для этого нам нужно заменить один из старых дисков массива на новый, так как загрузились мы с первого физического диска, т.е. sda, то заменить нам следует sdb. Поэтому пометим его как сбойный для каждого из расположенных на нем массивов:

mdadm -f /dev/md0 /dev/sdb1
mdadm -f /dev/md1 /dev/sdb5

mdadm-extending-004.pngТеперь можно выключить сервер и физически заменить старый жесткий диск на новый. После этого загрузимся и выполним команду:

fdisk -l

mdadm-extending-005.pngКак видим в системе появился новый неразмеченный диск sdb объемом 30 ГБ. Теперь следует разметить его:

cfdisk /dev/sdb

Первым шагом указываем тип таблицы разделов, так как у нас уже используется MBR, то выбираем dos.

mdadm-extending-006.pngТеперь нам нужно создать аналогичную по структуре sda разметку, но с новыми размерами разделов. Единственное условие - они не должны быть меньше уже имеющихся. В нашем случае мы создадим первичный раздел объемом 26 ГБ и укажем для него тип Linux raid autodetect (fd) используя для этого кнопку Type утилиты.

mdadm-extending-007.pngЗатем запишем изменения кнопкой Write. На оставшемся месте создадим расширенный раздел (extended) и внутри его еще один раздел Linux raid autodetect (fd). В итоге у вас должна получиться разметка аналогичная по структуре sda, но с новыми размерами разделов.

Теперь добавим вновь созданные разделы в массивы:

mdadm --add /dev/md0 /dev/sdb1
mdadm --add /dev/md1 /dev/sdb5

mdadm-extending-008.pngПосле чего убедимся, что начался процесс ресинхронизации:

cat /proc/mdstat

mdadm-extending-009.pngИ обязательно дождемся ее окончания. Система в это время будет доступной, но может испытывать проблемы с производительностью из-за повышенной нагрузки на дисковую подсистему, поэтому желательно запланировать данный процесс на нерабочее время. После успешной ресинхронизации вывод команды будет выглядеть следующим образом:

mdadm-extending-010.pngВроде бы все хорошо, но не забываем про загрузчик, на новом диске его нет. Поэтому выполним:

dpkg-reconfigure grub-pc

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

mdadm-extending-011.pngПерезагружаем систему, выбрав в BIOS в качестве загрузочного устройства новый жесткий диск. Если все было сделано правильно, то вы загрузитесь уже с нового жесткого диска. Теперь нужно пометить sda как сбойный и исключить его из массива:

mdadm -f /dev/md0 /dev/sda1
mdadm -f /dev/md1 /dev/sda5

Выключаем сервер, физически заменяем диск на новый, загружаемся. Проверяем дисковую конфигурацию:

mdadm-extending-012.pngКак видим, теперь у нас в системе появился новый неразмеченный диск sda, но так как нам уже не нужно создавать разделы с отличным от sdb размером, то просто скопируем разметку с одного диска на второй, для этого используем еще одну утилиту sfdisk:

sfdisk -d /dev/sdb | sfdisk /dev/sda

mdadm-extending-013.pngПри выполнении данной операции важно не перепутать диски местами, иначе вы скопируете разметку с пустого диска на диск с данными, что приведет к их утере. Первым следует указать диск источник, вторым - целевой диск. Плюс данной операции - вместе с разметкой скопируется также загрузчик.

Снова добавим разделы в массив:

mdadm --add /dev/md0 /dev/sda1
mdadm --add /dev/md1 /dev/sda5

Дождемся окончания ресинхронизации:

mdadm-extending-014.pngПерезагрузимся несколько раз и убедимся, что загрузка возможна с обоих физических дисков. Теперь снова выполним команду:

lsblk 

и внимательно изучим вывод:

mdadm-extending-015.pngНесмотря на то, что мы увеличили размер sda1/sdb1 и sda5/sdb5 размеры массивов md0 и md1 остались неизменными. Но если мы вспомним, что программный RAID в Linux строится поверх разделов, то все станет на свои места. Это аналогично тому, что если бы мы заменили жесткий диск в системе на более емкий, но перенесли раздел без изменения размера.

Что делать? Расширить объем массива, для этого выполните команды:

mdadm --grow /dev/md0 --size=max
mdadm --grow /dev/md1 --size=max

Что у нас получилось?

mdadm-extending-016.png

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

df -h

mdadm-extending-017.pngИз ее вывода видно, что размер файловой системы не изменился и нам по-прежнему доступно около 17 ГБ. Но здесь нет никакой ошибки, если мы вспомним, что программный RAID является для системы аналогом диска, который содержит раздел с файловой системы, то поймем, что несмотря на то, что мы увеличили размер диска, нам следует также увеличить размер раздела с данными. Для этого выполним:

resize2fs /dev/md0

mdadm-extending-018.pngВот теперь можно считать процесс расширения массива законченным, мы расширили все необходимые разделы и теперь можем использовать все доступное пространство новых дисков. Сам процесс может показаться несколько сложным, но если представить всю эту систему как матрешку, когда одни разделы вкладываются в другие - то все станет на свои места и система вновь станет стройной и логичной.

А в заключение не будет лишним напомнить, что все проведенные нами операции несут потенциальный риск полной потери данных, поэтому перед тем, как выполнять указанные в статье действия создайте полную резервную копию вашей системы.

Дополнительные материалы:


  1. Ubuntu Server. Настраиваем программный RAID
  2. Ubuntu Server. Администрирование программного RAID
  3. Ubuntu Server. Настраиваем уведомления программного RAID
  4. Особенности настройки программного RAID в Debian 8
  5. Как увеличить размер программного RAID-массива в Linux
  6. Настраиваем программный RAID на UEFI-системах в Debian и Ubuntu