El Logical Volume Manager (LVM), nos permite el uso de volúmenes lógicos en Linux. Un volumen lógico está compuesto por particiones de disco o discos enteros. LVM nos va a permitir tener una visión de alto nivel del almacenamiento de nuestro servidor en lugar del tradicional uso de discos y particiones.
Vamos a ver paso a paso como podemos implementar y administrar sistemas de archivos con LVM.
Indice:
- Discos o particiones.
- Inicializar volúmenes físicos - physical volume PV.
- Crear grupo de volúmenes - volume group VG.
- Crear volúmenes lógicos - logical volume LV.
- Reducir volúmenes lógicos - logical volume LV.
- Crear filesystem basado en LVM.
- Mantenimiento de filesystem.
- Mantenimiento de volume group.
1. Discos o particiones.
Para trabajar con LVM podemos hacerlo con particiones de disco o discos enteros, esto dependerá de la cantidad de discos que tengamos y de su tamaño. Siempre que se pueda es mejor trabajar con discos enteros que con particiones de disco.
En el tutorial vamos a trabajar con una partición y un disco entero para ver que con LVM podemos usar sin problemas ambas soluciones
El particionamiento de disco se realiza con la herramienta fdisk, para crear una partición lo haremos así.
Con fdisk -l obtenemos una lista de los discos disponibles.
#fdisk -l
Disco /dev/sda: 10.7 GB, 10737418240 bytes
255 cabezas, 63 sectores/pista, 1305 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes
Disposit. Boot Start End Blocks Id System
/dev/sda1 * 1 892 7164958+ 83 Linux
/dev/sda2 893 1147 2048287+ 82 Linux swap
Disco /dev/sdb: 5368 MB, 5368709120 bytes
255 cabezas, 63 sectores/pista, 652 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes
Disposit. Boot Start End Blocks Id System
/dev/sdb1 * 1 652 5237158+ 83 Linux
Disco /dev/sdc: 5368 MB, 5368709120 bytes
255 cabezas, 63 sectores/pista, 652 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes
Disposit. Boot Start End Blocks Id System
/dev/sdc1 * 1 652 5237158+ 83 Linux
Disco /dev/sdd: 5368 MB, 5368709120 bytes
255 cabezas, 63 sectores/pista, 652 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes
Disposit. Boot Start End Blocks Id System
/dev/sdd1 * 1 652 5237158+ 83 Linux
El siguiente paso es crear una partición, vamos a crear una partición de 2GB en el disco /dev/sdb, ejecutamos fdisk /dev/sdb y el prompt de fdisk tecleamos la n de nuevo y seguimos los pasos del cuadro de abajo.
#fdisk /dev/sdb
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-652, default 1):
Using default value 1
Último cilindro o +tamaño o +tamañoM o +tamañoK (1-652, default 652): +2048M
Orden (m para obtener ayuda): p
Disco /dev/sdb: 5368 MB, 5368709120 bytes
255 cabezas, 63 sectores/pista, 652 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes
Disposit. Boot Start End Blocks Id System
/dev/sdb1 1 250 2008093+ 83 Linux
*Importante con q salimos sin guardar cambios, con w salimos y guardamos cambios
Repetiríamos el proceso por cada partición que deseáramos crear y listo, salimos de fdisk con w para que nos guarde los cambios. Para este tutorial vamos a utilizar la partición que hemos creado de 2 GB /dev/sdb1 y un disco entero de 5GB, el /dev/sdc1.
2. Inicializar volúmenes físicos - physical volume PV.
Los dispositivos que vamos a usar son /dev/sdb1 (2GB) y /dev/sdc1 (5GB) y utilizaremos el comando pvcreate para inicializarlos.
Desde el prompt del sistema ejecutamos lo siguiente:
#pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created
#pvcreate /dev/sdc1
Physical volume "/dev/sdc1" successfully created
Una vez creados con el comando pvdisplay podemos ver las características de los physical volumen.
3. Crear grupo de volúmenes - volume group VG.
Un grupo de volúmenes es una agrupación tanto física como lógica de volúmenes físicos, como veremos más adelante cuando creemos un filesystem le asignaremos espacio de un grupo de volúmenes, si nuestro grupo de volúmenes se queda sin espacio libre con añadirle otro physical volume podremos ampliar los filesystem que se nos han quedado sin espacio, esta es una de las ventajas de LVM respecto al uso tradicional de particiones o discos de forma directa.
Vamos a crear un volume group para una instalación por ejemplo de software Oracle 10g u Oracle 11g y la posterior creación de una BBDD Oracle 10g u Oracle 11g.
Nuestro volume group se va a llamar vgoraclesoft y va a contener los dos physical volume que hemos creado.
#vgcreate vgoraclesoft /dev/sdb1 /dev/sdc1
Volume group "vgoraclesoft" successfully created
4. Crear volúmenes lógicos - logical volume LV.
Una que ya tenemos nuestro volumen group creado vamos a crear un logical volume que usaremos para montar un filesystem que contendrá una instalación de Oracle 10g u Oracle 11g.
Nuestro primer logical volume que se llamará lvu01, tendrá 4GB, de espacio y en él montaremos posteriormente el filesystem /u01.
#lvcreate –L 4G -n lvu01 vgoraclesoft
Logical volume "lvu01" created
5. Reducir volúmenes lógicos - logical volume LV.
El comando para reducir un volumen lógico (Logical Volume) es lvreduce, pero si contiene un File-System, montado o desmontado, sobre él, tendrás también que reducir el sistema de archivos (File-system) por lo que se vuelve una tarea crítica y que puede terminar en un desastre sino se tiene cuidado.
Mi recomendación es que antes de reducir piensa bien si es realmente necesario, también ten en cuenta que para reducir hay que desmontar el File-system del LV a reducir, por lo que no abra acceso a él durante el proceso.
Si has creado un LV nuevo y todavía no lo has usado puedes directamente borrarlo y crearlo con el tamaño adecuado, o puedes usar el comando lvreduce para reducir el tamaño, ver el Paso 4.
Lo primero es analizar el File-system a reducir, tamaño actual, espacio ocupado y espacio libre, utiliza el comando lvs para ver los LVs que tienes y así identificar el que quieres reducir y el comando df -h para la ver la información detallada del File-system montado sobre él.
Para desarrollar la reducción tengo el siguiente escenario.
El LV lvoltest de 5GB de tamaño.
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
LogVol00 vg00 -wi-ao---- 4,00g
LogVol01 vg00 -wi-ao---- 3,00g
lvoltest vg00 -wi-ao---- 5,00g
El File-system test con 4,8G de espacio total montado sobre el LV lvoltest, 1,1 GB de espacio ocupado y 3,6 GB de espacio libre.
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg00-LogVol01
2,9G 823M 2,0G 30% /
tmpfs 932M 0 932M 0% /dev/shm
/dev/sda1 190M 56M 125M 31% /boot
/dev/mapper/vg00-lvoltest
4,8G 1,1G 3,6G 23% /test
Antes de empezar, bloquea el acceso al File-system y haz una copia de seguridad, imprescindible.
Los pasos para reducir un LV son los siguientes:
Paso 1. Desmontar el punto de montaje del File-system que vas a reducir.
# umount -v /test
Se ha ejecutado umount en /dev/mapper/vg00-lvoltest
Paso 2. Verificar el File-system una vez desmontado.
#e2fsck -ff /dev/mapper/vg00-lvoltest
e2fsck 1.41.12 (17-May-2010)
Paso 1: Verificando nodos-i, bloques y tamaños
Paso 2: Verificando la estructura de directorios
Paso 3: Revisando la conectividad de directorios
Paso 4: Revisando las cuentas de referencia
Paso 5: Revisando el resumen de información de grupos
/dev/mapper/vg00-lvoltest: 14/327680 ficheros (0.0% no contiguos), 318499/1310720 bloques
Paso 3. Reducir el sistema de archivos.
Voy a reducir 1 GB. El comando resize2fs necesita el tamaño de cómo debe quedar el File-System, es decir, 5GB - 1GB = 4GB, 4 GB será el valor que incluiré.
#resize2fs /dev/mapper/vg00-lvoltest 4G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/vg00-lvoltest to 1048576 (4k) blocks.
El sistema de ficheros en /dev/mapper/vg00-lvoltest tiene ahora 1048576 bloques.
Paso 4. Reducir el tamaño del volumen lógico (LV).
Reduzco en 1 GB. El comando para reducir el LV requiere el tamaño a reducir, es decir, 1GB.
#lvreduce -L -1G /dev/mapper/vg00-lvoltest
WARNING: Reducing active logical volume to 4,00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lvoltest? [y/n]: y
Size of logical volume vg00/lvoltest changed from 5,00 GiB (1280 extents) to 4,00 GiB (1024 extents).
Logical volume lvoltest successfully resized
Paso 5. Volver a verificar el File-system para asegurarnos de que no hay errores.
#e2fsck -ff /dev/mapper/vg00-lvoltest
e2fsck 1.41.12 (17-May-2010)
Paso 1: Verificando nodos-i, bloques y tamaños
Paso 2: Verificando la estructura de directorios
Paso 3: Revisando la conectividad de directorios
Paso 4: Revisando las cuentas de referencia
Paso 5: Revisando el resumen de información de grupos
/dev/mapper/vg00-lvoltest: 14/262144 ficheros (0.0% no contiguos), 314388/1048576 bloques
Paso 6. Volver a montar el sistema de archivos ya reducido.
#mount /dev/vg00/lvoltest /test
El File-system y logical volume tienen 1GB menos de espacio total.
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg00-LogVol01
2,9G 823M 2,0G 30% /
tmpfs 932M 0 932M 0% /dev/shm
/dev/sda1 190M 56M 125M 31% /boot
/dev/mapper/vg00-lvoltest
3,9G 1,1G 2,7G 29% /test
# lvdisplay /dev/mapper/vg00-lvoltest
--- Logical volume ---
LV Path /dev/vg00/lvoltest
LV Name lvoltest
VG Name vg00
LV UUID LUgcrC-eltH-zBN2-OnC7-ThH8-eae5-d5NX1b
LV Write Access read/write
LV Creation host, time lcendev003, 2017-05-15 14:48:32 +0200
LV Status available
# open 1
LV Size 4,00 GiB
Current LE 1024
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:2
6. Crear filesystem basado en LVM.
Una vez tenemos creado logical volumen vamos a crear filesystem /u01 sobre el logical volumen lvu01.
#mkfs ext3 /dev/vgoraclesoft/lvu01
Una vez tenemos el filesystem creado vamos a crear el punto de montaje. Los pasos son crear el directorio /u01 y montar el filesystem /u01.
#mkdir –p /u01
#mount /dev/vgoraclesoft/lvu01 /u01
Para terminar esta parte ponemos los permisos y grupo adecuados al filesystem /u01.
#chown oracle:dba /u01
#chmod 755 /u01
El nuevo filesystem /u01 queda de esta manera, usamos el comando Linux/Unix df –h.
#df –h /u01
Filesystem size used avail capacity Mounted on
/dev/vgoraclesoft/lvu01
4G 0G 4G 0% /u01
7. Mantenimiento de filesystem.
- Ampliación de un filesystems
Lo habitual en el día día en la administración de un sistema Linux es que algún filesystem este cerca de llenarse o incluso se llegue a estar lleno por completo.
¿Como ampliamos un filesystem? Buena pregunta, realmente lo que haremos es ampliar el logical volume correspondiente. Antes de realizar la ampliación deberíamos ver el espacio libre que nos queda en el volumne group, para ello usaremos el comando vgdisplay de siguiente manera:
#vgdisplay vgoraclesoft
Como todavía tenemos espacio libre vamos a añadirle por ejemplo 500MB al logical volumen lvu01.
#lvresize –L 500M /dev/vgoraclesoft/lvu01
Extending logical volume lvu01 to 500 MB
Logical volume lv01 successfully resized
Y por último refrescamos el filesystem /u01 para que tome la ampliación.
#resize2fs /dev/vgoraclesoft/lvu01
resize2fs 1.40.2 (12Jul2007)
Filesystem at /dev/vgoraclesoft/lvu01 is mounted on /u01; online
resizing required
old desc_blocks = 2, new_desc_blocks = 2
Performing an online
resize of /dev/vgoraclesoft/lvu01 to 491520 (1k) blocks.
The filesystem on /dev/vgoracleu01/lvu01 is now 491520 blocks long.
8. Manatenimiento de volume group.
Añadir un disco a un volume group.
Si nuestro volume group se queda sin espacio libre le añadiremos una partición o un disco entero.
una vez tengamos preparado el phisical volume lo añadiremos nuestro volume group vgoraclesoft.
#vgextend –v vgoraclesoft /dev/sdd1
Checking for volume group "vgoraclesoft"
Archiving volume group "vgoraclesoft" metadata (seqno 5).
Adding physical volume '/dev/sdd1' to volume group 'vgoraclesoft'
Volume group "vgoraclesoft" will be extended by 1 new physical volumes
Creating volume group backup "/etc/lvm/backup/vgdatos" (seqno 6).
Volume group "vgoraclesoft" successfully extended