É possível redimensionar o disco online com o KVM?

14

Estamos avaliando a virtualização do KVM para Linux em alguns projetos. Tudo está indo bem até agora. Mas um dos nossos requisitos é a capacidade de adicionar espaço em disco a um convidado em execução sem reinicializá-lo ou colocá-lo offline. Isso é possível com o KVM?

A única coisa que encontrei até agora (mas ainda não testei) é a capacidade de conectar discos à máquina. Se eu seguir essa rota, sempre poderá adicionar o novo disco a um grupo de volumes LVM no convidado e estender o volume lógico escolhido. A maior desvantagem dessa abordagem é que, com o tempo, podemos acabar com os convidados com números variáveis ​​de discos virtuais. O espaço em disco "real" seria fornecido ao host por meio de uma SAN, para que possamos sempre adicionar mais espaço ao host sempre que necessário.

Eil
fonte
(E "Sim", é possível.)
poige

Respostas:

4

Acho que você está preso ao fazer o que mencionou se quiser fazê-lo sem desligar a máquina.

Por que não dar as LUNs das máquinas virtuais diretamente na SAN e gerenciar o espaço lá? Isso funciona melhor se você quiser usar recursos como a migração ao vivo de qualquer maneira.

O KVM é baseado no QEMU, portanto, todo o suporte ao formato de imagem vem desse projeto. Aqui está uma boa maneira de redimensionar os vários formatos suportados pelo Qemu / KVM. Mas o fórum do Qemu seria um bom lugar para fazer esta pergunta, se você não obtiver respostas sólidas aqui.

Outra opção que pode não ser ideal é usar qcow2 muito grande ou outro formato de imagem esparsa para as unidades. Assim, você pode fornecer a cada máquina uma pequena unidade para o sistema operacional e uma imagem grande e esparsa para dados no LVM. Isso manteria pelo menos o número de unidades / imagens virtuais que você está tendo que gerenciar. Porém, esse thin provisioning pode ser um problema, se você fizer isso com 1000 máquinas e todos ocuparem o espaço livre que eles veem.

XEN Eu acredito que tem as mesmas limitações atualmente.

3dinfluence
fonte
Em considerações adicionais, montar o armazenamento SAN a partir do próprio convidado, como você mencionou, é provavelmente o caminho a percorrer. E obrigado pela informação adicional também.
Eil
o provisionamento thin também pode ser caro devido à fragmentação.
wazoox
14

Sei que é uma pergunta antiga, mas a encontrei enquanto pesquisava a solução e espero que ajude outra pessoa.

Hoje, é possível redimensionar o disco rígido da máquina. Eu encontrei uma maneira de trabalhar aqui:

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

As etapas a seguir devem ser executadas:

  1. Descubra o nome do arquivo e o nome do dispositivo KVM do disco rígido que você deseja redimensionar:

    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>
    

O interessante para nós é o disco. Você deve procurar sourcee aliasbloquear. Para mim, o nome do arquivo é test.imge o nome do alias é virtio-disk0. Para esse nome, você precisa pré drive-- anexar para obter o nome da unidade qemu.

  1. Agora, na verdade, redimensionamos a unidade usando o monitor qemu:

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

Observe que o nome do arquivo foi usado sem a extensão .img e a unidade foi adicionada ao alias do disco. O 100G é o tamanho resultante da unidade que queremos ter

  1. Entre na máquina e verifique se o tamanho real foi alterado:

    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
    

É isso aí! Agora você pode criar novas partições ou redimensionar as existentes.

alexK
fonte
1
Obrigado por voltar e adicionar esta resposta! Torna as coisas muito mais simples do que a maneira antiga de fazê-lo.
Dave Sherohman
3

AFAIK, isso não é possível - você pode adicionar novas imagens de disco e, ao apontar, também pode adicionar novas imagens a um volume LVM, mas, para redimensionar uma imagem de disco inicializável ativa, você precisa fechá-la para baixo e edite as partições.

Aqui está uma boa explicação para expandir uma imagem. Embora exija o desligamento, você provavelmente poderá ficar com apenas alguns minutos de inatividade, especialmente se você evitar a opção --nonsparse image e colocar o disco do gparted em um arquivo iso e montar seu convidado KVM com antecedência. Espero que isto ajude.

nedm
fonte
2
O problema não é realmente relacionado ao KVM; do Linux, você simplesmente não pode redimensionar o disco do qual você inicializou. Também se aplica a matrizes RAID físicas.
wazoox
3

É possível mover um sistema Linux entre discos enquanto estiver em execução. A limitação é que você não pode alterar partições em um disco que possui partições em uso.

Para fazer isso, seu sistema de arquivos raiz deve estar em um LVM, isso geralmente significa que você precisa ter um sistema de arquivos de inicialização separado (isso não é, no entanto, essencial, apenas facilita as coisas)

Depois de conectar o novo disco, adicione-o ao LVM com vgextend, use pvmove para mover os rootfs para o novo disco, use lvextend e resize2fs para expandir o volume lógico e o sistema de arquivos, respectivamente, e use vgreduce para remover o disco antigo do volume grupo. Uma vez removido, o volume antigo pode ser desconectado.

Para o caso simples, você possui um pequeno disco para o sistema de arquivos de inicialização que você nunca precisa tocar. Mas se estiver sozinho, é fácil desmontá-lo, desconectá-lo, conecte um novo e reconstrua o disco de inicialização sem parar o sistema. (apenas não falhe enquanto estiver fazendo isso)

Nota: resize2fs também pode reduzir os sistemas de arquivos.

Robert
fonte
0

Não é possível caixa eletrônico, mas depois é um recurso em desenvolvimento. O que você pode fazer é conectar-se a um destino iSCSI da VM e gerenciar o espaço nesse destino no lado da SAN.

dyasny
fonte
Você não respondeu à pergunta com uma resposta que ele pode usar.
Mei
@ David: e o que faz você pensar isso e até rebaixar minha resposta? Como minha resposta não fornece uma solução alternativa para o problema em questão?
dyasny
Você declarou "Não é possível atm ..." e depois falou sobre um recurso que não é possível no momento. (Agora, quase dois anos depois, pode ser diferente - mas esta resposta não diz isso.)
Mei
1
Então, há dois anos, eu deveria ter dito a ele "será possível em dois anos"? Pareço um profeta para você? Naquela época, o hotplugging estava em desenvolvimento, e foi exatamente isso que eu disse. Em seguida, ofereci uma abordagem diferente para conectar o armazenamento à VM, que seria independente de todo o conjunto de recursos qemu. Nunca afirmou que era a única abordagem, mas é uma maneira.
dyasny
Entendo agora ... Editei sua resposta para mostrar melhor sua intenção.
Mei