Il ridimensionamento del disco online è possibile con KVM?


15

Stiamo valutando la virtualizzazione di KVM per Linux su alcuni progetti. Tutto sta andando bene finora. Ma uno dei nostri requisiti è la possibilità di aggiungere spazio su disco a un guest in esecuzione senza riavviarlo o metterlo offline. Questo è possibile con KVM?

L'unica cosa che ho trovato finora (ma non ho ancora testato) è la possibilità di collegare a caldo i dischi nella macchina. Se seguo questa strada, allora potrei sempre aggiungere il nuovo disco a un gruppo di volumi LVM sul guest e quindi estendere il volume logico scelto. Il più grande svantaggio di questo approccio è che nel tempo potremmo finire con ospiti con un numero variabile di dischi virtuali. Lo spazio su disco "reale" verrebbe fornito all'host tramite una SAN, in modo da poter sempre aggiungere più spazio all'host ogni volta.


(E "Sì", è possibile.)
poige

Risposte:


4

Penso che sei bloccato a fare quello che hai detto se vuoi farlo senza smontare la macchina.

Perché non dare semplicemente i LUN delle macchine virtuali direttamente dalla SAN e gestire lo spazio lì? Funziona meglio se si desidera utilizzare comunque funzionalità come la migrazione in tempo reale.

KVM si basa su QEMU, quindi tutto il supporto per il formato delle immagini proviene da quel progetto. Ecco un buon ridimensionamento dei vari formati supportati da Qemu / KVM. Ma il forum Qemu sarebbe un buon posto per porre questa domanda se non ottieni risposte valide qui.

Un'altra opzione che potrebbe non essere ideale è quella di utilizzare qcow2 molto grande o altri formati di immagini sparse per le unità. Quindi potresti dare ad ogni macchina una piccola unità per il sistema operativo e una grande immagine sparsa per i dati in LVM. Ciò manterrebbe almeno il numero di unità / immagini virtuali che devi gestire. Ma questo thin provisioning potrebbe essere un problema se lo fai su 1000 macchine e tutti ti occupano dello spazio libero che vedono.

XEN Credo che abbia gli stessi limiti attualmente.


A ulteriore considerazione, il montaggio dello storage SAN dall'interno del guest stesso, come accennato, è probabilmente la strada da percorrere. E grazie anche per le informazioni aggiuntive.
Eil,

anche il thin provisioning può essere costoso a causa della frammentazione.
wazoox,

15

So che è una vecchia domanda, ma l'ho trovata mentre cercavo la soluzione su Google e spero che possa aiutare qualcun altro.

Ad oggi è possibile ridimensionare il disco rigido sulla macchina. Ho trovato un modo di lavorare qui:

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

È necessario eseguire i seguenti passaggi:

  1. Scopri un nome file e il nome del dispositivo KVM del disco rigido che desideri ridimensionare:

    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>
    

Quello interessante per noi è il disco. Dovresti cercare sourcee aliasbloccare. Per me il nome del file è test.imge il nome alias è virtio-disk0. A questo nome, è necessario anteporre drive-per ottenere il nome dell'unità qemu.

  1. Ora effettivamente ridimensioniamo l'unità utilizzando il monitor qemu:

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

Si noti che il nome file è stato utilizzato senza estensione .img e unità- è stato aggiunto all'alias del disco. Il 100G è la dimensione risultante dell'unità che vogliamo avere

  1. Accedi alla macchina e verifica che le dimensioni effettive siano state modificate:

    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
    

Questo è tutto! Ora puoi creare nuove partizioni o ridimensionare quelle esistenti.


1
Grazie per essere tornato e aver aggiunto questa risposta! Rende le cose molto più semplici del vecchio modo di farlo.
Dave Sherohman,

4

AFAIK, questo non è possibile: puoi aggiungere nuove immagini del disco e, come fai notare, puoi anche aggiungere nuove immagini a un volume LVM, ma per ridimensionare un'immagine disco attiva e avviabile devi essere in grado di chiuderla giù e modifica le partizioni.

Ecco una buona spiegazione per espandere un'immagine. Anche se richiede l'arresto, probabilmente potresti cavartela con solo un paio di minuti di inattività, specialmente se eviti l'opzione --nonsparse image e dd il disco gparted in un file iso e monti in anticipo il tuo guest KVM. Spero che sia di aiuto.


2
Il problema non è in realtà relativo a KVM; da Linux non puoi semplicemente ridimensionare il disco da cui hai avviato. Si applica anche agli array RAID fisici.
Wazoox,

3

È possibile spostare un sistema Linux tra i dischi mentre è in esecuzione. Il limite è che non è possibile modificare le partizioni su un disco con partizioni in uso.

Per fare questo il tuo filesystem di root deve essere su un LVM, questo spesso significa che devi avere un filesystem di avvio separato (questo non è, tuttavia, essenziale, semplifica le cose)

Dopo aver collegato il nuovo disco, lo si aggiunge a LVM con vgextend, si usa pvmove per spostare i rootfs sul nuovo disco, si usano rispettivamente lvextend e resize2fs per espandere rispettivamente il volume logico e il filesystem e poi usare vgreduce per rimuovere il vecchio disco dal volume gruppo. Una volta rimosso, il vecchio volume può essere scollegato.

Per il semplice caso hai un minuscolo disco per il filesystem di avvio che non devi mai toccare. Ma se è da solo è facile smontarlo, scollegarlo, collegarne uno nuovo e ricostruire il disco di avvio senza arrestare il sistema. (non schiantarti mentre lo fai)

Nota: resize2fs può anche ridurre i filesystem.


0

Non è possibile atm, ma afaik è una funzionalità in fase di sviluppo. Quello che puoi fare invece è connetterti a una destinazione iSCSI dalla VM e gestire lo spazio su quella destinazione sul lato SAN.


Non hai risposto alla domanda con una risposta che può usare.
Mei,

@ David: e cosa te lo fa pensare e anche sottovalutare la mia risposta? In che modo la mia risposta non fornisce una soluzione alternativa al problema attuale?
dyasny,

Hai dichiarato "Non è possibile ...", poi gli hai detto di una caratteristica che al momento non è possibile. (Ora, quasi due anni dopo, potrebbe essere diverso - ma questa risposta non lo dice.)
Mei

1
Quindi due anni fa avrei dovuto dirgli "sarà possibile tra due anni"? Ti sembro un profeta? Allora, hotplugging era in fase di sviluppo, ed è esattamente quello che ho detto. Quindi ho offerto un approccio diverso per ottenere l'archiviazione collegata alla VM, che sarebbe indipendente dall'intero set di funzionalità di qemu. Non ho mai dichiarato che fosse l'unico approccio, ma è un modo.
dyasny,

Ora capisco ... Ho modificato la tua risposta per mostrare meglio il tuo intento.
Mei,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.