Ampliar disco de VirtualBox (VMDK) formateado con LVM

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.
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
[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.
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
[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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
[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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
[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
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!
Hola Jorge,
Me alegro que te haya servido y, sobre todo, que hayas compartido el proceso para ampliar el volumen lógico.
¡Gracias!