ЯдроКодаподготовка к экзаменам
Учебная платформа

Загружаем материалы

Подготавливаем материалы и навигацию по разделу.

LVM, RAID и SMART: расширение томов и диагностика дисков

Автор: · Обновлено

При увеличении диска виртуальной машины приложение часто продолжает видеть прежний объём. Причина — несколько независимых слоёв: виртуальный диск, раздел, LVM и файловая система. Рост нижнего слоя не всегда автоматически меняет верхний. Надёжная процедура начинается с карты хранения и резервной копии данных, а не с одной команды «растянуть диск».

PV, VG и LV

Physical Volume, или PV, — устройство, подготовленное для LVM. Volume Group объединяет пространство одного или нескольких PV. Logical Volume получает часть этого пространства и выглядит как блочное устройство, на котором создают файловую систему. При установке Linux выбор LVM добавляет эту гибкость, но сам по себе не включает шифрование и защиту от отказа диска.

lsblk -o NAME,TYPE,SIZE,FSTYPE,MOUNTPOINTS
sudo pvs -o pv_name,vg_name,pv_size,pv_free
sudo vgs -o vg_name,vg_size,vg_free
sudo lvs -a -o lv_name,vg_name,lv_size,segtype,devices

Команды читают состояние. По результату нужно ответить: на каком LV лежат данные, в какой VG есть свободные extents, какие физические устройства его содержат. Если lvs пуст, это не ошибка для системы без LVM. Для подключения существующего тома определите ФС на /dev/группа/том, при необходимости активируйте обнаруженную группу через vgchange -ay имя, затем используйте mount. lvcreate и mkfs для открытия существующих данных не нужны.

Создать учебный LVM в отдельной VM

В VM без ценных данных можно создать два файловых образа и loop-устройства. Требуются root, lvm2, util-linux и разрешение LVM использовать loop. Имена ниже зарезервированы только для этой тренировки; если группа vg_course_demo уже существует, выберите другое имя и не продолжайте с ним.

lvm_lab=$(mktemp -d)
truncate -s 256M "$lvm_lab/a.img" "$lvm_lab/b.img"
loop_a=$(sudo losetup --find --show "$lvm_lab/a.img")
loop_b=$(sudo losetup --find --show "$lvm_lab/b.img")
printf 'a=%s b=%s\n' "$loop_a" "$loop_b"
sudo losetup "$loop_a"
sudo losetup "$loop_b"

Проверьте, что оба вывода ссылаются именно на созданные образы. Только после этого выполните следующие операции: pvcreate пишет метаданные устройства.

sudo pvcreate "$loop_a"
sudo vgcreate vg_course_demo "$loop_a"
sudo lvcreate -L 64M -n data vg_course_demo
sudo mkfs.ext4 /dev/vg_course_demo/data
sudo pvcreate "$loop_b"
sudo vgextend vg_course_demo "$loop_b"
sudo lvextend -L +32M /dev/vg_course_demo/data
sudo resize2fs /dev/vg_course_demo/data
sudo lvs vg_course_demo

Размер data станет 96 MiB, файловая система тоже вырастет. Здесь том отключён, поэтому эксперимент не затрагивает смонтированные данные. Альтернатива lvextend -r просит LVM вызвать поддерживаемый инструмент ФС; всё равно проверяйте итог отдельно. Для XFS расширяют смонтированную ФС через xfs_growfs точка, универсальной команды уменьшения для XFS нет.

Увеличить диск VM без пропуска слоя

После роста диска в гипервизоре проверьте размер через lsblk. Если PV находится внутри раздела, сначала исследуйте таблицу и соседние разделы. growpart -N /dev/vda 3 показывает план роста третьего раздела без записи; настоящее growpart /dev/vda 3 возможно только при подходящем свободном пространстве. Затем pvresize /dev/vda3 делает объём доступным VG, lvextend выделяет его LV, а утилита файловой системы завершает расширение.

Пути в этом сценарии — иллюстрация, не готовая команда для любой VM. Если PV занимает целый диск, growpart пропускают. Если LVM отсутствует, команды PV/VG/LV не нужны. После каждого шага сопоставляйте lsblk, pvs, lvs и df; новая ёмкость должна появиться на соответствующем слое, прежде чем двигаться дальше.

Snapshot, RAID и резервная копия

LVM snapshot сохраняет представление тома на момент создания, используя место для изменений. Для классического snapshot учебного LV команда lvcreate -L 32M -s -n data_snap /dev/vg_course_demo/data резервирует ограниченный объём. Контролируйте заполнение через lvs -a -o lv_name,origin,data_percent: переполнение делает такой snapshot непригодным. Snapshot приложения с активной базой требует согласования с самой базой; состояние блоков не гарантирует логическую целостность транзакций.

RAID1 поддерживает зеркала данных на устройствах и помогает при отказе одного из них. Он повторяет и случайное удаление, поэтому не заменяет резервную копию. Состояние Linux MD читают через cat /proc/mdstat и mdadm --detail /dev/md/имя. При замене сначала подтверждают отказавший участник по серийному номеру, маркируют только его --fail, удаляют через --remove, подготавливают новый диск и добавляют --add, наблюдая rebuild. Нельзя выбирать участник только по непостоянному имени sdX или заменять сразу оба зеркала.

SMART и завершение тренировки

smartctl -a /dev/проверенное-устройство читает доступные показатели и журнал ошибок; для NVMe и некоторых USB-мостов набор полей отличается. Короткий тест запускается smartctl -t short, результат читается позже через smartctl -l selftest. Общий статус PASSED не доказывает отсутствие деградации: важны ошибки чтения, переназначения, журналы и тенденция. Длинный тест планируют с учётом нагрузки, а не запускают во время аварийного восстановления без причины.

Удаление учебного LVM выполняется сверху вниз после umount и проверки отсутствия пользователей: сначала snapshot и data через lvremove, затем vgremove vg_course_demo, pvremove двух учебных loop и losetup -d этих устройств. Только после этого удаляют образы. Нельзя подменять эту последовательность удалением файла, пока loop ещё активен.

Ошибка и диагностика

Сообщение о нехватке свободных extents относится к VG, даже если df показывает свободное место внутри другой ФС. Увеличение LV без увеличения ФС не меняет df. Уменьшение — отдельная, существенно более опасная процедура: порядок обратный, поддержка зависит от ФС, а ошибка уничтожает данные за новой границей.

Практика

На VM выполните тренировку с двумя образами, сохраните размеры до и после vgextend и lvextend. Докажите, что добавление PV само по себе не увеличило data, а рост LV отдельно потребовал resize2fs. Создайте snapshot отключённого тома, найдите его origin, затем удалите только учебные объекты в правильном порядке. Для RAID опишите, где хранится независимая копия при одновременном отказе всей машины.

Что важно запомнить

Каждый слой отвечает за собственный размер и отказоустойчивость. Проверяйте идентичность устройств, оставляйте свободное место для роста и различайте snapshot, зеркало и копию в другом месте.

Частые вопросы

Можно ли увеличить LVM без нового диска?

Да, если в VG уже есть свободные extents. Проверьте vgs, затем увеличьте нужный LV и его ФС, не затрагивая чужие логические тома.

Почему LVM не видит учебный loop?

Фильтр устройств или devices-файл конкретного дистрибутива может исключать loop. Изучите конфигурацию lvm2 в отдельной VM; не меняйте фильтры рабочего хоста ради примера.

Snapshot можно хранить как единственный backup?

Нет. Он зависит от исходного хранилища и может потеряться вместе с ним. Экспортируйте проверенную копию в независимое место и проверяйте восстановление.

Источники