Гид по технологиям

Как изменить размер разделов LVM поверх RAID1 — уменьшение и увеличение

9 min read Системное администрирование Обновлено 13 Oct 2025
Изменение размера LVM на RAID1: уменьшение и увеличение
Изменение размера 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) при условии, что массив цел и оба устройства доступны.

Подготовка

  1. Загрузитесь в rescue-систему и загрузите необходимые модули ядра:
modprobe md
modprobe linear
modprobe multipath
modprobe raid0
modprobe raid1
modprobe raid5
modprobe raid6
modprobe raid10
  1. Активируйте RAID-массивы и создайте конфигурацию mdadm:
cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
mdadm --examine --scan >> /etc/mdadm/mdadm.conf

mdadm -A --scan
  1. Запустите LVM:
/etc/init.d/lvm start
  1. Проверьте файловую систему перед изменением размера:
e2fsck -f /dev/server1/root

Ключевая идея

LVM-стек: файловая система → логический том → группа томов → физический том (PV) → программный RAID (/dev/md1) → диски. Перед уменьшением массива нужно уменьшить файловую систему, затем соответствующий LV, затем PV, затем снизить размер md-устройства. При этом освобождаемое пространство должно располагаться в конце PV (последовательность физических расширений и расположение LV имеют значение).

Практические шаги (в примере)

  1. Сжать файловую систему на /dev/server1/root до безопасного размера (в примере — 2G):
resize2fs /dev/server1/root 2G
  1. Сжать сам логический том до 2.5G:
lvreduce -L2.5G /dev/server1/root
  1. Если swap-том находится в конце PV и мешает (в примере он был в конце), удалить swap:
lvremove /dev/server1/swap_1
  1. Уменьшить PV до 3G:
pvresize --setphysicalvolumesize 3G /dev/md1
  1. Уменьшить /dev/md1 до 4G (размер указывать в KiB и он должен делиться на 64: 4 1024 1024 = 4194304):
mdadm --grow /dev/md1 --size=4194304
  1. После изменений дать PV использовать всё доступное пространство:
pvresize /dev/md1
  1. Восстановить 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: Мини-методология (как думать о задаче)

  1. Оцените текущее состояние: mdstat, pvdisplay, vgdisplay, lvdisplay, df -h.
  2. Определите порядок зависимостей: FS <= LV <= VG/PV <= md <= диски.
  3. Подготовьте среду восстановления (rescue), обеспечьте доступ к mdadm и LVM.
  4. Проверка FS + резервное копирование.
  5. Уменьшение: сначала FS, затем LV, затем PV, затем md.
  6. Увеличение: сначала md, затем PV, затем LV, затем FS.
  7. Тестирование, мониторинг, откат при необходимости.

H2: Факты и числовые параметры

  • Размер mdadm указывается в блоках KiB; для mdadm –grow –size используется число в 1 KiB.
  • PE в LVM часто — 4 MiB (в примере PE Size = 4.00 MB).
  • Всегда проверяйте кратность размера PV по отношению к PE (PV должен позволять целое число PE).

H2: План действий — сжато (SOP)

  1. Резервная копия и план отката.
  2. Загрузиться в rescue/демонтировать LV.
  3. Проверить FS: e2fsck -f /dev/…
  4. resize2fs до нового размера (если FS поддерживает уменьшение).
  5. lvreduce до целевого LV.
  6. lvremove (только если LV в конце мешает).
  7. pvresize –setphysicalvolumesize (уменьшить PV).
  8. mdadm –grow –size=… (уменьшить md).
  9. pvresize без параметров (дать PV использовать весь объект).
  10. lvcreate/mkswap или lvextend+resize2fs.
  11. e2fsck и перезагрузка.

H2: Инцидентный runbook и откат

Сценарий: после уменьшения md массив не загружается или данные повреждены.

  1. Остановите дальнейшие изменения.
  2. Если есть резервная копия образа md или LVM metadata, восстановите метаданные LVM/MD.
  3. Если PV уменьшен неверно и часть LV оказалась вне PV, используйте резервную копию тома или перенос данных на новый том.
  4. Если /dev/md1 был уменьшен ошибочно: если есть старые метаданные mdadm (mdadm.conf_orig или /etc/mdadm/mdadm.conf_orig), попытайтесь пересоздать md с исходным размером в режиме –create с параметром –assume-clean (опасно, только если уверены).
  5. При невозможности восстановления вернитесь к последней целевой резервной копии данных.

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-устройство.
  • Всегда имейте резервные копии и тестируйте процедуру в ближайшей к продакшену тестовой среде.

Важно

Если вы не уверены в шагах или ваша конфигурация отличается от примера (другие файловые системы, зеркала, или распределение томов), сначала протестируйте процедуру в лаборатории.

Конец статьи

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как найти потерянный или украденный Samsung
Мобильные устройства

Как найти потерянный или украденный Samsung

Как отправлять SMS голосом через Google Assistant
Android.

Как отправлять SMS голосом через Google Assistant

Как оставаться на связи в дороге
Технологии

Как оставаться на связи в дороге

OKR: как ставить цели и измерять результаты
Управление целями

OKR: как ставить цели и измерять результаты

Настройка Sphinx для документации Python
Документация

Настройка Sphinx для документации Python

PS5: сменить место загрузки на M.2 SSD
PS5

PS5: сменить место загрузки на M.2 SSD