Resize vmdk

Resize vmdk

Не претендуя на полноту, все же считаю, что это может пригодиться системным администраторам.

Увеличение размера диска в виртуальной машине происходило при следующих вводных: формат файла виртуалки qcow2, виртуальная машина использует lvm и ext4, root partition находится в extended partition. Действо обычно происходит ночью, когда нагрузка минимальна и даунтайм не сильно давит на нервы. Хотя при работе с highload-проектами адреналина всё равно выделяется достаточно, чтобы 10 раз подумать, перед тем, как что-либо делать. Поэтому перед началом процесса, лучше отключить систему оповещения по СМС, чтобы не пугать коллег сообщениями типа «Server down» среди ночи.

1. Выключить виртуальную машину
Я сделал это через GUI, нажав на красную кнопку power в virt-manager. Если нет virt-manager, это можно сделать дав команду shutdown в командной строке виртуальной машины.
2. На гипервизоре увеличиваем размер файла (в моем случае на 200 гигабайт)

qemu-img resize /path/to/vm-disk.qcow2 +200G

3. Цепляем диск к другой (сервисной) виртуальной машине через управляющую машину с virt-manager, альтернативный вариант — загрузиться с CD с поддержкой lvm.
Cooтветственно, при загрузке с LiveCD, vdb поменяется на vda
4. Запускаем сервисную машину (на ней тоже должен быть lvm) через virt-manager.
5. Далее на сервисной (или LVM liveCD) машине:

parted /dev/vdb

получим размер диска:

 (parted) print Model: Virtio Block Device (virtblk) Disk /dev/vdb: 1288GB Sector size (logical/physical): 512B/512B Partition Table: msdos  Number  Start   End     Size    Type      File system  Flags  1      1049kB  256MB   255MB   primary   ext2         boot  2      257MB   1000GB  1000GB  extended  5      257MB   1000GB  1000GB  logical                lvm

увеличим extended partition, если этого не сделать получим Error: Can’t have overlapping partitions. ubuntu parted -gparted

 (parted) resizepart 2 End?  [1000GB]? 1288Gb

увеличим logical root partition

 (parted) resizepart 5 End?  [1000GB]? 1288Gb (parted) q

теперь нужно увеличить размер физического диска в lvm

 pvresize /dev/vdb5

увеличиваем размер логического диска в lvm

 root@vm-service:/etc# lvextend  /dev/vm-db-0-vg/root -l +100%FREE  lvextend  /dev/vm-db-0-vg/root -l +100%FREE File descriptor 7 (pipe:[7918]) leaked on lvextend invocation. Parent PID 1378: bash (на это можно не обращать внимания)   Extending logical volume root to 1.12 TiB   Logical volume root successfully resized root@vm-service:/etc# resize2fs /dev/vm-db-0-vg/root 

В выводе resize2fs должно быть такое:

The filesystem on /dev/vm-db-0-vg/root is now 231278592 blocks long.

теперь проверим и исправим файловую систему:

 fsck -f /dev/mapper/vm--db--0--vg-root 

диск готов
6. выключаем сервисную машину, отключаем от нее диск в virt-manager
из командной строки, не используя GUI для управления виртуальными машинам можно сделать это при помощи virsh, использование которого хорошо описано здесь: управление виртуальными машинами из командной строки
7. Запускаем сервер
Увеличение с минимальным даунтаймом, почти на лету, проверено на lvm2/ext4 можно сделать так:
1. Увеличение размера файла на 200 гигабайт выполняется на гипервизоре

qemu-img resize /path/to/vm-disk.qcow2 +200G

2. Перезагрузка виртуальной машины
3. На виртуальной машине

parted /dev/vda

Посмотрим размер физического диска и всех логических разделов

(parted) print Model: Virtio Block Device (virtblk) Disk /dev/vda: 1288GB Sector size (logical/physical): 512B/512B Partition Table: msdos  Number  Start   End     Size    Type      File system  Flags  1      1049kB  256MB   255MB   primary   ext2         boot  2      257MB   1000GB  1000GB  extended  5      257MB   1000GB  1000GB  logical                lvm

увеличим extended partition

  (parted) resizepart 2 End?  [1000GB]? 1288Gb

увеличим logical root partition

 (parted) resizepart 5 End?  [1000GB]? 1288Gb (parted) q

теперь нужно увеличить размер физического диска в lvm

 pvresize /dev/vda5

увеличиваем размер логического диска в lvm

 root@vm-db-0:/etc# lvextend  /dev/vm-db-0-vg/root -l +100%FREE  lvextend  /dev/vm-db-0-vg/root -l +100%FREE File descriptor 7 (pipe:[7918]) leaked on lvextend invocation. Parent PID 1378: bash    Extending logical volume root to 1.12 TiB   Logical volume root successfully resized root@vm-db-0:/etc# resize2fs /dev/vm-db-0-vg/root

В этом случае проверять и исправлять файловую систему нельзя, fsck -f /dev/mapper/vm—db—0—vg-root убьёт файловую систему
Проверить, что получилось:

 df -h

Продолжение темы

Источник: habr.com


Добавить комментарий