Увеличение LVM диска в виртуальной машине на лету
Продолжая тему, описанную здесь habrahabr.ru/post/252973, опять пишу про увеличение дисков виртуальных машин.
Конфигурация следующая:
Гипервизор сервер Supermicro с KVM и libvirt на Ubuntu.
Гости — Ubuntu с LVM2.
Задача:
Увеличить размер системного дисков без выключения/перезагрузки гостевой ОС.
В комментариях к предыдущей статье habrahabr.ru/post/252973/#comment_8330673 farcaller написал:
Системный тоже можно на лету отресайзить. Для этого в libvirt есть команда:
virsh qemu-monitor-command resized-virtual-machine --hmp «block_resize $DRIVENAME $NEWSIZE»
Для HA проектов это очень важный момент, необходимо непрерывное функционирование сервиса.
Я решил попробовать изменить размер диска при помощи virsh.
Ниже результаты этого успешного эксперимента.
Коротко это было так:
На гипервизоре:
- virsh list
- virsh qemu-monitor-command vm-db --hmp «info block»
- virsh qemu-monitor-command vm-db --hmp «block_resize drive-virtio-disk0 1000G»
На госте:
- df -h
- parted /dev/vda
- resizepart 2
- 1000GB
- resizepart 5
- 1000GB
- q
- pvresize /dev/vda5
- lvscan
- lvextend /dev/vm-db-vg/root -l +100%FREE
- resize2fs /dev/vm-db-vg/root
- df -h
профит!
root@hyp-0:/local# ls ca-1-disk-1.qcow2 vm-db-disk-1.qcow2 root@hyp-0:/local# qemu-img info ./vm-db-disk-1.qcow2 image: ./vm-db-disk-1.qcow2 file format: qcow2 virtual size: 800G (858993459200 bytes) disk size: 717G cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false root@hyp-0:/local# virsh list Id Name State ---------------------------------------------------- 2 vm-ag-0 running 3 vm-db running 12 vm-ca-1 running root@hyp-0:/local# virsh qemu-monitor-command vm-db --hmp "info block" drive-virtio-disk0: /local/vm-db-disk-1.qcow2 (qcow2) drive-ide0-1-0: [not inserted] Removable device: not locked, tray closed root@hyp-0:/local# virsh qemu-monitor-command vm-db --hmp "block_resize drive-virtio-disk0 1000G" root@hyp-0:/local# qemu-img info /local/vm-db-disk-1.qcow2 image: /local/vm-db-disk-1.qcow2 file format: qcow2 virtual size: 1.0T (1073741824000 bytes) disk size: 717G cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false root@hyp-0:/local#
root@vm-db:/var/lib/postgresql/9.1/main# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vm--db--vg-root 730G 671G 22G 97% / none 4.0K 0 4.0K 0% /sys/fs/cgro udev 29G 4.0K 29G 1% /dev tmpfs 5.8G 360K 5.8G 1% /run none 5.0M 0 5.0M 0% /run/lock none 29G 0 29G 0% /run/shm none 100M 0 100M 0% /run/user /dev/vda1 236M 95M 129M 43% /boot root@vm-db:/sys/block/vda/device# parted /dev/vda GNU Parted 2.3 Using /dev/vda Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print Model: Virtio Block Device (virtblk) Disk /dev/vda: 1074GB 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 859GB 859GB extended 5 257MB 859GB 859GB logical lvm (parted) resizepart 2 End? [859GB]? 1000GB (parted) print Model: Virtio Block Device (virtblk) Disk /dev/vda: 1074GB 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 859GB 859GB logical lvm (parted) resizepart 5 End? [859GB]? 1000GB (parted) q root@vm-db:/sys/block/vda/device# lvscan File descriptor 7 (pipe:[9143432]) leaked on lvscan invocation. Parent PID 5423: bash ACTIVE '/dev/vm-db-vg/root' [741.17 GiB] inherit ACTIVE '/dev/vm-db-vg/swap_1' [58.59 GiB] inherit root@vm-db:/sys/block/vda/device# lvextend /dev/vm-db-vg/root -l +100%FREE File descriptor 7 (pipe:[9143432]) leaked on lvextend invocation. Parent PID 5423: bash Extending logical volume root to 872.49 GiB Logical volume root successfully resized root@vm-db:/sys/block/vda/device# resize2fs /dev/vm-db-vg/root resize2fs 1.42.9 (4-Feb-2014) Filesystem at /dev/vm-db-vg/root is mounted on /; on-line resizing required old_desc_blocks = 47, new_desc_blocks = 55 The filesystem on /dev/vm-db-vg/root is now 228718592 blocks long. root@vm-db:/sys/block/vda/device# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vm--db--vg-root 859G 678G 140G 83% / none 4.0K 0 4.0K 0% /sys/fs/cgroup udev 29G 4.0K 29G 1% /dev tmpfs 5.8G 364K 5.8G 1% /run none 5.0M 0 5.0M 0% /run/lock none 29G 0 29G 0% /run/shm none 100M 0 100M 0% /run/user /dev/vda1 236M 95M 129M 43% /boot
Хочу предупредить, что цифры в логах могут содержать неточности, я их восстанавливал, чистил и лог гостя собран с 2х виртуальных машин, на которых я успешно отресайзил / диски на лету.
В заключение хочу сказать огромное спасибо farcaller за наводку на действительно нужную возможность.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.