Ho installato un guest Ubuntu su un host CentOS KVM con inizialmente 6 GB di spazio su disco. Come posso aumentare lo spazio su disco del guest Ubuntu dalla riga di comando?
EDIT # 1: sto usando un file di immagine del disco (qemu).
Ho installato un guest Ubuntu su un host CentOS KVM con inizialmente 6 GB di spazio su disco. Come posso aumentare lo spazio su disco del guest Ubuntu dalla riga di comando?
EDIT # 1: sto usando un file di immagine del disco (qemu).
Risposte:
qemu-img resize vmdisk.img +10G
per aumentare la dimensione dell'immagine di 10 GBstart the VM, resize the partitions and LVM structure within it normally
Come farlo? Per favore, spiegalo.
Nel bene o nel male, i comandi seguenti verranno eseguiti anche se il disco virtuale di destinazione è montato. Ciò può essere utile in ambienti in cui il disco non può essere smontato (come una partizione di root), la VM deve rimanere accesa e il proprietario del sistema è disposto ad assumersi il rischio di corruzione dei dati . Per rimuovere tale rischio, è necessario accedere alla VM e smontare prima il disco di destinazione, cosa che non è sempre possibile.
Eseguire quanto segue dall'hypervisor KVM.
Aumenta la dimensione del file immagine del disco stesso (specifica la quantità da aumentare):
qemu-img resize <my_vm>.img +10G
Ottieni il nome del dispositivo virtio, tramite la shell libvirt ( drive-virtio-disk0
in questo esempio):
virsh qemu-monitor-command <my_vm> info block --hmp
drive-virtio-disk0: removable=0 io-status=ok file=/var/lib/libvirt/images/<my_vm>.img ro=0 drv=raw encrypted=0
drive-ide0-1-0: removable=1 locked=0 tray-open=0 io-status=ok [not inserted]
Segnala al driver virtio di rilevare le nuove dimensioni (specifica la nuova capacità totale):
virsh qemu-monitor-command <my_vm> block_resize drive-virtio-disk0 20G --hmp
Quindi accedere alla macchina virtuale. In esecuzione dmesg
dovrebbe segnalare che il disco virtio ha rilevato un cambiamento di capacità. A questo punto, vai avanti e ridimensiona le tue partizioni e la struttura LVM secondo necessità.
Queste domande sul server sono simili ma più specifiche, il ridimensionamento del disco online di KVM? & Centos Xen ridimensiona la partizione DomU e il gruppo di volumi . Il primo pone la domanda su come aumentare un ospite KVM mentre è online, mentre il secondo è specifico per XEN usando LVM. Sto chiedendo come farlo mentre KVM è offline.
NOTA: questo collegamento è stato utile per METHOD # 1 e mostra come ottenere l'aumento dello spazio su disco di una KVM (basato su ext3), HOWTO: ridimensionare un'immagine della macchina virtuale KVM .
Una cosa da tenere presente con i guest KVM è che le partizioni che stanno usando possono influenzare il metodo che puoi usare per aumentare il loro spazio su disco.
METODO # 1: le partizioni sono basate su ext2 / ext3 / ext4
I dadi di questo metodo sono i seguenti:
# 1. stop the VM
# 2. move the current image
mv mykvm.img mykvm.img.bak
# 3. create a new image
qemu-img create -f raw addon.raw 30G
# 4. concatenate the 2 images
cat mykvm.img.bak addon.raw >> mykvm.img
Ora con il file mykvm.img più grande in mano, avvia gparted ed estende la partizione esistente nello spazio su disco appena aggiunto. Quest'ultimo passaggio sostanzialmente estende la partizione del sistema operativo in modo che possa sfruttare lo spazio aggiuntivo.
METODO # 2: le partizioni sono basate su LVM
Ecco i passaggi che ho seguito approssimativamente per ridimensionare un guest KVM che utilizzava LVM internamente.
eseguire fdisk nella VM ed eliminare e ricreare la partizione LVM
% fdisk /dev/vda
...
Device Boot Start End Blocks Id System
/dev/vda1 * 1 13 104391 83 Linux
/dev/vda2 14 3263 26105625 8e Linux LVM
Command (m for help): d
Partition number (1-4): 2
Command (m for help): p
Disk /dev/vda: 48.3 GB, 48318382080 bytes
255 heads, 63 sectors/track, 5874 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/vda1 * 1 13 104391 83 Linux
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (14-5874, default 14): 14
Last cylinder or +size or +sizeM or +sizeK (14-5874, default 5874):
Using default value 5874
Command (m for help): p
Disk /dev/vda: 48.3 GB, 48318382080 bytes
255 heads, 63 sectors/track, 5874 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/vda1 * 1 13 104391 83 Linux
/dev/vda2 14 5874 47078482+ 83 Linux
Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 8e
Changed system type of partition 2 to 8e (Linux LVM)
Command (m for help): p
Disk /dev/vda: 48.3 GB, 48318382080 bytes
255 heads, 63 sectors/track, 5874 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/vda1 * 1 13 104391 83 Linux
/dev/vda2 14 5874 47078482+ 8e Linux LVM
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or
resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
%
Riavvia la VM
Ridimensiona il volume fisico LVM
% pvdisplay
--- Physical volume ---
PV Name /dev/vda2
VG Name VolGroup00
PV Size 24.90 GB / not usable 21.59 MB
Allocatable yes (but full)
PE Size (KByte) 32768
Total PE 796
Free PE 0
...
% pvresize /dev/vda2
% pvdisplay
--- Physical volume ---
PV Name /dev/vda2
VG Name VolGroup00
PV Size 44.90 GB / not usable 22.89 MB
Allocatable yes
PE Size (KByte) 32768
Total PE 1436
Free PE 640
...
Ridimensiona il volume logico LVM
% lvresize /dev/VolGroup00/LogVol00 -l +640
Extending logical volume LogVol00 to 43.88 GB
Logical volume LogVol00 successfully resized
Crescere il file system
% resize2fs /dev/VolGroup00/LogVol00
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/VolGroup00/LogVol00 is mounted on /; on-line resizing required
Performing an on-line resize of /dev/VolGroup00/LogVol00 to 11501568 (4k) blocks.
The filesystem on /dev/VolGroup00/LogVol00 is now 11501568 blocks long.
Quanto sopra è il mio esempio, ma ho seguito i passaggi di questo sito Web
virt-manager
e ho ampiamente utilizzato il metodo n. 1 e n. 2 prima di migrare i nostri server KVM su una versione più recente di KVM (CentOS 5 -> CentOS 6). Ora uso anche il qemu-img resize
metodo.
lvextend /dev/Volgroup/lvname /dev/vda2
(tutto su una riga, dove / dev / vda2 sarebbe il tuo volume fisico). Senza altre opzioni, utilizzerà la dimensione massima in quel gruppo di volumi.
Ridimensiona ed espandi le partizioni interne in un solo passaggio
Avevo un host Ubuntu con un'immagine del file guest qcow2 e volevo ridimensionare il disco ed espandere le partizioni appropriate in un solo passaggio. Richiede di impostare le utilità del filesystem guest libvirt, ma quelle sono comunque utili da avere in giro.
Ispirazione da qui: http://libguestfs.org/virt-resize.1.html
Il comando chiave qui è: virt-resize
Preparazione:
* Install libvirt file system utilities package
* sudo apt-get install libguestfs-tools
* Test to see if it works (it won't) -- you need to see "===== TEST FINISHED OK =====" at the bottom:
* sudo libguestfs-test-tool
* If you don't see "===== TEST FINISHED OK =====" at the bottom then repair it:
* sudo update-guestfs-appliance
* Run the test again and verify it works
* sudo libguestfs-test-tool
Ora procedi come segue:
1) spegnere l'ospite:
2) Controlla il dimensionamento corrente e visualizza il nome della partizione che vuoi espandere usando l'utilità libvirt:
sudo virt-filesystems --long --parts --blkdevs -h -a name-of-guest-disk-file
3) Crea il nuovo disco di output (40G):
qcow: sudo qemu-img create -f qcow2 -o preallocation=metadata outdisk 40G
img: sudo truncate -s 40G outdisk
4) Copia il vecchio nel nuovo mentre espandi la partizione appropriata (supponendo che la partizione del disco dal passaggio 2 fosse / dev / sda1):
sudo virt-resize --expand /dev/sda1 indisk outdisk
5) Rinomina il file indisk come backup, rinomina l'outdisk come indisk (o modifica l'XML guest)
6) Riavviare il guest e testare attentamente il nuovo file su disco prima di eliminare il file originale
7) Profitto!
-o preallocation=metadata
crea un file sparso. Con questa opzione pre-alloca l'intera dimensione.
-o preallocation=metadata
e se non lo fai dovresti anche saltare il truncate
passaggio. virt-resize
crescerà comunque il file appropriato.
Se si utilizza LVM all'interno della VM, il modo più semplice per farlo sarebbe quello di aggiungere un nuovo disco virtuale alla VM ed espandere il gruppo di volumi e i volumi logici su quello.
Per verificare se stai usando l'esecuzione LVM sudo pvs; sudo vgs; sudo lvs
, otterrai qualcosa del genere:
PV VG Fmt Attr PSize PFree
/dev/vda1 vgWWW lvm2 a- 30.00g 0
VG #PV #LV #SN Attr VSize VFree
vgWWW 1 2 0 wz--n- 30.00g 0
LV VG Attr LSize
root vgWWW -wi-ao 28.80g
swap vgWWW -wi-ao 1.19g
se il sistema operativo della VM utilizza LVM. Nell'esempio sopra la VM ha un disco virtuale da 30 Gbyte, configurato usando LVM con un gruppo di volumi chiamato vgWWW contenente due volumi logici, uno per lo scambio e uno per tutto il resto.
Se LV è in uso nella VM:
sudo pvcreate /dev/vdb
sudo vgextend vgWWW /dev/vdb
sudo lvextend --extents +100%FREE /dev/vgWWW/root
(o qualcosa del genere sudo lvextend --size +8G /dev/vgWWW/root
se non vuoi farlo crescere fino in fondo, questo esempio aggiungerebbe 8Gb al volume)resize2fs /dev/vgWWW/root
Nota: quanto sopra presuppone che i nomi vg / lv siano gli stessi del mio esempio, il che è improbabile, cambia come appropriato, anche se la VM aveva già un'unità virtuale chiamata vdb
nuova sarà un'altra ( vdc
e così via)
Nota: resize2fs
funziona solo su filesystem ext2, ext3 ed ext4. Se stai usando qualcos'altro, si verificherà un errore e non farà nulla.
Nota: poiché stai ridimensionando un filesystem live resize2fs
non ti chiederà di eseguire fsck
prima come farebbe per un filesystem non montato, andrà avanti. Potresti voler eseguire un controllo del filesystem di sola lettura non ci sono problemi prima di procedere.
È possibile effettuare il ridimensionamento online. libvirtd lo supporta nativamente:
Trova il nome del dispositivo a blocchi. Dovrebbe essere qualcosa come "vda"
$ virsh domblklist <libvirtd_vm_name>
Ridimensiona il dispositivo virtuale:
$ virsh blockresize --domain <libvirtd_vm_name> --path <block_device_name> --size <new_size>
Ecco un esempio in cui espanderò il vda
disco da 50GB
a 51GB
per undercloud
VM.
[root@gss-rhos-4 ~]# virsh domblklist undercloud
Target Source
------------------------------------------------
vda /home/images/undercloud.qcow2
Ora dai un'occhiata ai dettagli del file immagine .qcow2:
[root@gss-rhos-4 ~]# qemu-img info /home/images/undercloud.qcow2
image: /home/images/undercloud.qcow2
file format: qcow2
virtual size: 50G (53687091200 bytes)
disk size: 38G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false
Ora ridimensioniamo il dispositivo del blocco vda:
[root@gss-rhos-4 ~]# virsh blockresize undercloud vda 51G
Block device 'vda' is resized
E confermare:
[root@gss-rhos-4 ~]# qemu-img info /home/images/undercloud.qcow2
image: /home/images/undercloud.qcow2
file format: qcow2
virtual size: 51G (54760833024 bytes)
disk size: 38G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false
[root@gss-rhos-4 ~]#
Quindi è possibile utilizzare questo script all'interno della VM per mostrare i comandi per ridimensionare i dispositivi a blocchi e fs: https://github.com/mircea-vutcovici/scripts/blob/master/vol_resize.sh .
Esiste la possibilità di aumentare le dimensioni del disco della VM senza riavviare la VM se si utilizzano virtio drive e LVM.
(Facoltativo) Crea una partizione primaria con fdisk per ottenere / dev / vdb1, quindi usa kpartx -a / dev / vdb per rileggere la tabella delle partizioni
Usa vgextend vg_name / dev / vdb1 (o / dev / vdb se non hai creato una partizione)
Hai finito.
In questo modo puoi espandere la partizione desiderata:
# see what partitions you have?
virt-filesystems --long -h --all -a olddisk
truncate -r olddisk newdisk
truncate -s +5G newdisk
# Note "/dev/sda2" is a partition inside the "olddisk" file.
virt-resize --expand /dev/sda2 olddisk newdisk
Vedi altri esempi qui .
Un altro modo per farlo
truncate -s +2G vm1.img
vai a fare un rescan del disco e dopo che puoi fare il tuo ridimensionamento lvm.
Se hai LVM nella tua VM, questo è pazzo facile e veloce.
sudo system-config-lvm
terminale) *.Ho trovato la GUI abbastanza intuitiva, ma segui i prossimi passi se hai problemi.
Nota! Almeno sulla GUI LVM di CentOS 6 non è installato per impostazione predefinita, ma è possibile installarlo con yum install system-config-lvm
.
Ridimensiona immagine:
qemu-img resize vmdisk.img +16G
aumenta le dimensioni dell'immagine di 16 GB.
Se l'immagine ha GPT (tabella delle partizioni GUID), le dimensioni dell'unità utilizzate in GPT differiranno dalle nuove dimensioni, è necessario correggerlo con gdisk
:
MY_DRIVE=/dev/vda
gdisk $MY_DRIVE <<EOF
w
Y
Y
EOF
o con parted
:
parted $MY_DRIVE print Fix
Per qualche motivo la parted
correzione non funziona quando non viene presentato nessun tty (ad esempio quando si effettua il provisioning con Vagrant), quindi uso gdisk
.
Aumenta le dimensioni della partizione per riempire tutto lo spazio disponibile:
MY_PARTITION_GUID=$(
gdisk $MY_DRIVE <<EOF | sed -n -e 's/^Partition unique GUID: //p'
i
EOF
)
MY_PARTITION_FIRST_SECTOR=$(
gdisk $MY_DRIVE <<EOF | sed -n -e 's/^First sector: \([0-9]\+\).*/\1/p'
i
EOF
)
gdisk $MY_DRIVE <<EOF
d
n
$MY_PARTITION_FIRST_SECTOR
x
a
2
c
$MY_PARTITION_GUID
w
Y
EOF
La x a 2 <Enter>
parte è facoltativa e necessaria se si utilizza un BIOS legacy.
MY_PARTITION_GUID=...
e le c $MY_PARTITION_GUID
parti sono anche opzionali e necessarie solo se si utilizza l'UUID della partizione in /etc/fstab
o altrove.
Riavvia o rileggi le partizioni con partx -u $MY_DRIVE
o partprobe
.
Estendere partizione, ad esempio per ext2
, ext3
o ext4
:
MY_PARTITION="${MY_DRIVE}1"
resize2fs $MY_PARTITION
Puoi usare solus vm con gparted montato. Una volta utilizzato con il gparted è possibile avviare facilmente il sistema e regolare lo spazio. Assicurati di avere impostato la priorità di avvio corretta. Come riferimento si prega di fare riferimento all'URL di seguito che potrebbe tornare utile. https://greencloudvps.com/knowledgebase/11/How-to-Extend-the-Hard-drive-on-KVM-after-upgrading-VPS.html