Как изменить размер разделов LVM поверх RAID1 — уменьшение и увеличение
Версия 1.0
Автор: Falko Timme
Кратко: пошаговое руководство по уменьшению и увеличению размеров программного RAID1 при расположении LVM поверх массива. Включены инструкции для целого (intact) и деградированного массива, контроль целостности файловой системы, восстанавливаемые сценарии, чеклисты, план действий и рекомендации по тестированию и откату. Перед началом сделайте полную резервную копию и убедитесь, что логические тома размонтированы.
Введение
Эта статья объясняет, как можно уменьшать и увеличивать существующие разделы программного RAID1, когда сверху используются LVM-тома. Если вы не используете LVM, используйте руководство по изменению размера RAID-разделов (Shrink & Grow) без LVM. Примеры протестированы с файловой системой ext3 на логических томах. Описаны процедуры для целого массива и для деградированного массива.
Важно: автор не гарантирует, что процедура сработает в вашей среде. Всегда имейте актуальную резервную копию и план отката.
H2: Предварительная заметка
За несколько дней до написания руководства я обнаружил деградировавший RAID1 (/dev/md1, состоящий из /dev/sda5 и /dev/sdb5; /dev/sda5 вышел из строя, /dev/sdb5 был активен). Синхронизация при восстановлении затем несколько раз останавливалась и начиналась заново. В логах ядра были ошибки ввода-вывода на конце раздела /dev/sdb5, что указывает на дефектные сектора.
В худшем случае один диск полностью мёртв, второй — с проблемой на конце раздела. Чтобы обойти проблему, я сократил /dev/md1 так, чтобы исключить проблемные блоки на /dev/sdb5, затем добавил новый /dev/sda5, дождался синхронизации, удалил /dev/sdb5 и заменил диск, снова добавил /dev/sdb5 и расширил /dev/md1.
Используемая конфигурация в примере: /dev/md1 содержит группу томов /dev/server1 с логическими томами /dev/server1/root (система, точка монтирования /) и /dev/server1/swap_1 (swap). Так как приходится изменять системный раздел, работа выполнялась из rescue-системы (например, Knoppix Live-CD). Если массив не содержит системный раздел, возможно, загрузка в rescue не потребуется, но в любом случае логические тома должны быть размонтированы.
1 Целый (intact) массив — обзор текущего состояния
Ниже показано состояние массива и LVM в примере (остальные команды и выводы сохранены в оригинале и приведены далее в неизменном виде в блоках кода):
cat /proc/mdstat
server1:~#cat/proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda5[0] sdb5[1]
4988032 blocks [2/2] [UU]
md0 : active raid1 sda1[0] sdb1[1]
248896 blocks [2/2] [UU]
unused devices:
server1:~#
df -h
server1:~#df-h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/server1-root
4.5G 741M 3.5G 18% /
tmpfs 126M 0 126M 0% /lib/init/rw
udev 10M 68K 10M 1% /dev
tmpfs 126M 0 126M 0% /dev/shm
/dev/md0 236M 18M 206M 8% /boot
server1:~#
pvdisplay
server1:~#pvdisplay
— Physical volume —
PV Name /dev/md1
VG Name server1
PV Size 4.75 GB / not usable 0
Allocatable yes (but full)
PE Size (KByte) 4096
Total PE 1217
Free PE 0
Allocated PE 1217
PV UUID Ntrsmz-m0o1-WAPD-xhsb-YpH7-0okm-qfdBQG
server1:~#
vgdisplay
server1:~#vgdisplay
— Volume group —
VG Name server1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 9
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 4.75 GB
PE Size 4.00 MB
Total PE 1217
Alloc PE / Size 1217 / 4.75 GB
Free PE / Size 0 / 0
VG UUID X3ZYTy-39yq-20k7-GCGk-vKVU-Xe0i-REdEu0
server1:~#
lvdisplay
server1:~#lvdisplay
— Logical volume —
LV Name /dev/server1/root
VG Name server1
LV UUID 3ZgGnd-Sq1s-Rchu-92b9-DpAX-mk24-0aOMm2
LV Write Access read/write
LV Status available
LV Size 4.50 GB
Current LE 1151
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:0
— Logical volume —
LV Name /dev/server1/swap_1
VG Name server1
LV UUID KM6Yq8-jQaQ-rkP8-6f4t-zrXA-Jk13-yFrWi2
LV Write Access read/write
LV Status available
LV Size 264.00 MB
Current LE 66
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:1
server1:~#
H2: 2.1 Уменьшение размера целого массива — пошагово
Ниже описан рабочий сценарий уменьшения размера массива /dev/md1 (из 5 GB в 4 GB) при условии, что массив цел и оба устройства доступны.
Подготовка
- Загрузитесь в rescue-систему и загрузите необходимые модули ядра:
modprobe md
modprobe linear
modprobe multipath
modprobe raid0
modprobe raid1
modprobe raid5
modprobe raid6
modprobe raid10
- Активируйте RAID-массивы и создайте конфигурацию mdadm:
cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
mdadm -A --scan
- Запустите LVM:
/etc/init.d/lvm start
- Проверьте файловую систему перед изменением размера:
e2fsck -f /dev/server1/root
Ключевая идея
LVM-стек: файловая система → логический том → группа томов → физический том (PV) → программный RAID (/dev/md1) → диски. Перед уменьшением массива нужно уменьшить файловую систему, затем соответствующий LV, затем PV, затем снизить размер md-устройства. При этом освобождаемое пространство должно располагаться в конце PV (последовательность физических расширений и расположение LV имеют значение).
Практические шаги (в примере)
- Сжать файловую систему на /dev/server1/root до безопасного размера (в примере — 2G):
resize2fs /dev/server1/root 2G
- Сжать сам логический том до 2.5G:
lvreduce -L2.5G /dev/server1/root
- Если swap-том находится в конце PV и мешает (в примере он был в конце), удалить swap:
lvremove /dev/server1/swap_1
- Уменьшить PV до 3G:
pvresize --setphysicalvolumesize 3G /dev/md1
- Уменьшить /dev/md1 до 4G (размер указывать в KiB и он должен делиться на 64: 4 1024 1024 = 4194304):
mdadm --grow /dev/md1 --size=4194304
- После изменений дать PV использовать всё доступное пространство:
pvresize /dev/md1
- Восстановить swap и/или расширить LV /dev/server1/root до желаемого размера:
lvcreate --name swap_1 -l 66 server1
mkswap /dev/server1/swap_1
# Просмотреть и расширить root, например
lvextend -l +317 /dev/server1/root
resize2fs /dev/server1/root
e2fsck -f /dev/server1/root
Проверки после перезагрузки
После перезагрузки в обычную систему вы увидите уменьшившийся /dev/md1 и соответствующие размеры в vgdisplay/pvdisplay/lvdisplay и df -h (выводы сохранены в исходном тексте и приведены выше в неизменном виде).
H2: Практические примечания и ошибки
- Всегда проверяйте целостность файловой системы перед уменьшением.
- При использовании других ФС (xfs) уменьшать нельзя — xfs не поддерживает уменьшение. В этом случае потребуется миграция файловой системы.
- Убедитесь, что сокращаемый LV действительно помещается в новый PV; оставьте запас.
- Если swap не в конце — не удаляйте, а перераспределите размер последнего LV.
- Команды mdadm –grow и pvresize работают с блоками и PE — проверяйте выравнивание и кратность.
H2: Когда этот метод не сработает
- Если на диске есть битые сектора внутри области, которую нельзя исключить простым уменьшением — потребуется перенос данных на новый диск.
- Если файловая система не поддерживает уменьшение (например, XFS) — нужно создать новый том и скопировать данные.
- При повреждённых метаданных LVM или mdadm может понадобиться восстановление метаданных из резервной копии или более сложный подход.
H2: Альтернативные подходы
- Полная замена диска с синхронизацией: заменить диск, дождаться resync, затем выполнить расширение/уменьшение более безопасно.
- Использовать временный новый RAID/mirror и rsync: создать новый массив нужного размера, перенести данные rsync, переключить точки монтирования.
- Использовать инструмент LVM mirror и pvmove: добавить новый диск, выполнить pvmove для миграции PE, затем удалить старый диск.
H2: Мини-методология (как думать о задаче)
- Оцените текущее состояние: mdstat, pvdisplay, vgdisplay, lvdisplay, df -h.
- Определите порядок зависимостей: FS <= LV <= VG/PV <= md <= диски.
- Подготовьте среду восстановления (rescue), обеспечьте доступ к mdadm и LVM.
- Проверка FS + резервное копирование.
- Уменьшение: сначала FS, затем LV, затем PV, затем md.
- Увеличение: сначала md, затем PV, затем LV, затем FS.
- Тестирование, мониторинг, откат при необходимости.
H2: Факты и числовые параметры
- Размер mdadm указывается в блоках KiB; для mdadm –grow –size используется число в 1 KiB.
- PE в LVM часто — 4 MiB (в примере PE Size = 4.00 MB).
- Всегда проверяйте кратность размера PV по отношению к PE (PV должен позволять целое число PE).
H2: План действий — сжато (SOP)
- Резервная копия и план отката.
- Загрузиться в rescue/демонтировать LV.
- Проверить FS: e2fsck -f /dev/…
- resize2fs до нового размера (если FS поддерживает уменьшение).
- lvreduce до целевого LV.
- lvremove (только если LV в конце мешает).
- pvresize –setphysicalvolumesize (уменьшить PV).
- mdadm –grow –size=… (уменьшить md).
- pvresize без параметров (дать PV использовать весь объект).
- lvcreate/mkswap или lvextend+resize2fs.
- e2fsck и перезагрузка.
H2: Инцидентный runbook и откат
Сценарий: после уменьшения md массив не загружается или данные повреждены.
- Остановите дальнейшие изменения.
- Если есть резервная копия образа md или LVM metadata, восстановите метаданные LVM/MD.
- Если PV уменьшен неверно и часть LV оказалась вне PV, используйте резервную копию тома или перенос данных на новый том.
- Если /dev/md1 был уменьшен ошибочно: если есть старые метаданные mdadm (mdadm.conf_orig или /etc/mdadm/mdadm.conf_orig), попытайтесь пересоздать md с исходным размером в режиме –create с параметром –assume-clean (опасно, только если уверены).
- При невозможности восстановления вернитесь к последней целевой резервной копии данных.
H2: Ролевые чеклисты
Администратор (планирование)
- Оценить текущее использование диска и расположение LV.
- Решить, какие LV нужно уменьшить/удалить.
- Подготовить резервное копирование.
- Назначить окно обслуживания и оповестить заинтересованных сторон.
Оператор (исполнение)
- Загрузить rescue-систему и смонтировать необходимые утилиты.
- Выполнить команды в SOP, фиксируя вывод и время.
- Проверить целостность и перезагрузить систему.
- Мониторить систему после рестарта.
H2: Критерии приёмки
- Все LVM-тома доступны и монтируются, размер соответствует ожидаемому.
- Проверка файловой системы прошла без ошибок.
- mdadm показывает массив в состоянии [UU] (оба устройства) или соответствующее состояние при деграде.
- Резервная копия успешно валидирована.
H2: Тесты и критерии приёмки
- Тест 1: имитация уменьшения в тестовой среде с аналогичным количеством PE. Критерий: корректная загрузка и целостность данных.
- Тест 2: восстановление из резервной копии после намеренной порчи метаданных. Критерий: успешное восстановление.
- Тест 3: проверка производительности после изменения размера. Критерий: отсутствие значимого падения I/O для критических сервисов.
H2: Галерея крайних случаев
- XFS на LV: не поддерживает уменьшение — требуется миграция.
- LV занимает весь PV, и в PV нет свободных PE: для уменьшения потребуется удалить/переместить LV.
- Битые сектора внутри области, не поддающейся исключению: перенос данных на новый диск или временный массив.
H2: Совместимость и миграция
- Если вы используете разные верcии mdadm или LVM, убедитесь, что rescue-система имеет совместимые версии утилит.
- При миграции с ext2/3 на ext4 следите за поддержкой resize2fs и требованиями к резервной копии.
H2: Краткий словарь терминов
- PV: Physical Volume — физический том LVM (в данном примере /dev/md1).
- VG: Volume Group — группа томов, объединяющая PV.
- LV: Logical Volume — логический том, внутри которого содержится файловая система.
- md: программный RAID (mdadm).
H2: Матрица рисков и смягчения
- Риск: повреждение данных при уменьшении FS. Смягчение: полная резервная копия и проверка FS перед операцией.
- Риск: потеря метаданных LVM. Смягчение: резервное копирование metadata (vgcfgbackup).
- Риск: аппаратные ошибки диска во время операции. Смягчение: выполнение в окне обслуживания с запасными дисками под рукой.
H2: Резюме
- Изменение размера RAID1 с LVM поверх требует строгого порядка действий: FS → LV → PV → md → диски.
- Для уменьшения сначала уменьшают файловую систему, затем соответствующие LVM-объекты, и только потом уменьшают md-устройство.
- Всегда имейте резервные копии и тестируйте процедуру в ближайшей к продакшену тестовой среде.
Важно
Если вы не уверены в шагах или ваша конфигурация отличается от примера (другие файловые системы, зеркала, или распределение томов), сначала протестируйте процедуру в лаборатории.
Конец статьи
Похожие материалы
Переход на RAID1: создание и настройка

Beeftext: сниппеты текста в Windows

Как разблокировать iPhone при забытом пароле
Изменение размера LVM на RAID1: уменьшение и увеличение
