Extend a partition of a VM

This is an old revision of the document!


Extend a partition of a VM

Since the update of august 2017 it is possible to choose a custom size for the root disk or resize an existing disk, but before that extra space can be used it has to be manually assigned in the operating system. The Ubuntu 14.04 and 16.04 templates have the root partition mounted over LVM, using a logical partition of DOS type. Even though this guide is written for those templates it is advisable no to skip the Check the configuration chapter.

Check of the configuration

Before continuing you should confirm that the system you are working on has this configuration, otherwise you risk destroying the system.

First check if you're using LVM:

# df -h /
S.ficheros                    Tamaño Usados  Disp Uso% Montado en
/dev/mapper/Ubuntu14--vg-root   8,5G   6,3G  1,8G  79% /

El comando df -h muestra el montaje de / en /dev/mapper/Ubuntu–vg-root, lo que nos confirma que el sistema sí está montado sobre LVM.

Ahora comprueba el nombre del volumen lógico utilizando para el root.

# lvs
  LV    VG        Attr      LSize   Pool Origin Data%  Move Log Copy%  Convert
  root  Ubuntu-vg -wi-ao---   6.03g                                           
  swap1 Ubuntu-vg -wi-ao--- 748.00m

También comprueba el nombre del grupo de volúmenes asociado y su volumen físico.

# pvs
  PV         VG          Fmt  Attr PSize PFree
  /dev/sda5  Ubuntu14-vg lvm2 a--  9,76g    0 

Con esos comandos vemos que el root está en un volumen lógico llamado root dentro de un grupo de volúmenes llamado Ubuntu-vg que utiliza como volumen físico /dev/sda5.

Ten en cuenta además que en el sistema de particionado utilizado, /dev/sda5 es una partición lógica que forma parte de la partición extendida /dev/sda2.

Redimensionado

El redimensionado se puede resumir en los siguientes 5 pasos:

  1. Extender la partición extendida /dev/sda2 para que ocupe el espacio libre en el disco.
  2. Extender la partición lógica /dev/sda5 para que ocupe el espacio libre en la partición extendida.
  3. Extender el volumen físico del grupo de volúmenes Ubuntu-vg.
  4. Extender el volumen lógico root para que ocupe el espacio libre del grupo de volúmenes.
  5. Extender el sistema de archivos para que ocupe el espacio libre del volumen lógico.

Arrancamos parted. Con el comando print free vemos que el disco tiene un total de 21.5GB y un espacio libre al final del disco de 14GB.

# parted /dev/vda
(parted) print free
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type      File system  Flags
        32.3kB  1049kB  1016kB            Free Space
 1      1049kB  256MB   255MB   primary   ext2         boot
        256MB   257MB   1048kB            Free Space
 2      257MB   7515MB  7258MB  extended
 5      257MB   7515MB  7258MB  logical                lvm
        7515MB  21.5GB  14.0GB            Free Space

Primero hay que extender las particiones extendidas y lógica (por ese orden) para que acaben en el final del disco, que en este caso es 21.5GB (pasos 1 y 2).

(parted) resizepart 2 21.5GB                                              
(parted) resizepart 5 21.5GB
(parted) quit

Una vez hecho, ya fuera de parted, extendemos el volumen físico del grupo de volúmenes (paso 3).

# pvresize /dev/vda5
  Physical volume "/dev/vda5" changed
  1 physical volume(s) resized / 0 physical volume(s) not resized

Ahora extendemos el volumen lógico (paso 4).

# lvextend -l+100%FREE /dev/mapper/Ubuntu--vg-root 
  Extending logical volume root to 19.03 GiB
  Logical volume root successfully resized

Por último, extendemos el sistema de archivos (paso 5).

# resize2fs /dev/mapper/Ubuntu--vg-root 
resize2fs 1.42.9 (4-Feb-2014)
Filesystem at /dev/mapper/Ubuntu--vg-root is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/mapper/Ubuntu--vg-root is now 4987904 blocks long.

Una vez hecho esto, todo el espacio libre debería estar ya asignado al root del sistema.