Назад | Перейти на главную страницу

Возможно ли оперативное изменение размера диска с помощью KVM?

Мы оцениваем KVM для виртуализации Linux в нескольких проектах. Пока все идет хорошо. Но одно из наших требований - это возможность добавлять дисковое пространство к работающему гостю без перезагрузки или отключения его. Возможно ли это с KVM?

Единственное, что я нашел до сих пор (но еще не тестировал), это возможность горячего подключения дисков к машине. Если я пойду по этому пути, то всегда смогу добавить новый диск в группу томов LVM на гостевой машине, а затем расширить выбранный логический том. Самым большим недостатком этого подхода является то, что со временем мы можем получить гостевые системы с переменным количеством виртуальных дисков. «Настоящее» дисковое пространство будет предоставлено хосту по SAN, поэтому мы всегда можем добавить больше места на хост.

Я знаю, что это старый вопрос, но я нашел его во время поиска решения в Google и надеюсь, что это может помочь кому-то другому.

На сегодняшний день это является возможно изменить размер жесткого диска на машине. Я нашел здесь рабочий способ:

https://bugzilla.redhat.com/show_bug.cgi?id=648594

Необходимо выполнить следующие шаги:

  1. Узнайте имя файла и имя KVM-устройства жесткого диска, размер которого нужно изменить:

    root@vhstage02:/data# virsh dumpxml test | xpath -e /domain/devices/disk
    Found 2 nodes in stdin:
    -- NODE --
    <disk type="file" device="disk">
      <driver name="qemu" type="qcow2" />
      <source file="/data/test.img" />
      <backingStore />
      <target dev="vda" bus="virtio" />
      <alias name="virtio-disk0" />
      <address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x0" />
    </disk>
    -- NODE --
    <disk type="file" device="cdrom">
      <driver name="qemu" type="raw" />
      <source file="/data/images/debian-8.2.0-amd64-netinst.iso" />
      <backingStore />
      <target dev="hda" bus="ide" />
      <readonly />
      <alias name="ide0-1-1" />
      <address type="drive" controller="0" bus="1" target="0" unit="1" />
    </disk>
    

Нас интересует диск. Ты должен искать source и alias блоки. Для меня имя файла test.img и псевдоним virtio-disk0. К этому имени нужно добавить drive- чтобы получить имя диска qemu.

  1. Теперь мы фактически изменяем размер диска с помощью монитора qemu:

    virsh qemu-monitor-command test block_resize  drive-virtio-disk0  100G --hmp
    

Обратите внимание, что имя файла использовалось без расширения .img, а диск был добавлен к псевдониму диска. 100 ГБ - это итоговый размер диска, который мы хотим иметь.

  1. Войдите в систему и убедитесь, что фактический размер был изменен:

    root@test:~# fdisk -l
    
    Disk /dev/vda: 100 GiB, 107374182400 bytes, 209715200 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x7e6e7f71
    
    Device     Boot  Start       End   Sectors  Size Id Type
    /dev/vda1  *      2048    499711    497664  243M 83 Linux
    /dev/vda2       501758 167770111 167268354 79.8G  5 Extended
    /dev/vda5       501760 167770111 167268352 79.8G 8e Linux LVM
    

Это оно! Теперь вы можете создавать новые разделы или изменять размеры существующих.

AFAIK, это невозможно - вы можете добавлять новые образы дисков, и, как вы указываете, вы также можете добавлять новые образы в том LVM, но для изменения размера активного загрузочного образа диска вам необходимо иметь возможность его закрыть вниз и отредактируйте разделы.

Вот хорошее объяснение для увеличения изображения. Хотя для этого требуется завершение работы, вам, вероятно, удастся избежать простоя всего на пару минут, особенно если вы не используете параметр --nonsparse image, добавляете gparted-диск в файл iso и заранее монтируете в гостевом KVM. Надеюсь это поможет.

Я думаю, вы застряли, делая то, о чем упомянули, если хотите сделать это, не останавливая машину.

Почему бы просто не предоставить виртуальным машинам LUN прямо из SAN и управлять пространством там? Это работает лучше, если вы все равно хотите использовать такие функции, как живая миграция.

KVM основан на QEMU, поэтому вся поддержка форматов изображений исходит из этого проекта. Вот хороший как изменить размер различные форматы, поддерживаемые Qemu / KVM. Но форум Qemu будет хорошим местом, чтобы задать этот вопрос, если вы не получите здесь однозначных ответов.

Другой вариант, который может быть не идеальным, - использовать для дисков действительно большой qcow2 или другой формат разреженных образов. Таким образом, вы можете дать каждой машине небольшой диск для ОС и большой разреженный образ для данных в LVM. Это по крайней мере сохранит количество виртуальных дисков / образов, которыми вы должны управлять. Но это тонкое выделение ресурсов может стать проблемой, если вы сделаете это на 1000 машин, и все будут использовать ваше свободное пространство, которое они видят.

XEN, я считаю, в настоящее время имеет те же ограничения.

Можно перемещать систему Linux между дисками во время ее работы. Ограничение в том, что вы не можете изменить перегородки на диске, на котором перегородки в использовании.

Для этого ваша корневая файловая система должна быть на LVM, это часто означает, что вам нужно иметь отдельную загрузочную файловую систему (это, однако, не обязательно, это просто упрощает задачу)

После подключения нового диска вы добавляете его в LVM с помощью vgextend, используйте pvmove для перемещения rootfs на новый диск, используйте lvextend и resize2fs для расширения логического тома и файловой системы соответственно, затем используйте vgreduce для удаления старого диска из тома группа. После удаления старый том можно отключить.

В простом случае у вас есть крошечный диск для загрузочной файловой системы, к которому вам никогда не придется прикасаться. Но если это само по себе, это легко чтобы размонтировать его, отключите его, подключите новый и восстановите загрузочный диск, не останавливая систему. (только не разбейся, пока делаешь это)

Примечание: resize2fs также может сжимать файловые системы.

Невозможно банкомат, но, кстати, это функция в стадии разработки. Вместо этого вы можете подключиться к цели iSCSI из виртуальной машины и управлять пространством на этой цели на стороне SAN.