Уменьшение degraded RAID1 (/dev/md1) и LVM
Коротко: если у вас degraded RAID1 (/dev/md1) и вы хотите уменьшить размер массива и LVM без полного восстановления диска, последовательность действий — пометить отказавший диск как failed и удалить его, обнулить суперблок, загрузиться в rescue, уменьшить файловую систему, уменьшить LV и PV, изменить размер массива mdadm, восстановить PV/LV и вернуть диск в массив. Выполните резервное копирование и проверку целостности перед началом.
Важно: любые операции со снижением размеров несут риск потери данных. Всегда делайте полный бэкап или снимок перед изменениями.
Введение
В этой инструкции описан рабочий пример, где RAID1 /dev/md1 состоит из /dev/sda5 и /dev/sdb5, а /dev/sda5 вышел из строя. Цель — уменьшить размер md1 с ~5 ГБ до 4 ГБ и корректно подстроить LVM и файловую систему, чтобы система затем могла нормально загрузиться и массив можно было пересоздать/восстановить.
Определения в одну строку:
- RAID1 — зеркалирование между двумя дисками; degraded означает, что один диск отсутствует.
- PV/VG/LV — физический том, группа томов и логический том в LVM.
Предварительные проверки и подготовка
Прежде чем начать, проверьте текущее состояние RAID, файловых систем и LVM:
cat /proc/mdstat
В примере вывод показан так:
server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb5[1]
4988032 blocks [2/1] [_U]
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:~#
Проверяем LVM:
pvdisplay
vgdisplay
lvdisplay
(В исходном примере показаны данные PV /dev/md1, VG server1 и два LV: root и swap_1.)
Важная подготовка:
- Сделайте резервную копию важных данных (зеркало, копия образа диска, файлы / etc). Это обязателно.
- Запишите текущие размеры PV/VG/LV и свободные PE.
- Убедитесь, что у вас есть live/rescue-образ с поддержкой mdadm и LVM.
Общая логика действий (короткая методология)
- Пометить и удалить отсутствующий /dev/sda5 из массива md1 и обнулить суперблок на /dev/sda5.
- Загрузиться в rescue и собрать md-массив только с работавшим диском (/dev/sdb5).
- Запустить LVM, проверить файловую систему на LV и уменьшить файловую систему и LV так, чтобы суммарный размер LV умещался в будущий PV после shrink md.
- Удалить/переместить последовательно LV (например, swap), изменить размер PV (pvresize с –setphysicalvolumesize), выполнить –grow/–size на mdadm для уменьшения md1 до нужного числа с учётом выравнивания, затем вернуть pvresize без размера.
- Воссоздать удалённые LV, расширить root до нужного значения, fsck, затем вернуть /dev/sda5 в массив после обнуления суперблока.
Полная поэтапная инструкция
Перед действиями в обычной системе пометьте sda5 как failed и удалите:
mdadm --manage /dev/md1 --fail /dev/sda5
mdadm --manage /dev/md1 --remove /dev/sda5
Важно: затем обязательно обнулите суперблок на /dev/sda5 — если этого не сделать, mdadm может считать диск действительным и попытаться синхронизировать его в неправильной конфигурации после рестарта:
mdadm --zero-superblock /dev/sda5
Загрузитесь в rescue-режим (например, с live-CD/USB) и активируйте модули ядра, нужные для работы md и LVM:
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
Проверьте файловую систему на LV root перед уменьшением:
e2fsck -f /dev/server1/root
В примере исходный /dev/md1 ~= 5 ГБ. План: уменьшить md1 до 4 ГБ. Для этого сначала уменьшим файловую систему внутри /dev/server1/root, затем LV и PV.
- Уменьшите файловую систему на LV. Выберите безопасный размер, который вместит все данные. В примере filesystem уменьшают до 2 ГБ:
resize2fs /dev/server1/root 2G
- Уменьшите LV root до немного большего размера файловой системы (в примере 2.5 ГБ):
lvreduce -L2.5G /dev/server1/root
- Если у вас есть swap LV в конце PV и он мешает (как в примере), удалите его, чтобы высвободить место в конце устройства:
lvremove /dev/server1/swap_1
Если swap находится не в конце, не удаляйте его: просто убедитесь, что последний LV на PV уменьшён так, чтобы всё уместилось.
- Уменьшите физический том PV, задав новую физическую ёмкость для /dev/md1 (в примере — 3 ГБ для PV):
pvresize --setphysicalvolumesize 3G /dev/md1
- Теперь уменьшаем сам md-массив. mdadm ожидает размер в КиБ. Для 4 ГБ это 4 1024 1024 = 4194304. Значение должно делиться на 64.
mdadm --grow /dev/md1 --size=4194304
- После изменения md размера расширьте PV до максимально возможного на новом md (pvresize без аргументов):
pvresize /dev/md1
- Проверьте vgdisplay, чтобы убедиться в новых значениях и свободных PE. В примере после pvresize доступно 383 PE.
Если нужно восстановить ранее удалённый swap, в примере создают его вновь:
lvcreate --name swap_1 -l 66 server1
mkswap /dev/server1/swap_1
- Используйте lvextend, чтобы расширить root на доступные PE (в примере +317):
lvextend -l +317 /dev/server1/root
- Расширьте файловую систему root до максимально возможного размера:
resize2fs /dev/server1/root
- Повторно проверьте файловую систему:
e2fsck -f /dev/server1/root
- Перезагрузитесь в обычную систему. Затем перед повторным добавлением /dev/sda5 обязательно обнулите суперблок на sda5 и снова добавьте в md:
mdadm --zero-superblock /dev/sda5
mdadm -a /dev/md1 /dev/sda5
Проверьте синхронизацию:
cat /proc/mdstat
Вы должны увидеть, что /dev/sdb5 и /dev/sda5 синхронизируются.
Критерии приёмки
- mdstat показывает два устройства и процесс синхронизации.
- vgdisplay показывает ожидаемые размеры VG и свободные PE.
- lvdisplay показывает ожидаемые размеры LV.
- Файловая система монтируется и не содержит ошибок после e2fsck.
- Система успешно загружается в обычный режим.
Контрольные точки и откат
Важные контрольные точки (создайте снимок или бэкап перед каждой):
- До lvreduce / resize2fs
- До pvresize –setphysicalvolumesize
- До mdadm –grow
Откатные действия зависят от точки: если файловая система повреждена после уменьшения, восстановите из бэкапа или снимка. Если вы удалили LV (swap), его можно воссоздать, но данные swap не критичны.
Частые ошибки и способы их решения
- Ошибка: «Not enough room on device» при pvresize. Решение: убедитесь, что все LV, особенно последний, уменьшены так, чтобы суммарный размер LV помещался в новый PV.
- Ошибка: неправильно вычислен размер md –size. mdadm требует значения в КиБ и кратности 64. Проверьте арифметику: 4 GiB = 4 1024 1024 KiB = 4194304.
- Если после добавления старого диска он снова помечается как неправильный — перед добавлением выполните mdadm –zero-superblock /dev/sda5.
Альтернативные подходы
- Если доступен третий диск или временный внешний диск: добавьте его вместо удаления, полностью перестройте массив, затем понизьте размер ЛВ безопасно и удалите временный диск.
- Восстановление с бэкапа: если уменьшение вызывает риск, проще восстановить систему на новом md массиве с нужными размерами.
- Использовать LVM snapshot перед операциями уменьшения файловой системы (если достаточно свободного места).
Когда этот метод не сработает
- Если на единственном оставшемся диске недостаточно места даже после уменьшения LV/FS — нельзя безопасно уменьшить PV/md.
- Если данные распределены так, что последний LV нельзя уменьшить (например, корневой LV использует пространство в конце) и нет возможности переставить данные.
Ментальные модели и эвристики
- Слой за слоем: FS <= LV <= PV <= md. Никогда не уменьшайте верхние уровни, не убедившись, что нижние слои обеспечивают место.
- Всегда уменьшать файловую систему перед уменьшением LV.
- Никогда не доверяйте автоматике: проверьте размеры и свободные PE вручную.
Быстрая контрольная таблица (SOP)
- Бэкап: да
- Пометить failed и удалить sda5: да
- Обнулить суперблок sda5: да
- Загрузиться в rescue: да
- e2fsck на root: да
- resize2fs root: да
- lvreduce root: да
- lvremove swap (если мешает): опц.
- pvresize –setphysicalvolumesize: да
- mdadm –grow –size: да
- pvresize: да
- lvcreate/mkswap: опц.
- lvextend и resize2fs: да
- e2fsck: да
- Перезагрузка и mdadm -a sda5: да
Риски и меры смягчения
- Риск потери данных при неверном размере FS/LV: смягчение — бэкап и проверка e2fsck.
- Риск повреждения md при неправильно обнулённом суперблоке: смягчение — всегда выполнять mdadm –zero-superblock до повторного добавления.
- Риск несоответствия вычислений размера: смягчение — проверить значения в KiB и кратность 64.
Краткий словарь
- PV — физический том LVM
- VG — группа томов LVM
- LV — логический том LVM
- mdadm — инструмент для управления программными RAID
- e2fsck, resize2fs — инструменты для проверки и изменения размера файловой системы ext2/3/4
Рекомендации по безопасности и локализации
- Всегда держите рабочий live-образ под рукой для восстановления.
- Для русскоязычных администраторов: проверяйте локальные правила резервного копирования и доступ к загрузочным носителям.
Заключение
Процесс уменьшения degraded RAID1 и связанных LVM-тoмов возможен, но требует аккуратности: сначала уменьшать файловые системы, затем LV, затем PV, затем сам md. Основные риски — потеря данных и ошибочный расчёт размера. Планируйте откаты и бэкапы заранее.
Примечание
Если после всех шагов RAID не синхронизируется автоматически, проверьте /var/log/syslog и вывод mdadm –detail /dev/md1 для диагностики.
Похожие материалы

Почему ноутбук перегревается и как это исправить

Точность оценки времени батареи ноутбука

Ожидание вызова не работает на iOS 16 — исправить

Видеообзоры в NotebookLM — как быстро создать
