Ampliar disco de VirtualBox (VMDK) formateado con LVM

Extender el tamaño de un VMDK.
Comparte con tus amigos










Enviar

Para aumentar o redimensionar el espacio en disco de una máquina virtual de VirtualBox, debemos de estar seguros de cómo está montado nuestro sistema de ficheros y sistema. En este caso debemos realizar principalmente dos grandes tareas: aumentar el tamaño de disco de la máquina virtual y realizar una ampliación del volumen lógico.

El entorno es una máquina virtual de VirtualBox 5.0.16, con sistema operativo CentOS 6, 10GB de almacenamiento en un disco de tipo VMDK que está formateado con LVM. Se requiere ampliar el disco duro a 30GB, por lo que para aumentar el tamaño de disco de la máquina virtual añadiremos un nuevo disco de 20GB. Esto hará que el sistema operativo de la máquina virtual pueda ver un nuevo hardware con espacio libre.

Por otra parte, desde el sistema será necesario crear una nueva partición en ese nuevo disco y realizar la ampliación del LV.


Añadir disco duro a VirtualBox

En otros sistemas de virtualización, como VMware, se permite aumentar el tamaño del disco duro que tiene asociado la máquina virtual de manera fácil. Sin embargo, en VirtualBox esto no es posible sin ejecutar una serie de comandos que permitan aumentar el volumen.

Aún así, existen otras soluciones para este caso en concreto como la de añadir un disco duro virtual nuevo y ampliar así el almacenamiento de nuestra máquina virtual, cuyo sistema está formateado con LVM.

Para añadir un disco duro virtual en VirtualBox pulsamos sobre la máquina virtual a tratar y con el botón derecho accedemos a Configuración…, seguidamente en Almacenamiento pulsamos en Controlador: SATA para pulsar sobre el segundo icono que permitirá añadir un nuevo disco duro. Creamos un nuevo disco en el formato que deseemos, en mi caso he elegido VDI (VirtualBox Disk Image) con 20GB de tamaño y nombre Disco20.

Ampliar disco VMDK formateado con Linux LVM.

Disco duro virtual de 20GB con formato VDI en VirtualBox.

Escanear y particionar disco duro

Los siguientes pasos son escanear el bus SCSI y el disco duro para que CentOS lo reconozca como hardware nuevo y podamos ampliar nuestro grupo de volúmenes. Tras ello, particionaremos el disco duro con sistema de ficheros LVM.

Así pues, arrancamos la máquina virtual y realizamos un reescaneo del bus SCSI. Podemos comprobar los dispositivos SCSI con la ejecución de ls /sys/class/scsi_device/

En nuestro caso, reescaneamos el 1:0:0:0 y el dispositivo host0 con estos dos comandos: echo 1 > /sys/class/scsi_device/1\:0\:0\:0/device/rescan && echo "- - -" > /sys/class/scsi_host/host0/scan

Ahora comprobamos que el sistema ha reconocido el disco duro nuevo con la ejecución de fdisk -l que muestra que el disco duro de 20GB recibe el nombre de dispositivo /dev/sdb.

[root@centos ~]# fdisk -l

Disco /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cilindros of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00039d28

Disposit. Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sda1   *           1          64      512000   83  Linux
La partición 1 no termina en un límite de cilindro.
/dev/sda2              64        1045     7875584   8e  Linux LVM
/dev/sda3            1045        1305     2093804+  83  Linux

Disco /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cilindros of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disco /dev/mapper/vg_centos-lv_root: 9344 MB, 9344909312 bytes
255 heads, 63 sectors/track, 1136 cylinders
Units = cilindros of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disco /dev/mapper/vg_centos-lv_swap: 855 MB, 855638016 bytes
255 heads, 63 sectors/track, 104 cylinders
Units = cilindros of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Particionar el nuevo disco duro

Con el software fdisk realizaremos la partición deseada sobre el nuevo disco duro de 20GB, que ahora es reconocido por la máquina de VirtualBox como /dev/sdb.

Por lo tanto, para realizar esta tarea ejecutamos fdisk /dev/sdb donde lo primero que veremos será una advertencia de que el dispositivo no contiene ninguna tabla de particiones válida. A continuación, quedará a espera de realizar acciones sobre el dispositivo de hardware.

Introducimos la letra n para crear una nueva partición y luego la letra p para indicar que es una partición primaria. Pulsamos Enter para asignar el número de partición por defecto (en este caso es 1) y nuevamente Enter para usar todos los cilindros.

