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

Уменьшение degraded RAID1 (/dev/md1) и LVM

7 min read Linux Обновлено 22 Sep 2025
Уменьшение degraded RAID1 и LVM на /dev/md1
Уменьшение degraded RAID1 и LVM на /dev/md1

Коротко: если у вас 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.

Общая логика действий (короткая методология)

  1. Пометить и удалить отсутствующий /dev/sda5 из массива md1 и обнулить суперблок на /dev/sda5.
  2. Загрузиться в rescue и собрать md-массив только с работавшим диском (/dev/sdb5).
  3. Запустить LVM, проверить файловую систему на LV и уменьшить файловую систему и LV так, чтобы суммарный размер LV умещался в будущий PV после shrink md.
  4. Удалить/переместить последовательно LV (например, swap), изменить размер PV (pvresize с –setphysicalvolumesize), выполнить –grow/–size на mdadm для уменьшения md1 до нужного числа с учётом выравнивания, затем вернуть pvresize без размера.
  5. Воссоздать удалённые 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.

  1. Уменьшите файловую систему на LV. Выберите безопасный размер, который вместит все данные. В примере filesystem уменьшают до 2 ГБ:
resize2fs /dev/server1/root 2G
  1. Уменьшите LV root до немного большего размера файловой системы (в примере 2.5 ГБ):
lvreduce -L2.5G /dev/server1/root
  1. Если у вас есть swap LV в конце PV и он мешает (как в примере), удалите его, чтобы высвободить место в конце устройства:
lvremove /dev/server1/swap_1

Если swap находится не в конце, не удаляйте его: просто убедитесь, что последний LV на PV уменьшён так, чтобы всё уместилось.

  1. Уменьшите физический том PV, задав новую физическую ёмкость для /dev/md1 (в примере — 3 ГБ для PV):
pvresize --setphysicalvolumesize 3G /dev/md1
  1. Теперь уменьшаем сам md-массив. mdadm ожидает размер в КиБ. Для 4 ГБ это 4 1024 1024 = 4194304. Значение должно делиться на 64.
mdadm --grow /dev/md1 --size=4194304
  1. После изменения md размера расширьте PV до максимально возможного на новом md (pvresize без аргументов):
pvresize /dev/md1
  1. Проверьте vgdisplay, чтобы убедиться в новых значениях и свободных PE. В примере после pvresize доступно 383 PE.

Если нужно восстановить ранее удалённый swap, в примере создают его вновь:

lvcreate --name swap_1 -l 66 server1
mkswap /dev/server1/swap_1
  1. Используйте lvextend, чтобы расширить root на доступные PE (в примере +317):
lvextend -l +317 /dev/server1/root
  1. Расширьте файловую систему root до максимально возможного размера:
resize2fs /dev/server1/root
  1. Повторно проверьте файловую систему:
e2fsck -f /dev/server1/root
  1. Перезагрузитесь в обычную систему. Затем перед повторным добавлением /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 для диагностики.

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

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

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

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

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

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

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

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

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

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

Остановить фоновые приложения Android и сэкономить батарею
Мобильные устройства

Остановить фоновые приложения Android и сэкономить батарею

Уменьшение degraded RAID1 и LVM на /dev/md1
Linux

Уменьшение degraded RAID1 и LVM на /dev/md1