Правильное увеличение размера диска в виртуальной машине

в 14:20, , рубрики: Песочница, метки: , , ,

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

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

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

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

3. Цепляем диск к другой (сервисной) виртуальной машине через управляющую машину с virt-manager, альтернативный вариант — загрузиться с CD с поддержкой lvm.
Cooтветственно, 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-database-2-vg/root -l +100%FREE
 lvextend  /dev/vm-database-2-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-database-2-vg/root

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

The filesystem on /dev/vm-database-2-vg/root is now 231278592 blocks long.

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


fsck -f /dev/mapper/vm--database--2--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-database-2:/etc# lvextend  /dev/vm-database-2-vg/root -l +100%FREE
 lvextend  /dev/vm-database-2-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-database-2:/etc# resize2fs /dev/vm-database-2-vg/root

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


df -h

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js