# Ampliación de disco en sistema virtualizado KVM (proxmox)

# Introduccion

En un escenario de uso de discos virtuales, como KVM, Proxmox y otros, a veces es necesario una ampliacion del disco. Si usamos LVM esto es posible y sencillo.

## Convenciones

Ciertas cosas que hay en esta entrada, asi como en otras, requieren un conocimiento previo. No es un sitio para **copiar y pegar** sino para **entender y hacer**

No siempre es el disco **vda**, no siempre es la **particion 1**, y asi sucesivamente.

## Ampliacion de una disco virtual KVM

La ampliacion de un disco LVM es posible una vez que hemos realizado el cambio virtual del tamano de la unidad LVM.

En el caso de Proxmox acudimos a la administracion de nuestro proxmox:

- Seleccionamos el VPS
- Click en **Resize Disk"
- Incrementamos el tamano.

> Si el aumento de tamano implica un tamano final mayor de 2 TiB deberas tener el esquema de particiones **GPT** de lo contrario, tendras que modificar bajo tu responsabilidad el esquema MBR a GPT. Esta entrada no trata de eso, y para ello es aconsejable el uso de [Gparted Live](https://gparted.org/livecd.php), lo cual no siempre es posible.

> El articulo interpreta que conoces el uso de ciertos comando, que sustituiran el dispositivo (disco) por el tuyo, y que sabes como obtener el esquema de tu disco (particiones)

### Consejo sobre particionamiento durante la instalacion

Es aconsejable el uso de GPT y de ello hablamos en nuestra wiki, [Instalacion GPT con el instalador Centos 7 en discos menores de 2 TiB](https://wiki.castris.com/books/tips-sobre-la-administracion-de-linux/page/instalacion-gpt-con-el-instalador-centos-7-en-discos-2-tib)

![Resize Disk - Proxmox](https://multimedia.castris.com/imagenes/wiki/sysadmin/resize_disk_kvm_proxmox.jpg)

### Verificacion en un KVM basado en LVM

Una vez que hemos ampliado el disco, podemos verificar el cambio de tamano en nuestro VPS. Esto funcionara hasta que reiniciemos la maquina. Despues ya no nos informara.

> vda, vdb, sda, ... son nombres de dispositivos. Debes consultar cuales son tus dispositivos de disco usando `fdisk -l` y usar el apropiado en el comando

```bash
dmesg | grep vda
...
[  222.436098] vda: detected capacity change from 32212254720 to 37580963840

```

### Imprimir la tabla actual del disco

```bash
fdisk -l /dev/vda | grep ^/dev
/dev/vda1   *        2048     1026047      512000   83  Linux
/dev/vda2         1026048    62914559    30944256   8e  Linux LVM

```

### Conocer el uso de las particiones en el sistema LVM

```bash
pvscan
  PV /dev/vda2   VG centos          lvm2 [<29,51 GiB / 40,00 MiB free]
  Total: 1 [<29,51 GiB] / in use: 1 [<29,51 GiB] / in no VG: 0 [0   ]
lvscan
  ACTIVE            '/dev/centos/swap' [3,00 GiB] inherit
  ACTIVE            '/dev/centos/root' [<26,47 GiB] inherit

```

## Caso 1: Particion primaria con LVM (GPT o MBR simple)

Este es el caso mas comun en instalaciones modernas con GPT.

### Ampliar la particion fisica

```bash
parted /dev/vda
GNU Parted 3.1
Usando /dev/vda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 37,6GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Numero  Inicio  Fin     Tamano  Typo     Sistema de ficheros  Banderas
 1      1049kB  525MB   524MB   primary  xfs                  arranque
 2      525MB   32,2GB  31,7GB  primary                       lvm

(parted) resizepart 2 100%
(parted) quit

```

### Asignar el nuevo tamano al volumen fisico de LVM

```bash
pvresize /dev/vda2
  Physical volume "/dev/vda2" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized

```

## Caso 2: Particion extended con logical (MBR clasico)

IMPORTANTE: Algunas instalaciones antiguas (especialmente Debian/Ubuntu) usan esquema MBR con particiones extended y logical. En este caso hay que ampliar DOS particiones en orden.

Ejemplo de estructura:

```
Number  Start   End    Size   Type      File system  Flags
 1      1049kB  512MB  511MB  primary   ext2         boot
 2      513MB   698GB  697GB  extended
 5      513MB   698GB  697GB  logical                lvm

```

Aqui vda2 es un contenedor (extended) y vda5 es la particion real con LVM (logical).

### Paso 1: Ampliar la particion extended

```bash
parted /dev/vda
(parted) resizepart 2 100%
(parted) quit

```

### Paso 2: Ampliar la particion logical

```bash
parted /dev/vda
(parted) resizepart 5 100%
(parted) quit

```

Verificar que ambas particiones ahora ocupan todo el espacio:

```bash
parted /dev/vda print
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 752GB

Number  Start   End    Size   Type      File system  Flags
 1      1049kB  512MB  511MB  primary   ext2         boot
 2      513MB   752GB  751GB  extended
 5      513MB   752GB  751GB  logical                lvm

```

### Paso 3: Redimensionar el Physical Volume

CRITICO: El PV esta en la particion logical (vda5), NO en la extended (vda2):

```bash
pvresize /dev/vda5
  Physical volume "/dev/vda5" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized

```

Error comun: ejecutar `pvresize /dev/vda2` da error "device is too small" porque vda2 es la extended, no contiene el PV.

### Paso 4: Verificar el nuevo espacio disponible

```bash
vgs
  VG        #PV #LV #SN Attr   VSize    VFree
  kvm330-vg   1   2   0 wz--n- <699.52g  50g

```

El VFree muestra el espacio nuevo disponible.

## Redimensionar el volumen logico de LVM

### Todo para una particion

```bash
lvresize --extents +100%FREE --resizefs /dev/centos/root
  Size of logical volume centos/root changed from <26,47 GiB (6776 extents) to <31,51 GiB (8066 extents).
  Logical volume centos/root successfully resized.

```

### Resize Volumen Logico por tamano exacto a anadir

En un sistema con distintas particiones es diferente:

```bash
df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv   10G  2.7G  7.4G  27% /
/dev/mapper/ubuntu--vg-lv--usr      6.0G  5.6G  450M  93% /usr
/dev/mapper/ubuntu--vg-lv--home     5.0G   88M  5.0G   2% /home
/dev/mapper/ubuntu--vg-lv--var      6.0G  1.3G  4.8G  21% /var

```

Ampliar solo la particion /usr en 2GB:

```bash
lvextend -L+2G /dev/ubuntu-vg/lv-usr
  Size of logical volume ubuntu-vg/lv-usr changed from 6.00 GiB to 8.00 GiB.
  Logical volume ubuntu-vg/lv-usr successfully resized.

```

Expandir el sistema de archivos (para XFS):

```bash
xfs_growfs /dev/ubuntu-vg/lv-usr
data blocks changed from 1572864 to 2097152

```

Para EXT4 usar resize2fs o la opcion --resizefs en lvresize.

## Mensajes de error comunes

### Error en parted: tabla GPT al final del disco

A veces, es posible que tras un acceso con `parted` a nuestro dispositivo, podemos encontrar mensajes relativos a problemas derivados de los instaladores de Centos, de Ubuntu, segun cuando y como se hizo la particion.

```
Error: La copia de la tabla GPT no esta al final del disco, como deberia ser.
Arreglar/Fix/Descartar/Ignore/Cancelar/Cancel? Fix
Aviso: Not all of the space available to /dev/vda appears to be used
Arreglar/Fix/Descartar/Ignore? F

```

Responder **Fix** a estos mensajes para corregir la tabla GPT.

### Error pvresize: device is too small

```bash
pvresize /dev/vda2
  Cannot use /dev/vda2: device is too small (pv_min_size)
  0 physical volume(s) resized or updated / 0 physical volume(s) not resized

```

Este error ocurre cuando se intenta hacer pvresize sobre la particion extended en lugar de la logical. Verificar con `pvscan` cual es la particion correcta que contiene el Physical Volume.

## Actualizacion 2024-03-21

En nuevas versiones de parted, por ejemplo en AlmaLinux 8, no es posible usar el comando interactivo como anteriormente. Debes hacerlo directamente en el shell:

```bash
parted /dev/sdx --script resizepart NumeroParticion 100%

```

## Aviso

Esta documentacion y su contenido, no implica que funcione en tu caso o determinados casos. Tambien implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad.

El contenido se entrega, tal y como esta, sin que ello implique ninguna obligacion ni responsabilidad por parte de [Castris](https://castris.com)

Si necesitas soporte profesional puedes contratar con Castris [soporte profesional](https://intranet.castris.com/cart.php?gid=18).