Respuestas:
qemu-img resize vmdisk.img +10G
para aumentar el tamaño de la imagen en 10 Gbstart the VM, resize the partitions and LVM structure within it normally
¿Cómo hacerlo? Por favor explícalo.
Para bien o para mal, los siguientes comandos se ejecutarán incluso si el disco virtual de destino está montado. Esto puede ser útil en entornos donde el disco no se puede desmontar (como una partición raíz), la VM debe permanecer encendida y el propietario del sistema está dispuesto a asumir el riesgo de corrupción de datos . Para eliminar ese riesgo, deberá iniciar sesión en la máquina virtual y desmontar primero el disco de destino, algo que no siempre es posible.
Realice lo siguiente desde el hipervisor KVM.
Aumente el tamaño del archivo de imagen de disco en sí (especifique la cantidad a aumentar):
qemu-img resize <my_vm>.img +10G
Obtenga el nombre del dispositivo virtio, a través del shell libvirt ( drive-virtio-disk0
en este ejemplo):
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]
Indique al controlador virtio que detecte el nuevo tamaño (especifique la nueva capacidad total):
virsh qemu-monitor-command <my_vm> block_resize drive-virtio-disk0 20G --hmp
Luego inicie sesión en la VM. La ejecución dmesg
debe informar que el disco virtio detectó un cambio de capacidad. En este punto, continúe y cambie el tamaño de sus particiones y estructura LVM según sea necesario.
Estas preguntas por defecto del servidor son similares pero más específicas, ¿cambiar el tamaño del disco en línea KVM? & Centos Xen redimensionando la partición DomU y el grupo de volúmenes . El primero hace la pregunta de cómo aumentar un invitado KVM mientras está en línea, mientras que el segundo es específico de XEN usando LVM. Estoy preguntando cómo lograr esto mientras el KVM está desconectado.
NOTA: Este enlace fue útil para el MÉTODO N. ° 1 y muestra cómo lograr aumentar el espacio en disco de un KVM (basado en ext3). CÓMO: Cambiar el tamaño de una imagen de máquina virtual KVM .
Una cosa a tener en cuenta con los invitados KVM es que las particiones que están usando en su interior pueden afectar el método que puede usar para aumentar su espacio en disco.
MÉTODO # 1: Las particiones están basadas en ext2 / ext3 / ext4
Los frutos de este método son los siguientes:
# 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
Ahora con el archivo mykvm.img más grande en la mano, inicie gparted y extienda la partición existente en el espacio de disco recién agregado. Este último paso básicamente extiende la partición del sistema operativo para que pueda hacer uso del espacio extra.
MÉTODO # 2: Las particiones están basadas en LVM
Estos son los pasos que seguí aproximadamente para cambiar el tamaño de un invitado KVM que usaba LVM internamente.
ejecute fdisk dentro de VM y elimine y vuelva a crear la partición 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.
%
Reiniciar la VM
Cambiar el tamaño del volumen físico 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
...
Cambiar el tamaño del volumen lógico LVM
% lvresize /dev/VolGroup00/LogVol00 -l +640
Extending logical volume LogVol00 to 43.88 GB
Logical volume LogVol00 successfully resized
Crecer el sistema de archivos
% 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.
Lo anterior es mi ejemplo, pero seguí los pasos en este sitio web
virt-manager
y he utilizado los métodos 1 y 2 ampliamente antes de migrar nuestros servidores KVM a una versión más nueva de KVM (CentOS 5 -> CentOS 6). Ahora uso el qemu-img resize
método también.
lvextend /dev/Volgroup/lvname /dev/vda2
(todo en una línea, donde / dev / vda2 sería su volumen físico). Sin ninguna otra opción, usará el tamaño máximo en ese grupo de volúmenes.
Cambiar el tamaño y expandir las particiones internas en un solo paso
Tenía un host Ubuntu con una imagen de archivo de invitado qcow2 y quería cambiar el tamaño del disco y expandir las particiones apropiadas, todo en un solo paso. Requiere que configure las utilidades del sistema de archivos invitado libvirt, pero de todos modos es útil tenerlas disponibles.
Inspiración de aquí: http://libguestfs.org/virt-resize.1.html
El comando de teclado aquí es: virt-resize
Preparación:
* 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
Ahora haga lo siguiente:
1) cerrar el invitado:
2) Verifique el tamaño actual y vea el nombre de la partición que desea expandir usando la utilidad libvirt:
sudo virt-filesystems --long --parts --blkdevs -h -a name-of-guest-disk-file
3) Cree el nuevo disco de salida (40G):
qcow: sudo qemu-img create -f qcow2 -o preallocation=metadata outdisk 40G
img: sudo truncate -s 40G outdisk
4) Copie lo antiguo a lo nuevo mientras expande la partición apropiada (suponiendo que su partición de disco del paso 2 fuera / dev / sda1):
sudo virt-resize --expand /dev/sda1 indisk outdisk
5) Cambie el nombre del archivo indisk como copia de seguridad, cambie el nombre del disco externo como indisk (o modifique el XML invitado)
6) Reinicie el invitado y pruebe el nuevo archivo de disco cuidadosamente antes de eliminar el archivo original
7) Beneficio!
-o preallocation=metadata
crea un archivo disperso. Con esa opción, asigna previamente el tamaño completo.
-o preallocation=metadata
y, si no lo hace, también debe omitir el truncate
paso. virt-resize
crecerá el archivo según corresponda de todos modos.
Si está utilizando LVM dentro de la VM, la forma más sencilla de hacerlo sería agregar un nuevo disco virtual a la VM y expandir el grupo de volúmenes y los volúmenes lógicos.
Para verificar si está utilizando LVM run sudo pvs; sudo vgs; sudo lvs
, obtendrá algo como esto:
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
si el sistema operativo de la VM está usando LVM. En el ejemplo anterior, la VM tiene un disco virtual de 30 Gbytes, configurado usando LVM con un grupo de volúmenes llamado vgWWW que contiene dos volúmenes lógicos, uno para intercambio y otro para todo lo demás.
Si LV está en uso en la VM:
sudo pvcreate /dev/vdb
sudo vgextend vgWWW /dev/vdb
sudo lvextend --extents +100%FREE /dev/vgWWW/root
(o algo así como sudo lvextend --size +8G /dev/vgWWW/root
si no desea aumentarlo por completo, este ejemplo agregaría 8 Gb al volumen)resize2fs /dev/vgWWW/root
Nota: lo anterior supone que los nombres vg / lv son los mismos que en mi ejemplo, lo cual es poco probable, cambie según corresponda, también si la VM ya tenía una unidad virtual llamada vdb
la nueva será otra cosa ( vdc
y así sucesivamente)
Nota: resize2fs
solo funcionará en el sistema de archivos ext2, ext3 y ext4. Si está utilizando algo más, se producirá un error y no hará nada.
Nota: como está cambiando el tamaño de un sistema de archivos en vivo resize2fs
, no se le solicitará que ejecute fsck
primero como lo haría para un sistema de archivos desmontado, simplemente continuará. Es posible que desee ejecutar una comprobación del sistema de archivos de solo lectura, no hay problemas antes de continuar.
Es posible hacer cambios de tamaño en línea. libvirtd admite esto de forma nativa:
Encuentra el nombre del dispositivo de bloque. Debería ser algo como "vda"
$ virsh domblklist <libvirtd_vm_name>
Cambiar el tamaño del dispositivo virtual:
$ virsh blockresize --domain <libvirtd_vm_name> --path <block_device_name> --size <new_size>
He aquí un ejemplo se amplío el vda
disco desde 50GB
que 51GB
por undercloud
VM.
[root@gss-rhos-4 ~]# virsh domblklist undercloud
Target Source
------------------------------------------------
vda /home/images/undercloud.qcow2
Ahora eche un vistazo a los detalles del archivo de imagen .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
Ahora cambiemos el tamaño del dispositivo de bloqueo vda:
[root@gss-rhos-4 ~]# virsh blockresize undercloud vda 51G
Block device 'vda' is resized
Y confirma:
[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 ~]#
Luego puede usar este script dentro de la VM para mostrar los comandos para cambiar el tamaño de los dispositivos de bloque y fs: https://github.com/mircea-vutcovici/scripts/blob/master/vol_resize.sh .
Existe la posibilidad de aumentar el tamaño del disco de su VM sin reiniciar la VM si está utilizando la unidad virtio y LVM.
(Opcional) Cree una partición primaria con fdisk para obtener / dev / vdb1, luego use kpartx -a / dev / vdb para releer la tabla de particiones
Use vgextend vg_name / dev / vdb1 (o / dev / vdb si no creó una partición)
Ya terminaste
De esta manera puede expandir la partición que desee:
# 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
Ver más ejemplos aquí .
Otra forma de hacerlo
truncate -s +2G vm1.img
vaya a hacer un nuevo escaneo de disco y después de que pueda hacer el cambio de tamaño de su lvm.
Si tiene LVM en su VM, esto es una locura fácil y rápida.
sudo system-config-lvm
en la terminal) *.La GUI me pareció bastante intuitiva, pero siga los siguientes pasos si tiene problemas.
¡Nota! Al menos en CentOS 6 LVM GUI no está instalado de manera predeterminada, pero puede instalarlo con yum install system-config-lvm
.
Cambiar el tamaño de la imagen:
qemu-img resize vmdisk.img +16G
aumenta el tamaño de la imagen en 16 GB.
Si su imagen tiene GPT (tabla de particiones GUID), el tamaño de la unidad utilizada en GPT diferirá del nuevo tamaño, debe solucionarlo con gdisk
:
MY_DRIVE=/dev/vda
gdisk $MY_DRIVE <<EOF
w
Y
Y
EOF
o con parted
:
parted $MY_DRIVE print Fix
Por alguna razón, el parted
arreglo no funciona cuando no se presenta tty (por ejemplo, al aprovisionar con Vagrant), así que lo uso gdisk
.
Aumente el tamaño de la partición para llenar todo el espacio disponible:
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 es opcional y necesaria si está utilizando BIOS heredado.
MY_PARTITION_GUID=...
y las c $MY_PARTITION_GUID
partes también son opcionales y necesarias solo si usa el UUID de partición en /etc/fstab
o en otro lugar.
Reiniciar o releer particiones con partx -u $MY_DRIVE
o partprobe
.
Extender partición, ejemplo para ext2
, ext3
o ext4
:
MY_PARTITION="${MY_DRIVE}1"
resize2fs $MY_PARTITION
Puede usar solus vm con gparted montado. Una vez utilizado con gparted, puede iniciar fácilmente el sistema y ajustar el espacio. Asegúrese de tener establecida la prioridad de arranque correcta. Como referencia, consulte la siguiente URL que podría ser útil. https://greencloudvps.com/knowledgebase/11/How-to-Extend-the-Hard-drive-on-KVM-after-upgrading-VPS.html