Volveremos al menú de acciones, dónde introducimos la letra t para cambiar el tipo de partición que acabamos de crear. Como únicamente tenemos una partición en ese disco duro, se seleccionará la primera por defecto. Allí debemos introducir el código hexadecimal 8e correspondiente al tipo Linux LVM. Podemos ver el resto de ellos con la letra L.

fdisk listado de tipos de particiones.

Por último, para escribir los cambios realizados en nuestro nuevo disco duro de 20GB, insertamos la letra “w” y se guardarán los cambios.

Aquí la secuencia de comandos:

[root@centos ~]# fdisk /dev/sdb 
El dispositivo no contiene una tabla de particiones DOS válida ni una etiqueta de disco Sun o SGI o OSF
Building a new DOS disklabel with disk identifier 0xcb13e362.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Atención: el indicador 0x0000 inválido de la tabla de particiones 4 se corregirá mediante w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Orden (m para obtener ayuda): n
Acción de la orden
e   Partición extendida
   p   Partición primaria (1-4)
p
Número de partición (1-4): 1
Primer cilindro (1-2610, default 1): 
Using default value 1
Last cilindro, +cilindros or +size{K,M,G} (1-2610, default 2610): 
Using default value 2610

Orden (m para obtener ayuda): t
Se ha seleccionado la partición 1
Código hexadecimal (escriba L para ver los códigos): 8e
Se ha cambiado el tipo de sistema de la partición 1 por 8e (Linux LVM)

Orden (m para obtener ayuda): w
¡Se ha modificado la tabla de particiones!

Llamando a ioctl() para volver a leer la tabla de particiones.
Se están sincronizando los discos.

Si ejecutamos nuevamente fdisk -l veremos que se ha creado una nueva partición referenciada como /dev/sdb1

Ampliar grupo de volúmenes LVM

El primer paso es crear un volumen físico (PV) con LVM con el comando pvcreate. Luego inspeccionamos el nombre del grupo de volúmenes (VG), en este caso llamado vg_centos y lo extendemos ejecutando vgextend nombreVG /dev/dispositivo como muestro en la siguiente salida.

[root@centos ~]# pvcreate /dev/sdb1 
  Physical volume "/dev/sdb1" successfully created
[root@centos ~]# vgdisplay
  --- Volume group ---
  VG Name               vg_centos
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               9,50 GiB
  PE Size               4,00 MiB
  Total PE              2432
  Alloc PE / Size       2432 / 9,50 GiB
  Free  PE / Size       0 / 0   
  VG UUID               ot5ekp-cPL7-1Jjb-4JaW-hhLD-GwgU-j37ZHq
[root@centos ~]# vgextend vg_centos /dev/sdb1
  Volume group "vg_centos" successfully extended

Si recibimos el mensaje Volume group “vg_centos” successfully extended quiere decir que se ha realizado la operación correctamente. Podemos comprobarlo con pvscan y lvdisplay además de df -h

[root@centos ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg_centos/lv_root
  LV Name                lv_root
  VG Name                vg_centos
  LV UUID                PYGEE1-UJUD-RQHG-8p8m-urYm-Q7Yf-smYe0Y
  LV Write Access        read/write
  LV Creation host, time centos, 2017-06-04 13:31:17 +0200
  LV Status              available
  # open                 1
  LV Size                8,70 GiB
  Current LE             2228
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
   
  --- Logical volume ---
  LV Path                /dev/vg_centos/lv_swap
  LV Name                lv_swap
  VG Name                vg_centos
  LV UUID                cYzTn2-uSo1-9UNN-oRRX-gxEz-Olx5-NKwml6
  LV Write Access        read/write
  LV Creation host, time centos, 2017-06-04 13:31:17 +0200
  LV Status              available
  # open                 1
  LV Size                816,00 MiB
  Current LE             204
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1
  
[root@centos ~]#  df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00 27G 5.2G  21G  21% /
tmpfs                 1,9G     0  1,9G   0% /dev/shm
/dev/sda1             477M   28M  447M   6% /boot

De esta manera conseguimos ampliar el tamaño de disco nuestro sistema Linux, incrementando 20GB de disco duro y pasando de 10GB a 30GB gracias al uso volúmenes lógicos.

Referencias

Compartir es agradecer. Si te ha gustado... ¡compartélo!
Comparte con tus amigos










Enviar

2 Respuestas

  1. Jorge dice:

    Hola,
    Gracias por tu aportación. En un escenario casi idéntico me funcionó perfecto. Pero al final de tus indicaciones tuve que ejecutar además lvextend /dev/vg_main/lv_root /dev/sdb1 y resize2fs /dev/vg_main/lv_root.
    Un saludo!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.