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):

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