Respostas:
qemu-img resize vmdisk.img +10G
para aumentar o tamanho da imagem em 10 GBstart the VM, resize the partitions and LVM structure within it normally
Como fazer isso? Por favor, explique.
Para melhor ou pior, os comandos abaixo serão executados mesmo se o disco virtual de destino estiver montado. Isso pode ser útil em ambientes em que o disco não pode ser desmontado (como uma partição raiz), a VM deve permanecer ligada e o proprietário do sistema está disposto a assumir o risco de corrupção de dados . Para remover esse risco, você precisaria fazer login na VM e desmontar o disco de destino primeiro, algo que nem sempre é possível.
Execute o seguinte no hypervisor KVM.
Aumente o tamanho do arquivo de imagem do disco (especifique a quantidade a aumentar):
qemu-img resize <my_vm>.img +10G
Obtenha o nome do dispositivo virtio, através do shell libvirt ( drive-virtio-disk0
neste exemplo):
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]
Sinalize o driver virtio para detectar o novo tamanho (especifique a nova capacidade total):
virsh qemu-monitor-command <my_vm> block_resize drive-virtio-disk0 20G --hmp
Em seguida, faça login na VM. A execução dmesg
deve relatar que o disco virtio detectou uma alteração de capacidade. Neste ponto, vá em frente e redimensione suas partições e estrutura LVM conforme necessário.
Essas questões de falha do servidor são semelhantes, mas mais específicas, redimensionar o disco online do KVM? & Centos Xen redimensionando a partição DomU e o grupo de volumes . O primeiro faz a pergunta de como aumentar um convidado KVM enquanto está online, enquanto o segundo é específico do XEN usando o LVM. Estou perguntando como fazer isso enquanto o KVM está offline.
NOTA: Este link foi útil para o MÉTODO # 1 e mostra como conseguir aumentar o espaço em disco de um KVM (baseado em ext3), COMO FAZER: Redimensionar uma imagem de máquina virtual KVM .
Uma coisa a ter em atenção com os convidados do KVM é que as partições que eles estão usando podem afetar qual método você pode usar para aumentar o espaço em disco.
MÉTODO # 1: Partições são baseadas em ext2 / ext3 / ext4
As porcas deste método são as seguintes:
# 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
Agora, com o arquivo mykvm.img maior em mãos, inicialize o gparted e estenda a partição existente para o espaço em disco recém-adicionado. Este último passo basicamente estende a partição do SO para que ele possa fazer uso do espaço extra.
MÉTODO # 2: Partições são baseadas em LVM
Aqui estão as etapas que eu segui aproximadamente para redimensionar um convidado do KVM que usava o LVM internamente.
execute o fdisk dentro da VM e exclua e recrie a partição 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.
%
Reinicie a VM
Redimensionar o volume físico do 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
...
Redimensionar o volume lógico do LVM
% lvresize /dev/VolGroup00/LogVol00 -l +640
Extending logical volume LogVol00 to 43.88 GB
Logical volume LogVol00 successfully resized
Aumente o sistema de arquivos
% 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.
O exemplo acima é meu exemplo, mas segui as etapas deste site
virt-manager
e utilizei o método nº 1 e nº 2 extensivamente antes de migrar nossos servidores KVM para uma versão mais recente do KVM (CentOS 5 -> CentOS 6). Agora também uso o qemu-img resize
método.
lvextend /dev/Volgroup/lvname /dev/vda2
(todos em uma linha, onde / dev / vda2 seria o seu volume físico). Sem outras opções, ele usará o tamanho máximo nesse grupo de volumes.
Redimensionar e expandir partições internas em uma etapa
Eu tinha um host Ubuntu com uma imagem de arquivo de convidado qcow2 e queria redimensionar o disco e expandir as partições apropriadas, tudo em uma única etapa. Requer que você configure os utilitários do sistema de arquivos libvirt guest, mas esses são úteis para você ter de qualquer maneira.
Inspiração a partir daqui: http://libguestfs.org/virt-resize.1.html
O comando chave aqui é: virt-resize
Preparação:
* 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
Agora faça o seguinte:
1) encerrar o convidado:
2) Confira o tamanho atual e visualize o nome da partição que você deseja expandir usando o utilitário libvirt:
sudo virt-filesystems --long --parts --blkdevs -h -a name-of-guest-disk-file
3) Crie o novo disco de saída (40G):
qcow: sudo qemu-img create -f qcow2 -o preallocation=metadata outdisk 40G
img: sudo truncate -s 40G outdisk
4) Copie o antigo para o novo e expanda a partição apropriada (assumindo que a partição do disco da etapa 2 foi / dev / sda1):
sudo virt-resize --expand /dev/sda1 indisk outdisk
5) Renomeie o arquivo indisk como backup, renomeie o outdisk como indisk (ou modifique o XML convidado)
6) Reinicialize o convidado e teste o novo arquivo de disco cuidadosamente antes de excluir o arquivo original
7) Lucro!
-o preallocation=metadata
cria um arquivo esparso. Com essa opção, ele pré-aloca todo o tamanho.
-o preallocation=metadata
e, se não, também deve pular a truncate
etapa. virt-resize
de qualquer maneira, o arquivo aumentará conforme apropriado.
Se você estiver usando o LVM na VM, a maneira mais simples de fazer isso será adicionar um novo disco virtual à VM e expandir o grupo de volumes e os volumes lógicos para ele.
Para verificar se você está usando a execução do LVM sudo pvs; sudo vgs; sudo lvs
, você terá algo assim:
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 o sistema operacional da VM estiver usando LVM. No exemplo acima, a VM possui um vdisk de 30Gbyte, configurado usando LVM com um grupo de volumes chamado vgWWW, contendo dois volumes lógicos, um para troca e outro para todo o resto.
Se o LV estiver em uso na VM:
sudo pvcreate /dev/vdb
sudo vgextend vgWWW /dev/vdb
sudo lvextend --extents +100%FREE /dev/vgWWW/root
(ou algo como sudo lvextend --size +8G /dev/vgWWW/root
se você não quiser aumentar todo o caminho, este exemplo adicionaria 8 GB ao volume)resize2fs /dev/vgWWW/root
Nota: o acima pressupõe que os nomes vg / lv são iguais ao meu exemplo, o que é improvável, mude conforme apropriado, também se a VM já tiver uma unidade virtual chamada vdb
nova, será outra coisa ( vdc
e assim por diante)
Nota: resize2fs
funcionará apenas no sistema de arquivos ext2, ext3 e ext4. Se você estiver usando outra coisa, ela irá errar e não fará nada.
Nota: como você está redimensionando um sistema de arquivos ativo resize2fs
, não será solicitado que você execute fsck
primeiro, como faria em um sistema de arquivos desmontado, apenas seguirá em frente. Você pode querer executar uma verificação do sistema de arquivos somente leitura, pois não há problemas antes de continuar.
É possível redimensionar online. O libvirtd suporta isso nativamente:
Encontre o nome do dispositivo do bloco. Deve ser algo como "vda"
$ virsh domblklist <libvirtd_vm_name>
Redimensione o dispositivo virtual:
$ virsh blockresize --domain <libvirtd_vm_name> --path <block_device_name> --size <new_size>
Aqui está um exemplo onde eu expanda o vda
disco de 50GB
para 51GB
para undercloud
VM.
[root@gss-rhos-4 ~]# virsh domblklist undercloud
Target Source
------------------------------------------------
vda /home/images/undercloud.qcow2
Agora, veja os detalhes do arquivo de imagem .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
Agora vamos redimensionar o dispositivo de bloco vda:
[root@gss-rhos-4 ~]# virsh blockresize undercloud vda 51G
Block device 'vda' is resized
E confirme:
[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 ~]#
Em seguida, você pode usar esse script dentro da VM para mostrar os comandos para redimensionar os dispositivos de bloco e o fs: https://github.com/mircea-vutcovici/scripts/blob/master/vol_resize.sh .
Existe a possibilidade de aumentar o tamanho do disco da sua VM sem reiniciar a VM se você estiver usando o virtio drive e o LVM.
(Opcional) Crie uma partição primária com o fdisk para obter / dev / vdb1 e use o kpartx -a / dev / vdb para reler a tabela de partição
Use vgextend vg_name / dev / vdb1 (ou / dev / vdb se você não criou uma partição)
Você Terminou.
Dessa forma, você pode expandir a partição que deseja:
# 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
Veja mais exemplos aqui .
Outra maneira de fazer isso
truncate -s +2G vm1.img
vá no make a disk rescan e depois você pode fazer o seu lvm redimensionar.
Se você tem LVM na sua VM, isso é muito fácil e rápido.
sudo system-config-lvm
terminal) *.Achei a GUI bastante intuitiva, mas siga as próximas etapas se você tiver problemas.
Nota! Pelo menos no CentOS 6 LVM GUI não está instalado por padrão, mas você pode instalá-lo com yum install system-config-lvm
.
Redimensionar imagem:
qemu-img resize vmdisk.img +16G
aumenta o tamanho da imagem em 16 GB.
Se sua imagem tiver GPT (tabela de partição GUID), o tamanho da unidade usada na GPT será diferente do novo tamanho, você precisará corrigi-lo com gdisk
:
MY_DRIVE=/dev/vda
gdisk $MY_DRIVE <<EOF
w
Y
Y
EOF
ou com parted
:
parted $MY_DRIVE print Fix
Por algum motivo, a parted
correção não está funcionando quando nenhum tty é apresentado (por exemplo, ao provisionar com o Vagrant), então eu uso gdisk
.
Aumente o tamanho da partição para preencher todo o espaço disponível:
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
A x a 2 <Enter>
peça é opcional e necessária se você estiver usando o BIOS herdado.
MY_PARTITION_GUID=...
e as c $MY_PARTITION_GUID
peças também são opcionais e necessárias apenas se você usar a partição UUID em /etc/fstab
ou em outro local.
Reinicialize ou releia partições com partx -u $MY_DRIVE
ou partprobe
.
Estenda a partição, por exemplo ext2
, ext3
ou ext4
:
MY_PARTITION="${MY_DRIVE}1"
resize2fs $MY_PARTITION
Você pode usar o solus vm com o gparted montado. Uma vez usado com o gparted, você pode facilmente inicializar o sistema e ajustar o espaço. Verifique se você tem a prioridade de inicialização correta definida. Como referência, consulte o URL abaixo que pode ser útil. https://greencloudvps.com/knowledgebase/11/How-to-Extend-the-Hard-drive-on-KVM-after-upgrading-VPS.html