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

15

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

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

Eil
источник
(И «Да», это возможно.)
Poige

Ответы:

4

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

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

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

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

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

3dinfluence
источник
При дальнейшем рассмотрении, возможно, стоит смонтировать хранилище SAN из самого гостя, как вы упомянули. И спасибо за дополнительную информацию.
Eil
тонкое выделение ресурсов также может быть дорогостоящим из-за фрагментации.
wazoox
15

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

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

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 monitor:

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

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

  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
    

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

AlexK
источник
1
Спасибо, что вернулись и добавили этот ответ! Делает вещи намного проще, чем старый способ сделать это.
Дейв Шерохман
4

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

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

nedm
источник
2
Проблема на самом деле не связана с KVM; из Linux вы просто не можете изменить размер диска, с которого вы загрузились. Это относится и к физическим RAID-массивам.
wazoox
3

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

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

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

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

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

Роберт
источник
0

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

dyasny
источник
Вы не ответили на вопрос тем ответом, который он может использовать.
Мэй
@ Дэвид: и что заставляет тебя так думать и даже понижать мой ответ? Как мой ответ не предоставляет обходного пути для рассматриваемой проблемы?
Дясный
Вы заявили «Невозможно, атм ...», а затем рассказали ему о функции, которая в данный момент невозможна. (Теперь, почти два года спустя, это могло бы быть по-другому - но этот ответ не говорит этого.)
Mei
1
Итак, два года назад я должен был сказать ему, что "это будет возможно через два года"? Я похож на пророка для вас? Тогда горячее подключение находилось в стадии разработки, и это именно то, что я сказал. Затем я предложил другой подход к подключению хранилища к ВМ, который не зависел бы от всего набора функций qemu. Никогда не указано , что это единственный подход, но это путь.
Дясный
Теперь я понимаю ... Я отредактировал ваш ответ, чтобы лучше показать ваши намерения.
Мэй