Bootstrap

Как безопасно расширить LUKS + LVM раздел в виртуальной машине QEMU с qcow2

Как безопасно расширить LUKS + LVM раздел в виртуальной машине QEMU с qcow2

Статья описывает реальный рабочий сценарий:

виртуальная машина Debian, диск в формате qcow2, разметка msdos, схема

extended → logical → LUKS → LVM → root.

Мы увеличиваем диск и расширяем root-раздел, не повреждая данные.


Исходные условия

* Виртуализация: QEMU/KVM

* Диск: qcow2

* Разметка: msdos

* Шифрование: LUKS

* Управление томами: LVM

* Корневой раздел находится внутри LUKS


0️⃣ Исходная разметка (реальные значения)

Проверка внутри ВМ

Terminal:

lsblk

Terminal:

vda                     35G
├─vda1                  966M   /boot
├─vda2                  19.1G  extended
└─vda5                  19.1G  logical
  └─vda5_crypt          19G    crypt
    ├─debian--vg-root   18G    /
    └─debian--vg-swap   1G     [SWAP]

Таблица разделов

Terminal:

fdisk -l /dev/vda

Terminal:

Device     Start      End        Type
/dev/vda1  2048       1980415    primary
/dev/vda2  1982462    41940991   extended
/dev/vda5  1982464    41940991   logical

? КРИТИЧЕСКИ ВАЖНО

LUKS-заголовок начинается строго с сектора 1982464.

Этот номер нельзя менять ни при каких обстоятельствах.


1️⃣ Snapshot qcow2 (обязательно)

Создание snapshot

Terminal:

qemu-img snapshot -c before_resize /var/lib/libvirt/images/debian13.qcow2

? Snapshot вшивается внутрь файла qcow2, отдельного файла не создаётся.

Проверка:

Terminal:

qemu-img snapshot -l /var/lib/libvirt/images/debian13.qcow2

Откат (если что-то пошло не так)

⚠️ ВМ должна быть выключена.

Terminal:

virsh shutdown debian13
qemu-img snapshot -a before_resize /var/lib/libvirt/images/debian13.qcow2

2️⃣ Увеличиваем размер qcow2

На хосте:

Terminal:

qemu-img resize /var/lib/libvirt/images/debian13.qcow2 +20G

Важно понимать:

* QEMU НЕ меняет partition table

* extended и logical остаются старого размера

* всё новое место — неразмечено


3️⃣ Почему нужен Live CD / Rescue

Нельзя менять logical-раздел с корнем из запущенной системы.

Загружаемся с Live ISO:

  1. Скачиваем Debian Live ISO:

Terminal:

wget https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/debian-live-13.0.0-amd64-standard.iso

Чтобы безопасно редактировать логический раздел /dev/vda5, раздел не должен быть смонтирован. подключаем порядок загрузки с cdrom так:

Terminal:

sudo qemu-system-x86_64 \
  -enable-kvm \
  -m 2048 -smp 2 \
  -machine pc-q35-7.2 \
  -cpu host \
  -drive file=debian-live-13.0.0-amd64-standard.iso,media=cdrom \
  -drive file=/var/lib/libvirt/images/debian13.qcow2,if=virtio,format=qcow2 \
  -boot order=d \
  -netdev bridge,br=virbr0,id=net0 \
  -device virtio-net-pci,netdev=net0 \
  -vga qxl \
  -device virtio-tablet \
  -spice port=5930,disable-ticketing=on \
  -device intel-hda -device hda-duplex \
  -monitor stdio

4️⃣ Определяем новый конец диска (off-by-one!)

В Live-системе:

Terminal:

parted /dev/vda

Terminal:

unit s
print

Пример вывода:

Terminal:

Disk /dev/vda: 73400320s

⚠️ Это количество секторов, а не последний сектор

Правило

Terminal:

LAST_SECTOR = Disk_size - 1

В нашем случае:

Terminal:

73400320 - 1 = 73400319

? 73400319 — последний допустимый сектор


5️⃣ ПРАВИЛЬНАЯ последовательность (КРИТИЧНО)

Нарушение порядка = потеря данных.


5.1️⃣ Расширяем extended (`vda2`)

Terminal:

resizepart 2 100%

(или эквивалентно resizepart 2 73400319)

Проверка:

Terminal:

print

Теперь /dev/vda2 заканчивается в конце диска.


5.2️⃣ Пересоздаём logical (`vda5`)

Terminal:

rm 5
mkpart logical 1982464 100%

? Здесь происходит НЕ создание нового раздела,

а восстановление записи о существующих данных.

* start строго прежний

* end — конец extended


5.3️⃣ Завершение работы с parted

Terminal:

print
quit

⚠️ В parted изменения применяются сразу, команды w нет.

Если появилось сообщение о kernel — просто перезагрузитесь.


6️⃣ Почему fdisk здесь НЕ подходит

fdisk может сказать:

Terminal:

First sector (1984510-...)
Value out of range

Почему это нормально

* fdisk считает, что вы создаёте новый пустой раздел

* он навязывает alignment

* он не умеет восстанавливать существующие данные

? parted работает на уровне секторов и подходит для этой задачи


❌ ФАТАЛЬНАЯ ОШИБКА (НИКОГДА ТАК НЕ ДЕЛАТЬ)

Terminal:

mkpart logical 1984512 100%

Это:

* сдвигает начало LUKS

* уничтожает заголовок

* = полная потеря данных


7️⃣ Расширяем LUKS

После загрузки в обычную систему:

Terminal:

cryptsetup resize vda5_crypt

8️⃣ Расширяем LVM (важный нюанс с именами)

Проверяем реальные имена

Terminal:

vgs
lvs

Пример:

Terminal:

VG         VSize   VFree
debian-vg  38G     20G

⚠️ debian--vg — это device-mapper alias,

реальное имя VG — debian-vg.


Последовательность команд

Terminal:

pvresize /dev/mapper/vda5_crypt
lvextend -l +100%FREE debian-vg/root

9️⃣ Расширяем файловую систему

ext4

Terminal:

resize2fs /dev/debian-vg/root

xfs

Terminal:

xfs_growfs /

? Проверка результата

Terminal:

lsblk
df -h
pvs
vgs
lvs

Ожидаемый результат:

* диск увеличен

* extended и logical растянуты

* LUKS использует весь раздел

* LVM использует всё пространство

* данные полностью сохранены


Итоговое правило (запомнить)

> **Если раздел уже содержал данные —

> start берётся из старой таблицы,

> даже если инструмент говорит “out of range”.**


Краткое резюме

* qemu-img resize не меняет разметку

* extended и logical нужно расширять вручную

* fdisk не подходит для восстановления logical

* parted — правильный инструмент

* start LUKS менять нельзя никогда

Копирование материалов разрешается только с указанием автора Roman Sakhno и индексируемой прямой ссылкой на сайт (http://itdid.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/sahroman.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/sahroman.

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как настроить свой компьютер

  2. Текстовая ссылка:

    Она выглядит вот так: Как настроить свой компьютер

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.