Después de tener los dispositivos físicos listos dentro de un VG, es hora de crear el dispositivo lógico para poder darle formato y montarlo como cualquier dispositivo tipo Bloques. El LV se podrá crear dependiendo de la cantidad de PE libres que tenga el VG.
Se crea un LV con el comando lvcreate. Un LV lleva un nombre, dispone de un tamaño
expresado en extensiones lógicas (LE) que corresponden en realidad a los PE dentro del LV.
root@sugeek:/home/soporte# lvcreate -n Datos1 -L 8g vg01 Logical volume “Datos1” created
El anterior comando me crea un LV usando como nombre con la opción n Datos1, y con el
tamaño opción L de 8 Gigabytes (Podemos definir megabytes con m, terabytes con t,
petabytes con p o exabytes con e) y va a pertenecer al Volumen Group vg01.
El sistema creara el dispositivo dentro de /dev/vg01/Datos1, a lo cual, como podemos observar el dispositivo se crea dentro de una carpeta que contiene el nombre del VG. Este a su ves es un enlace simbólico apuntando a /dev/mapper/vg01-Datos1.
Para ver las características de nuestro LV lo realizamos con el comando lvdisplay podemos usar las opciones -v (verbose) y -m (maps) para obtener información mas detallada sobre los bloques de PE y LE utilizados por el LV.
Using logical volume(s) on command line --- Logical volume --- LV Path /dev/vg01/Datos1 LV Name Datos1 VG Name vg01 LV UUID EuDz0x-N41X-jCWz-sWA0-DarY-85Xw-UUu2Dm LV Write Access read/write
LV Creation host, time debian, 2014-07-14 22:27:57 -0500 LV Status available # open 0 LV Size 8,00 GiB Current LE 2047 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:3 --- Segments --- Logical extent 0 to 2046: Type linear
Physical volume /dev/sdg1 Physical extents 0 to 2046
Luego para poder utilizar este LV, solo nos queda darle el formato adecuado para poderlo montar y darle el uso que deseemos o por el cual fue creado.
root@sugeek:/home# mkfs.ext4 /dev/vg01/Datos1 ; mount /dev/vg01/Datos1 /home/LVM/ Observemos que ya tenemos listo nuestro “Disco Duro”, si lo queremos permanente
recordemos usar su UUID y colocarlo en el archivo fstab.
root@sugeek:/home# df -h
S.ficheros Tamaño Usados Disp Uso% Montado en rootfs 5,0G 1,9G 2,9G 40% / udev 10M 0 10M 0% /dev tmpfs 101M 332K 100M 1% /run /dev/mapper/System-etc 5,0G 1,9G 2,9G 40% / tmpfs 5,0M 0 5,0M 0% /run/lock tmpfs 201M 0 201M 0% /run/shm /dev/sda1 184M 23M 152M 14% /boot /dev/mapper/System-home 5,0G 139M 4,6G 3% /home /dev/mapper/System-var 9,2G 343M 8,4G 4% /var /dev/mapper/vg01-Datos1 7,9G 146M 7,4G 2% /home/LVM
Ampliar y Reducir un VG
Si tenemos un nuevo disco duro, y lo queremos agregar a un sistema LVM debemos de prepararlo y luego agregarlo a un VG para usarlo en un LV.
el VG vg01, y con el comando pvdisplay observamos que tenemos agregado el dispositivo RAID /dev/md126p1 para ser usado en cualquier VG.
Para ampliar un VG, utilizamos el comando vgextend que funciona de la misma manera
que vgcreate, indicando el VG al cual se le desea añadir el PV. Como se podrá observar el VG Size paso de 8GB a 23,98GB y además los valores del PE también aumentaron, el único que se mantiene el Alloc PE el cual posee el tamaño del actual LV llamado Datos1, y si vemos los PV asociados al VG, entroncamos el PV /dev/md126p1.
root@sugeek:/home/soporte# vgextend vg01 /dev/md126p1 Volume group "vg01" successfully extended
root@sugeek:/home/soporte# vgdisplay -v vg01 Using volume group(s) on command line Finding volume group "vg01"
--- Volume group --- VG Name vg01 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 2 Act PV 2 VG Size 23,98 GiB PE Size 4,00 MiB Total PE 6139
Alloc PE / Size 2047 / 8,00 GiB Free PE / Size 4092 / 15,98 GiB
VG UUID K79hjk-dmOc-DvVF-ounS-XbAx-7jv0-e3OrAA --- Logical volume --- LV Path /dev/vg01/Datos1 LV Name Datos1 VG Name vg01 LV UUID EuDz0x-N41X-jCWz-sWA0-DarY-85Xw-UUu2Dm LV Write Access read/write
LV Creation host, time debian, 2014-07-14 22:27:57 -0500 LV Status available # open 1 LV Size 8,00 GiB Current LE 2047 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:1
--- Physical volumes --- PV Name /dev/sdg1 PV UUID HdJgWX-K1ZY-Ec30-OTLB-aNkz-YEhy-ARhFey PV Status allocatable Total PE / Free PE 2047 / 0 PV Name /dev/md126p1 PV UUID QHZC0o-VUuC-jlwG-QOUl-Wb6B-VC7t-HXc3TL PV Status allocatable Total PE / Free PE 4092 / 4092
Para reducir un VG utilizamos el comando vgreduce, el cual se le indica el PV que se
desea retirar, pero antes de ello, el PV debe de estar libre, no debe estar montado o siendo utilizado por algún LV y observaremos como los valores del PE dentro del VG cambian y sus PV asociados.
root@sugeek:/home/soporte# vgreduce vg01 /dev/md126p1 && vgdisplay -v vg01 Removed "/dev/md126p1" from volume group "vg01"
Using volume group(s) on command line Finding volume group "vg01"
--- Volume group --- VG Name vg01 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 1 Act PV 1 VG Size 8,00 GiB PE Size 4,00 MiB Total PE 2047
Alloc PE / Size 2047 / 8,00 GiB Free PE / Size 0 / 0 VG UUID K79hjk-dmOc-DvVF-ounS-XbAx-7jv0-e3OrAA --- Logical volume --- LV Path /dev/vg01/Datos1 LV Name Datos1 VG Name vg01 LV UUID EuDz0x-N41X-jCWz-sWA0-DarY-85Xw-UUu2Dm LV Write Access read/write
LV Creation host, time debian, 2014-07-14 22:27:57 -0500 LV Status available
# open 1
Segments 1
Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:1 --- Physical volumes --- PV Name /dev/sdg1 PV UUID HdJgWX-K1ZY-Ec30-OTLB-aNkz-YEhy-ARhFey PV Status allocatable Total PE / Free PE 2047 / 0
Ampliar y Reducir un LV
Como ya tenemos un nuevo PV dentro del VG al cual hace parte el LV, solo queda asociarle el PV nuevo al LV, para ello utilizamos el comando lvextend el cual permite los parámetros -l (Numero de extensiones lógicas LE) o -L como para lvcreate. Luego precisamos el nuevo tamaño del LV o , si añadimos el prefijo +, el tamaño adicional que deseamos. También se puede precisar, como ultimo argumento, el nombre del PV el cual forzar la extensión del LV, esto ultimo solo sera posible si el PV tiene suficiente PE disponibles.
A continuación vamos a agregar 12GB al LV Datos1.
root@sugeek:/home/soporte# lvextend -L +12g /dev/vg01/Datos1 Extending logical volume Datos1 to 20,00 GiB
Logical volume Datos1 successfully resized
Ahora observamos como están distribuidos los PE dentro del LV. root@sugeek:/home/soporte# lvdisplay -vm /dev/vg01/Datos1 Using logical volume(s) on command line
--- Logical volume ---
LV Path /dev/vg01/Datos1 LV Name Datos1
VG Name vg01
LV UUID EuDz0x-N41X-jCWz-sWA0-DarY-85Xw-UUu2Dm LV Write Access read/write
LV Creation host, time debian, 2014-07-14 22:27:57 -0500 LV Status available # open 1 LV Size 20,00 GiB Current LE 5119 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 254:1
--- Segments ---
Type linear
Physical volume /dev/sdg1 Physical extents 0 to 2046
Logical extent 2047 to 5118: Type linear
Physical volume /dev/md126p1 Physical extents 0 to 3071
Con el comando vgdisplay notaremos como el Free PE se ha reducido y el AllocPE a
aumentado. root@sugeek:/home/soporte# vgdisplay vg01 --- Volume group --- VG Name vg01 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 6 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 2 Act PV 2 VG Size 23,98 GiB PE Size 4,00 MiB Total PE 6139
Alloc PE / Size 5119 / 20,00 GiB Free PE / Size 1020 / 3,98 GiB
VG UUID K79hjk-dmOc-DvVF-ounS-XbAx-7jv0-e3OrAA
Ahora lo que queda es asociar dicho incremento a nuestra “Partición” ya que aun no se a agregado dicho aumento.
root@sugeek:/home/soporte# df -h /home/LVM
S.ficheros Tamaño Usados Disp Uso% Montado en /dev/mapper/vg01-Datos1 7,9G 146M 7,4G 2% /home/LVM
Para ello utilizamos el comando resize2fs el cual permite reducir y aumentar un sistema
de archivos. El primer argumento es el sistema de archivos, el segundo se indica el tamaño con un sufijo como lo podría ser K (KB), M (MB), G (GB). Si el sufijo, se indica el número de bloques del sistema de archivos. Si no se define un tamaño, este de forma automática tomara el tamaño total que este asociado al LV.
Se debe de tener en cuenta que para ampliar un LV se podrá realizar en caliente, lo que quiere decir que no necesitamos desmontar el LV, en cambio cuando se requiere reducir
root@sugeek:/home/soporte# df -h /home/LVM && df -h /home/LVM S.ficheros Tamaño Usados Disp Uso% Montado en /dev/mapper/vg01-Datos1 7,9G 146M 7,4G 2% /home/LVM root@debian:/home/soporte# resize2fs /dev/vg01/Datos1 resize2fs 1.42.5 (29-Jul-2012)
Filesystem at /dev/vg01/Datos1 is mounted on /home/LVM; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 2
Performing an on-line resize of /dev/vg01/Datos1 to 5241856 (4k) blocks. The filesystem on /dev/vg01/Datos1 is now 5241856 blocks long.
S.ficheros Tamaño Usados Disp Uso% Montado en /dev/mapper/vg01-Datos1 20G 150M 19G 1% /home/LVM
Como hemos notado el LV paso de 8GB a 20GB, con las 12GB que le hemos agregado. Nunca debemos de reducir por debajo del espacio real utilizado por los datos contenidos en el LV.
Ahora queda reducir nuestro LV, vamos reducirlo a 8GB, para ello se recomienda seguir los siguientes pasos.
• Desmontar el sistema de Archivos a reducir
• Comprobar el sistemas de archivos del LV que vamos a reducir con fsck
• Reducir del LV lógico con resize2fs
• Reducir el LV con el comando lvreduce
root@sugeek:/home/soporte# umount /home/LVM/ && fsck -f /dev/vg01/Datos1 fsck de util-linux 2.20.1
e2fsck 1.42.5 (29-Jul-2012)
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/vg01-Datos1: 11/1310720 files (0.0% non-contiguous), 120657/5241856 blocks
Ya lo hemos desmontado y comprobado, ahora sigue el turno de resize2fs.
root@sugeek:/home/soporte# resize2fs /dev/vg01/Datos1 10G resize2fs 1.42.5 (29-Jul-2012)
Resizing the filesystem on /dev/vg01/Datos1 to 2621440 (4k) blocks. The filesystem on /dev/vg01/Datos1 is now 2621440 blocks long.
Y ahora a reducir el LV con lvreduce, debemos de tener cuidado, si colocamos un valor
diferente al cual va a quedar el LV puede destruir los datos, en este no se puede definir el
PV como con lvextend. A la pregunta que arroja le respondemos que si (y), por ultimo
montamos nuevamente el sistema de archivo y verificamos si efectivamente quedo en 10GB.
root@sugeek:/# lvreduce -L 8G /dev/vg01/Datos1
WARNING: Reducing active logical volume to 8,00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce Datos1? [y/n]: y Reducing logical volume Datos1 to 8,00 GiB Logical volume Datos1 successfully resized
root@sugeek:/home/soporte# mount /dev/vg01/Datos1 /home/LVM/ root@sugeek:/home/soporte# df -h /home/LVM
S.ficheros Tamaño Usados Disp Uso% Montado en /dev/mapper/vg01-Datos1 8G 146M 7,8G 2% /home/LVM
Mover el contenido de un PV a otro PV
En entornos empresariales (Cuando no se tiene una infraestructura de almacenamiento y crecimiento bien planteada) es común ver como se hace necesario cambiar un disco duro por otro cumpliendo la necesidad de aumentar su tamaño. En estos casos se puede mover el contenido de un PV a otro, incluso varios PE de un LV a otro PV, o también determinados PE específicos. Sin precisar nada como destino, el LVM va a mover todos los PE del PV (Lo mas común), en los otros PV del VG. Debemos de tener en cuenta que para mover el contenido de un PV hacia otro, el otro PV debe de encontrarse en el mismo VG.
El comando pvmove permite mover los PE de un PV hacia otro. Se trata, de desplazar el
contenido del PV /dev/sdg1 hacia /dev/md126p1.
Nota: Para simular un contenido de 7GB dentro del LV hemos usado el comando dd if=/dev/zero of=/home/LVM bs=1024 count=7000000
A continuación verificamos cuanto espacio libre tiene el PV /dev/md126p1 (Free PE) y cuanto espacio ocupado tiene el PV /dev/sdg1 (Allocated PE), veremos que el PV /dev/sdg1 tiene todos llenos.
root@sugeek:/home/soporte# pvdisplay -m /dev/md126p1 --- Physical volume ---
PV Name /dev/md126p1 VG Name vg01
PV Size 15,99 GiB / not usable 4,00 MiB Allocatable yes PE Size 4,00 MiB Total PE 4092 Free PE 4091 Allocated PE 1 PV UUID QHZC0o-VUuC-jlwG-QOUl-Wb6B-VC7t-HXc3TL --- Physical Segments --- Physical extent 0 to 0:
Logical volume /dev/vg01/Datos1 Logical extents 2047 to 2047 Physical extent 1 to 4091:
root@sugeek:/home/soporte# pvdisplay -m /dev/sdg1 --- Physical volume ---
PV Name /dev/sdg1 VG Name vg01
PV Size 8,00 GiB / not usable 3,00 MiB Allocatable yes (but full)
PE Size 4,00 MiB Total PE 2047 Free PE 0 Allocated PE 2047 PV UUID HdJgWX-K1ZY-Ec30-OTLB-aNkz-YEhy-ARhFey --- Physical Segments --- Physical extent 0 to 2046:
Logical volume /dev/vg01/Datos1 Logical extents 0 to 2046
Vemos que el PV /dev/md126p1 tiene suficiente espacio para soportar el contenido del PV /dev/sdg1, procederemos a mover su contenido.
root@sugeek:/home/soporte# pvmove -v /dev/sdg1 /dev/md126p1 Executing: /sbin/modprobe dm-mirror
Finding volume group "vg01"
Archiving volume group "vg01" metadata (seqno 8). Creating logical volume pvmove0
Moving 2047 extents of logical volume vg01/Datos1 Found volume group "vg01"
activation/volume_list configuration setting not defined: Checking only host tags for vg01/Datos1
Updating volume group metadata Found volume group "vg01" Found volume group "vg01" Creating vg01-pvmove0
Loading vg01-pvmove0 table (254:4) Loading vg01-Datos1 table (254:1)
Suspending vg01-Datos1 (254:1) with device flush Suspending vg01-pvmove0 (254:4) with device flush Found volume group "vg01"
activation/volume_list configuration setting not defined: Checking only host tags for vg01/pvmove0
Resuming vg01-pvmove0 (254:4) Found volume group "vg01"
Loading vg01-pvmove0 table (254:4)
Suppressed vg01-pvmove0 identical table reload. Resuming vg01-Datos1 (254:1)
Creating volume group backup "/etc/lvm/backup/vg01" (seqno 9). Checking progress before waiting every 15 seconds
/dev/sdg1: Moved: 100,0% Found volume group "vg01" Found volume group "vg01"
Loading vg01-pvmove0 table (254:4)
Suspending vg01-Datos1 (254:1) with device flush Suspending vg01-pvmove0 (254:4) with device flush Found volume group "vg01"
Resuming vg01-pvmove0 (254:4) Found volume group "vg01" Resuming vg01-Datos1 (254:1) Found volume group "vg01" Removing vg01-pvmove0 (254:4) Removing temporary pvmove LV
Writing out final volume group after pvmove
Creating volume group backup "/etc/lvm/backup/vg01" (seqno 11).
Ahora comprobamos el VG y verificamos que el PV /dev/sdg1 ya tiene todos sus PE Libres, en cambio el PV /dev/md126p1 se ha ocupado (Allocated PE).
root@sugeek:/home/soporte# pvdisplay -m /dev/m126p1 && pvdisplay -m /dev/sdg1 --- Physical volume ---
PV Name /dev/sdg1 VG Name vg01
PV Size 8,00 GiB / not usable 3,00 MiB Allocatable yes PE Size 4,00 MiB Total PE 2047 Free PE 2047 Allocated PE 0 PV UUID HdJgWX-K1ZY-Ec30-OTLB-aNkz-YEhy-ARhFey --- Physical volume --- PV Name /dev/md126p1 VG Name vg01
PV Size 15,99 GiB / not usable 4,00 MiB Allocatable yes PE Size 4,00 MiB Total PE 4092 Free PE 2044 Allocated PE 2048 PV UUID QHZC0o-VuuC-jlwG-QOUl-Wb6B-VC7t-HXc3TL
Ya el PV sdg1 podemos quitarlo del VG. Con la opción -a quitaremos los PV que no están siendo usados.
root@sugeek:/home/soporte# vgreduce -a vg01 Removed "/dev/sdg1" from volume group "vg01" Physical volume "/dev/md126p1" still in use
Ahora nos queda indicarle al LV nuevo tamaño del PV, asignárselo (Indicando el total de PE Libres que son 2044) y comprobar que efectivamente se aplico con df.
Extending logical volume Datos1 to 15,98 GiB Logical volume Datos1 successfully resized resize2fs 1.42.5 (29-Jul-2012)
Filesystem at /dev/mapper/vg01-Datos1 is mounted on /home/LVM; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/mapper/vg01-Datos1 to 4190208 (4k) blocks. The filesystem on /dev/mapper/vg01-Datos1 is now 4190208 blocks long.
S.ficheros Tamaño Usados Disp Uso% Montado en /dev/mapper/vg01-Datos1 16G 6,9G 8,2G 46% /home/LVM
Como vemos el tamaño del LV es el tamaño de mi PV, además utiliza el mismo tamaño que usaba el antiguo de 6,9G y sus correspondientes archivos.
Suprimir un VG
Para poder suprimir de forma adecuada un LVM de nuestro sistema es necesario seguir la siguiente estructura.
• Desmontar por completo los LV que tengamos
• Suprimir todos los LV con lvremove
• Retirar todos los los PV de los VG con lvreduce
• Destruir el VG con vgremove
• Suprimir el PV con pvremove
Siguiendo las instrucciones anteriores:
root@sugeek:/home# umount /home/LVM && lvremove /dev/vg01/Datos1 Do you really want to remove active logical volume Datos1? [y/n]: y Logical volume "Datos1" successfully removed
El siguiente comando quitara todos los PV posibles, recordemos que LVM siempre deja un PV asociado a un VG. Por ende aparecerá un error de que no se puede quitar 1 PV del VG, no nos preocupemos, esto es normal.
root@sugeek:/home# vgreduce -a vg01
Can't remove final physical volume "/dev/md126p1" from volume group "vg01" Procederemos a quitar el VG y luego eliminaremos el PV.
root@sugeek:/home# vgremove vg01 && vgdisplay -v vg01 Volume group "vg01" successfully removed
Volume group "vg01" not found
root@sugeek:/home# pvremove /dev/md126p1 /dev/sdg1
Labels on physical volume "/dev/md126p1" successfully wiped Labels on physical volume "/dev/sdg1" successfully wiped Existen otros comandos que no vimos, dichos comandos son:
• pvchange: Modifica el estado de un PV, por ejemplo para prohibir la asignación de extensiones físicas en este volumen.
• Pvresize: Vuelve a dimensionar un PV si su partición o disco de origen ha sido
ampliado o reducido, común con los RAID por software.
• Pvscan: Busca todos los volúmenes presentes en todos los soportes de almacenamiento del sistema.
• Vgchange: Modifica los atributos de un VG, para activarlo o desactivarlo por ejemplo, pero también para modificar sus valores máximos del PV y de PE, o para prohibir su ampliación o reducción.
• Vgscan: Busca todos los grupos de volúmenes en todos los soportes.
• Vgrename: Renombra un VG
• vgmerge: Ensambla 2 VG en uno solo
• lvresize: Vuelve a dimensionar un LV, es equivalente a lvextend y lvreduce
• lvchange: Modifica los atributos del LV