Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.
Gestión de volúmenes lógicos.
Correo electrónico: darkshram en gmail punto com Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org
Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1
© 1999-2016 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector, hace mal uso de éstos.
Introducción.
LVM es una implementación que consiste en un administrador de volúmenes lógicos para el núcleo de Linux. Fue originalmente escrito en 1998 por Heinz Mauelshagen, quien se basó sobre el administrador de volúmenes de Veritas, el cual solía ser utilizado en en sistemas HP-UX.
Básicamente, LVM2 permite hacer lo siguiente:
- Cambio de tamaño de grupos de volúmenes.
- Cambio de tamaño de volúmenes lógicos.
- Instantáneas de lectura y escritura (a partir de LVM2).
- RAID0 de volúmenes lógicos.
LVM carece de soporte para implementar RAID1 o RAID5, por lo que se recomienda configurar este tipo de arreglos por debajo de los volúmenes lógicos y disponer así de los beneficios de éstos.
LVM se compone de tres partes:
- Volúmenes físicos (pv, physical volume). Son particiones en el disco duro, con la bandera 8e. Se pueden dividir en extensiones físicas (pe o physical extents).
- Volúmenes lógico (lv o logical volume). Se componen de volúmenes físicos. Se pueden dividir en extensiones lógicas (le, logical extents).
- Grupos de volúmenes (vg o volume group). Se componen de uno o más volúmenes lógicos utilizados y volúmenes físicos sin utilizar. Son unidades administrativas donde se agrupan los recursos.
Procedimientos más comunes.
Crecer un volumen lógico a partir de espacio libre en el grupo de volumen.
El ejemplo hipotético descrito a continuación asume un escenario similar al creado tras seguir los procedimientos de instalación descritos en el documento titulado «Procedimiento de instalación de CentOS 6 con LVM».
Ejecute df con la opción -h y determine a cuál volumen lógico del sistema añadirá más espacio de almacenamiento.
df -h |
La salida puede ser similar a la siguiente:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_servidor-lv_root
3,0G 365M 2,5G 13% /
tmpfs 504M 72K 504M 1% /dev/shm
/dev/sda1 202M 50M 142M 26% /boot
/dev/mapper/vg_servidor-lv_home
20G 174M 19G 1% /home
/dev/mapper/vg_servidor-lv_tmp
5,0G 139M 4,6G 3% /tmp
/dev/mapper/vg_servidor-lv_usr
9,9G 3,0G 6,5G 32% /usr
/dev/mapper/vg_servidor-lv_var
20G 314M 19G 2% /var
/dev/mapper/vg_servidor-lv_varlib
5,0G 225M 4,5G 5% /var/lib
/dev/mapper/vg_servidor-lv_varwww
5,0G 140M 4,6G 3% /var/www
|
En el escenario hipotético de este documento se asumirá que se añadirá más espacio de almacenamiento a el volumen lógico correspondiente a /var.
Ejecute vgdisplay para determinar la cantidad de espacio libre disponible en los grupos de volumen del sistema:
vgdisplay |
La salida será similar a la siguiente:
--- Volume group ---
VG Name vg_servidor
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 9
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 8
Open LV 8
Max PV 0
Cur PV 1
Act PV 1
VG Size 79,79 GiB
PE Size 4,00 MiB
Total PE 20427
Alloc PE / Size 17920 / 70,00 GiB
Free PE / Size 2507 / 9,79 GiB
VG UUID qF1ZD0-cuzw-SVHU-aKjK-GHEr-lpta-ft9VaQ
|
En el escenario hipotético de este documento hay 9.79 GiB de espacio disponible, es decir están disponibles 2507 extensiones físicas de 4 MiB.
Asumiendo el caso hipotético de este documento, ejecute lvdisplay con la ruta del volumen lógico como argumento:
lvdisplay /dev/mapper/vg_servidor-lv_var |
La salida sera similar a la siguiente:
--- Logical volume ---
LV Path /dev/vg_servidor/lv_var
LV Name lv_var
VG Name vg_servidor
LV UUID Vv2tdR-yXfv-gVl1-ioc7-eezS-mrlL-P4j9ND
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2014-06-14 14:38:38 -0500
LV Status available
# open 1
LV Size 20,00 GiB
Current LE 5120
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:2
|
En el escenario hipotético de este documento este volumen lógico tiene una capacidad de 20.00 GiB.
Ejecute lvextend con la opción -l y +100%FREE como argumento —para solicitar se asigne el 100% de las extensiones físicas disponibles— y la ruta del volumen lógico como último argumento final:
lvextend -l +100%FREE /dev/mapper/vg_servidor-lv_var |
La salida será similar a la siguiente:
Extending logical volume lv_var to 29,79 GiB Logical volume lv_var successfully resized |
Vuelva a ejecutar lvdisplay con la ruta del volumen lógico como argumento:
lvdisplay /dev/mapper/vg_servidor-lv_var |
La salida será similar a la siguiente donde se puede ver el incremento en el tamaño del volumen lógico:
--- Logical volume ---
LV Path /dev/vg_servidor/lv_var
LV Name lv_var
VG Name vg_servidor
LV UUID Vv2tdR-yXfv-gVl1-ioc7-eezS-mrlL-P4j9ND
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2014-06-14 14:38:38 -0500
LV Status available
# open 1
LV Size 29,79 GiB
Current LE 7627
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:2
|
Si el volumen lógico utiliza formato xfs, haga crecer el sistema de archivos del volumen lógico ejecutando xfs_growfs con la ruta del volumen lógico como argumento:
xfs_growfs /dev/mapper/vg_servidor-lv_var |
La salida será similar a la siguiente:
meta-data=/dev/mapper/vg_servidor-lv_var isize=256 agcount=4, agsize=3276800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=13107200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=6400, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 13107200 to 15728640
|
Si el volumen lógico utiliza formato ext4, haga crecer el sistema de archivos del volumen lógico ejecutando resize2fs con la ruta del volumen lógico como argumento:
resize2fs /dev/mapper/vg_servidor-lv_var |
La salida será similar a la siguiente.
resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/vg_servidor/lv_var is mounted on /var; on-line resizing required old desc_blocks = 2, new_desc_blocks = 2 Performing an on-line resize of /dev/vg_servidor/lv_var to 7810048 (4k) blocks. El sistema de ficheros en /dev/vg_servidor/lv_var tiene ahora 7810048 bloques. |
Vuelva a ejecutar df con la opción -h para confirmar el nuevo tamaño del volumen lógico modificado.
df -h |
La salida será similar a la siguiente y deberá mostrar una cantidad mayor de espacio de almacenamiento disponible comparada con la del estado inicial.
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_servidor-lv_root
3,0G 365M 2,5G 13% /
tmpfs 504M 72K 504M 1% /dev/shm
/dev/sda1 202M 50M 142M 26% /boot
/dev/mapper/vg_servidor-lv_home
20G 174M 19G 1% /home
/dev/mapper/vg_servidor-lv_tmp
5,0G 139M 4,6G 3% /tmp
/dev/mapper/vg_servidor-lv_usr
9,9G 3,0G 6,5G 32% /usr
/dev/mapper/vg_servidor-lv_var
30G 314M 28G 2% /var
/dev/mapper/vg_servidor-lv_varlib
5,0G 225M 4,5G 5% /var/lib
/dev/mapper/vg_servidor-lv_varwww
5,0G 140M 4,6G 3% /var/www
|
Note que este procedimiento se realizó de manera segura son el sistema en funcionamiento y sin necesidad de desmontar el volumen lógico.
Crear un volumen lógico a partir de un disco duro nuevo.
Ejecute parted para crear una nueva etiqueta en el disco duro nuevo.
parted /dev/sdb mklabel msdos |
Ejecute nuevamente parted para crear una partición primaria tipo ext4, que tendrá 10240 GB (inicio en 1, fin en 10240):
parted /dev/sdb mkpart primary ext4 1 10480 |
Cambie el tipo de partición a LVM:
parted /dev/sdb set 1 lvm on |
Para visualizar la tabla de particiones y verificar que se ha creado una partición primaria de 10240 MB, tipo LVM, ejecute lo siguiente:
parted /dev/sdb print |
Lo anterior debe devolver una salida similar al al siguiente:
Model: ATA VBOX HARDDISK (scsi) Disk /dev/sdb: 21.5GB Sector size (logical/physical): 512B/512B Partition Table: msdos Numero Inicio Fin Tamaño Typo Sistema de ficheros Banderas 1 1049kB 10.5GB 10.5GB primary lvm |
Para presentar la nueva partición ante el núcleo del sistema, ejecute partprobe del siguiente modo:
partprobe /dev/sdb1 |
![]() |
|
Si lo anterior falla, ejecute hdaparm del siguiente modo:
|
Para crear un volumen físico, ejecute pvcreate del siguiente modo:
pvcreate /dev/sdb1 |
Ejecute pvscan para verificar el procedimiento anterior:
pvscan |
Lo anterior deberá devolver una salida similar a la siguiente:
PV /dev/sda2 VG VolGroup00 lvm2 [53.80 GiB / 0 free]
PV /dev/sda3 VG VolGroup01 lvm2 [8.00 GiB / 0 free]
PV /dev/sdb1 lvm2 [9.76 GiB]
Total: 3 [71.55 GiB] / in use: 2 [61.79 GiB] / in no VG: 1 [9.76 GiB]
|
Para crear el grupo de volúmenes denominado VolDatos, ejecute vgcreate del siguiente modo:
vgcreate VolDatos00 /dev/sdb1 |
Ejecute vgscan para verificar el procedimiento anterior:
vgscan |
Lo anterior deberá devolver una salida similar a la siguiente:
Reading all physical volumes. This may take a while...
Found volume group "VolDatos00" using metadata type lvm2
Found volume group "VolGroup00" using metadata type lvm2
Found volume group "VolGroup01" using metadata type lvm2
|
Para crear un volumen lógico, denominado Datos00, perteneciente al grupo de volúmenes denominado VolDatos, asignando el 100% de las extensiones lógicas libres, ejecute lvcreate del siguiente modo:
lvcreate -l 100%FREE VolDatos00 -n Datos00 |
Ejecute lvscan para verificar el procedimiento anterior:
lvscan |
Lo anterior deberá devolver una salida similar a la siguiente:
ACTIVE '/dev/VolDatos00/Datos00' [9.76 GiB] inherit
ACTIVE '/dev/LogVol00/LogVol01' [53.80 GiB] inherit
ACTIVE '/dev/LogVol01/LogVol00' [8.00 GiB] inherit
|
Si utiliza formato Xfs, ejecute mkfs.xfs con la ruta del volumen lógico como argumento para dar formato al nuevo volumen lógico:
mkfs.xfs /dev/VolDatos00/Datos00 |
Si prefiere utilizar formato Ext4, ejecute mkfs.ext4 con la ruta del volumen lógico como argumento para dar formato al nuevo volumen lógico:
mkfs.ext4 /dev/VolDatos00/Datos00 |
Ejecute mkdir para crear el punto de montaje /datos:
mkdir /datos |
Para montar el volumen lógico en el directorio /datos, ejecute lo siguiente:
mount /dev/VolDatos00/Datos00 /datos |
Ejecute df para verificar el procedimiento anterior:
df |
Lo anterior deberá devolver una salida similar a la siguiente:
S.ficheros Bloques de 1K Usado Dispon Uso% Montado en
/dev/mapper/VolGroup00-LogVol00
26351440 221008 26130432 1% /
tmpfs 319096 88 319008 1% /dev/shm
/dev/sda1 198337 24376 163721 13% /boot
/
/dev/mapper/VolDatos00-Datos00
10071208 153560 9406060 2% /datos
|
Para que el volumen lógico se monte automáticamente al iniciar el sistema, edite el archivo /etc/fstab:
vim /etc/fstab |
Añada el siguiente contenido si utiliza formato Xfs:
/dev/mapper/VolDatos00-Datos00 /datos xfs defaults 1 2 |
Añada el siguiente contenido si utiliza formato Ext4:
/dev/mapper/VolDatos00-Datos00 /datos ext4 defaults 1 2 |
Desmonte y monte de nuevo el volumen lógico para verificar que todo trabaje correctamente.
umount /datos |
Mover contenidos desde un volumen físico a otro en un nuevo disco duro.
Asumiendo que se ha realizado todo el procedimiento anterior y que el contenido actual del volumen lógico es menor al tamaño del nuevo volumen físico añadido al volumen lógico, ejecute pvmove para mover el contenido de un volumen físico a otro utilizndo como argumentos los nombres de los dispositivos a utilizar.
pvmove /dev/sda1 /dev/sdb1 |
Una vez terminado el movimiento, asumiendo que el tamaño del volumen físico en /dev/sdb1, es igual o mayor al del volumen físico en /dev/sda1, sólo resta eliminar /dev/sda1 del volumen lógico.
vgreduce VolGroup00 /dev/sda1 |
Añadir un volumen físico a un volumen lógico existente, a partir de espacio libre sin particionar en un disco duro.
Se asume un escenario donde:
- Se utilizará el mismo disco duro del procedimiento anterior y que corresponde al dispositivo /dev/sdb
- El grupo de LVM al cual se añadirá el disco es VolGroup00
- Que el volumen lógico que se hará crecer con un nuevo volumen físicos, será LogVol00.
Determine el espacio disponible del disco duro, ejecutando parted del siguiente modo:
parted /dev/sdb unit MB print free |
Determine en qué MB comienza el espacio libre.
Para crear una nueva partición de aproximadamente 5120 MB, ejecute parted del siguiente modo:
parted /dev/sdb mkpart primary ext4 10481 15600 |
![]() |
||
Es posible que el sistema devuelva una advertencia que indica que se necesita reiniciar para que el núcleo de Linux pueda leer la nueva tabla de particiones:
Ignore la advertencia y continúe trabajando. De ser necesario, reinicie el sistema más adelante o bien ejecute partprobe del siguiente modo:
Si lo anterior falla, ejecute hdaparm del siguiente modo:
|
Cambie el tipo de partición a LVM:
parted /dev/sdb set 2 lvm on |
Para visualizar la tabla de particiones y verificar que se ha creado una partición primaria de 5120 MB, tipo LVM, ejecute lo siguiente:
parted /dev/sdb print |
Lo anterior deberá devolver una salida similar a la siguiente:
Model: ATA VBOX HARDDISK (scsi) Disk /dev/sdb: 21.5GB Sector size (logical/physical): 512B/512B Partition Table: msdos Numero Inicio Fin Tamaño Typo Sistema de ficheros Banderas 1 1049kB 10.5GB 10.5GB primary lvm 2 10.5GB 15.6GB 5119MB primary lvm |
Para crear un volumen físico, ejecute pvcreate del siguiente modo:
pvcreate /dev/sdb2 |
Ejecute pvscan para verificar el procedimiento anterior:
pvscan |
Lo anterior deberá devolver una salida similar a la siguiente:
PV /dev/sda2 VG VolGroup00 lvm2 [53.80 GiB / 0 free] PV /dev/sda3 VG VolGroup01 lvm2 [8.00 GiB / 0 free] PV /dev/sdb2 lvm2 [4.77 GiB] Total: 4 [76.32 GiB] / in use: 3 [71.55 GiB] / in no VG: 1 [4.77 GiB] |
Para añadir este volumen físico, que corresponde a la partición /dev/sdb2, al grupo de volúmenes denominado VolGroup00, ejecute vgextend del siguiente modo:
vgextend VolGroup00 /dev/sdb2 |
Lo anterior debe devolver una salida similar a la siguiente:
Volume group "VolGroup00" successfully extended |
Para asignar el 100% nuevo espacio libre disponible, provisto por el nuevo volumen físico añadido al grupo de volúmenes denominado VolGroup00, al volumen lógico LogVol00, ejecute lvextend del siguiente modo:
lvextend -l +100%FREE /dev/VolGroup00/LogVol00 |
Lo anterior debe devolver una salida similar a la siguiente:
Extending logical volume LogVol00 to 31.66 GiB Logical volume LogVol00 successfully resized |
Para cambia el tamaño del sistema de archivos y que éste utiliza el nuevo espacio libre recién asignado al volumen lógico, ejecute resize2fs del siguiente modo:
resize2fs /dev/VolGroup00/LogVol00 |
Lo anterior debe devolver una salida similar a la siguiente:
|
Ejecute df con la opción -h para ver el nuevo tamaño de del sistema de archivos alojado en /dev/VolGroup00/LogVol00:
df -h |
Lo anterior debe devolver una salida similar a la siguiente:
S.ficheros Size Used Avail Use% Montado en /dev/mapper/VolGroup00-LogVol00 32G 216M 30G 1% / /dev/sda1 194M 24M 160M 13% /boot /dev/mapper/VolDatos00-Datos00 9.7G 229M 8.9G 3% /datos |
Quitar una unidad física a un volumen lógico.
Este procedimiento sólo es posible hacerlo si se utiliza Ext4 como formato. El formato Xfs carece de soporte para reducir tamaño del sistema de archivos. Si decide hacerlo, usted tendría que primero respaldar los datos del volumen lógico, destruir éste y volver a crearlo con el nuevo tamaño y finalmente restaurar los datos.
Antes de proceder, es importante contar con un respaldo de los datos almacenados en el volumen lógico al cual se le quitará la unidad física. Verifique que el respaldo es confiable.
Este procedimiento requiere que el volumen lógico esté sin montar. Si se trata de un volumen lógico cuyo sistema de archivos esté en uso, como /, /usr o /var, el procedimiento debe hacerse desde un disco vivo o bien utilizando el disco de instalación en modo de rescate.
Inicie el sistema con el disco de instalación en modo de rescate.
Ejecute df y desmonte todas las particiones que estén debajo del directorio /mnt/sysimage.
Ejecute fsck con la opción -f para verificar la partición a reducir.
fsck -f /dev/VolGroup00/LogVol00 |
Para determinar el tamaño al que debe reducirse el sistema de archivos, ejecute parted con la ruta del dispositivo correspondiente y print como argumentos:
parted /dev/sdb print |
Desmonte la partición.
Ejecute pvdisplay para determinar el tamaño de las particiones /dev/sda2 y /dev/sdb2 y cuantas extensiones físicas contienen cada una.
pvdisplay /dev/sda2 /dev/sdb2 |
Lo anterior debe devolver una salida similar a la siguiente:
--- Physical volume --- PV Name /dev/sda2 VG Name VolGroup00 PV Size 53.80 GiB / not usable 4.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 13772 Free PE 0 Allocated PE 13772 PV UUID jZCHg7-ub0R-kziP-hCy6-V12S-tXRm-2qXont --- Physical volume --- PV Name /dev/sdb2 VG Name VolGroup00 PV Size 4.77 GiB / not usable 2.00 MiB Allocatable yes (but full) PE Size 4.00 MiB Total PE 1220 Free PE 0 Allocated PE 1220 PV UUID lk6bMt-3vci-yw1p-Te2w-KPot-kpje-l18cAB |
Primero hay que reducir el tamaño del sistema de archivos involucrado, de modo que el nuevo tamaño sea ligeramente menor al tamaño del volumen físico que se continuará utilizando en el volumen lógico, siempre y cuando el espacio utilizado del sistema de archivos sea menor al tamaño del volumen físico que se conservara. Si se reduce el tamaño del sistema de archivos, a uno menor al del espacio utilizado por el contenido actual, se perderán todos los datos.
Asumiendo un escenario como el del ejemplo de arriba, donde el tamaño del volumen físico que se conservará es de 53.80 GB, defina 52 GB.
resize2fs /dev/VolGroup00/LogVol00 52G |
Lo anterior debe devolver una salida similar a la siguiente:
Resizing the filesystem on /dev/Datos/LogVol00 to 7077888 (4k) blocks. El sistema de ficheros en /dev/Datos/LogVol00 tiene ahora 7077888 bloques. |
Vuelva a verificar el volumen lógico ejecutando fsck, del siguiente modo:
fsck -f /dev/VolGroup00/LogVol00 |
Asumiendo un escenario donde el volumen físico que se eliminará del volumen lógico tiene 1220 extensiones, para restar del volumen lógico estas extensiones físicas, ejecute lvresize del siguiente modo:
lvresize -l -1220 /dev/VolGroup00/LogVol00 |
Lo anterior le mostrará una advertencia, la cual indica que tiene un alto riesgo reducir el tamaño del volumen lógico y que es posible se pierdan todos los datos. Es precisamente por ésto que se redujo primero el tamaño del sistema de archivos.
WARNING: Reducing active logical volume to 26.90 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce LogVol00? [y/n]: |
Si el tamaño del sistema de archivos es menor al tamaño que se asignará después de eliminar las extensiones, correspondientes al volumen físico que se eliminará, puede responder con una y sin temor a perder los datos contenidos en el volumen lógico.
WARNING: Reducing active logical volume to 26.90 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce LogVol00? [y/n]:y
Reducing logical volume LogVol00 to 26.90 GiB
Logical volume LogVol00 successfully resized
|
Para eliminar el volumen físico del grupo de volúmenes denominado VolGroup00, ejecute lo siguiente:
vgreduce VolGroup00 /dev/sdb2 |
Lo anterior debe devolver una salida similar a la siguiente:
Removed "/dev/sdb2" from volume group "Datos" |
Como precaución, se redujo el tamaño del sistema de archivos a una cantidad menor a la disponible en el volumen físico que se conservó. Ésto deja espacio libre que probablemente se quiera utilizar. Para cambiar el tamaño del sistema de archivos y que tome todo el espacio disponible en el volumen lógico, ejecute resize2fs del siguiente modo:
resize2fs /dev/VolGroup00/LogVol00 |
Lo anterior debe devolver una salida similar a la siguiente:
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/Datos/LogVol00 is mounted on /home; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 2
Performing an on-line resize of /dev/Datos/LogVol00 to 7051264 (4k) blocks.
El sistema de ficheros en /dev/Datos/LogVol00 tiene ahora 7051264 bloques.
|
Vuelva a verificar la partición, ejecutando fsck del siguiente modo.
fdisk -f /dev/VolGroup00/LogVol00 |
Monte la partición en el directorio que le corresponda y verifique que contiene datos. Al terminar reinicie el sistema y retire el disco de rescate.