[Из песочницы] Правильное увеличение размера диска в виртуальной машине
Не претендуя на полноту, все же считаю, что это может пригодиться системным администраторам.Увеличение размера диска в виртуальной машине происходило при следующих вводных: формат файла виртуалки 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 поменяется на vda4. Запускаем сервисную машину (на ней тоже должен быть 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