Archivo etiqueta LVM

Cómo extender un volumen en LVM

A veces es necesario extender un volumen lógico, expandiendo el volumen físico donde está alojado. Si este es el caso, puedes seguir este ejemplo que extiende un volumen de 450 GB a 500 GB: Primero consultamos a geometry del disco

:~# fdisk -l /dev/sdb
Disk /dev/sdb: 483.2 GB, 483183820800 bytes
 255 heads, 63 sectors/track, 58743 cylinders, total 943718400 sectors
 Units = sectors of 1 * 512 = 512 bytes
 Sector size (logical/physical): 512 bytes / 512 bytes
 I/O size (minimum/optimal): 512 bytes / 512 bytes
 Disk identifier: 0x0001178e

Luego de expandir el volumen, se fuerza a que se rescanee el volumen

:~# echo 1 > /sys/block/sdb/device/rescan

Consultamos nuevamente la geometría del disco

:~# fdisk -l /dev/sdb
Disk /dev/sdb: 536.9 GB, 536870912000 bytes
 255 heads, 63 sectors/track, 65270 cylinders, total 1048576000 sectors
 Units = sectors of 1 * 512 = 512 bytes
 Sector size (logical/physical): 512 bytes / 512 bytes
 I/O size (minimum/optimal): 512 bytes / 512 bytes
 Disk identifier: 0x0001178e

Como puede verse el tamaño del disco aumentó pero solo lo sabe del sistema operativo, ya que a nivel de LVM sigue teniendo la misma información porque no se ha expandido el volumen físico:

:~# pvs
 PV VG Fmt Attr PSize PFree
 /dev/sda5 debian lvm2 a-- 3.76g 0
 /dev/sda6 debian lvm2 a-- 13.00g 0
 /dev/sdb svn_vg lvm2 a-- 450.00g 0

Si expandimos el volumen físico con la siguente orden:

# pvresize /dev/sdb
 Physical volume "/dev/sdb" changed
 1 physical volume(s) resized / 0 physical volume(s) not resized

Y ahora consultamos los el espacio de los volúmenes físicos veremos el espacio agregado:

:~# pvs
 PV VG Fmt Attr PSize PFree
 /dev/sda5 debian lvm2 a-- 3.76g 0
 /dev/sda6 debian lvm2 a-- 13.00g 0
 /dev/sdb svn_vg lvm2 a-- 500.00g 50.00g

Ahora se debe expandir el volumen lógico y la dimensión de sistema de archivos en caliente. Ambas cosas se pueden hacer con una sola orden:

:~# lvresize -r -L +50G /dev/mapper/svn_vg-svn
 Extending logical volume svn to 500.00 GiB
 Logical volume svn successfully resized
 resize2fs 1.42.5 (29-Jul-2012)
 Filesystem at /dev/mapper/svn_vg-svn is mounted on /var/data/svn; on-line resizing required
 old_desc_blocks = 29, new_desc_blocks = 32
 Performing an on-line resize of /dev/mapper/svn_vg-svn to 131070976 (4k) blocks.
 The filesystem on /dev/mapper/svn_vg-svn is now 131070976 blocks long.

Finalmente si consultamos el espacio disponible tendremos los 50 GB adicionales en el sistema de archivos:

:~# df -h
 Filesystem Size Used Avail Use% Mounted on
 rootfs 993M 287M 655M 31% /
 udev 10M 0 10M 0% /dev
 tmpfs 397M 228K 397M 1% /run
 /dev/mapper/debian-root 993M 287M 655M 31% /
 tmpfs 5.0M 0 5.0M 0% /run/lock
 tmpfs 794M 0 794M 0% /run/shm
 /dev/sda1 228M 34M 183M 16% /boot
 /dev/mapper/debian-home 2.0G 39M 1.9G 3% /home
 /dev/mapper/debian-tmp 3.9G 7.1M 3.7G 1% /tmp
 /dev/mapper/debian-usr 2.0G 869M 1.1G 46% /usr
 /dev/mapper/debian-var 6.7G 2.1G 4.3G 33% /var
 /dev/mapper/svn_vg-svn 493G 432G 62G 88% /var/data/svn

,

2 Comentarios

Cómo mover un volumen físico en LVM

LVM move

Si se requiere mover datos de un disco a otro podríamos pensar en copiar los datos con cp, rsync, o cualquier otro utilitario para posteriormente desmontar la partición, editar el /etc/fstab para que apunte a la nueva ruta, y todo lo que conlleva desincoporar un disco o partición por otra. Pero si se tomó la previsión de hacer el particionado de disco con LVM, existe una manera más limpia de hacer el cambio de disco en caliente, es decir, sin necesidad de desmontar las particiones, e incluso dejando las mismas referencias en el /etc/fstab ya que se seguirá usando la misma partición LVM. Veamos un ejemplo. Si se tiene un disco de 50 GB como un volumen físico en /dev/sdb, asociado a un volumen de grupo data, y se quiere mover los datos a otro disco /dev/sdc  esto es lo que de debe hacer. A continucación se muestra la representación de la distribución inicial:

LVM concepts

podemos consultar el estado actual del los volúmenes físicos con la orden pvs:

# pvs
PV VG Fmt Attr PSize PFree
 /dev/sda2 system lvm2 a- 19.77g 0 
 /dev/sdb data lvm2 a- 50.00g 0

Luego se crea el volumen físico donde se moverá la información:

# pvcreate /dev/sdc
 Physical volume "/dev/sdc" successfully created

Consultamos nuevamente los volúmenes físicos:

# pvs
PV VG Fmt Attr PSize PFree 
 /dev/sda2 system lvm2 a- 19.77g 0 
 /dev/sdb data lvm2 a- 50.00g 0 
 /dev/sdc lvm2 a- 50.00g 50.00g

Vamos ahora a consultar los volúmenes de grupo:

# vgs
VG #PV #LV #SN Attr VSize VFree
 data 1 1 0 wz--n- 50.00g 0 
 system 1 6 0 wz--n- 19.77g 0

Como puede verse el volumen de grupo llamado data ocupa 50 GB. Como este es el volumen de grupo que contiene el volumen físico que queremos mover (/dev/sdb), debemos agregar el volumen físico a este grupo:

# vgextend data /dev/sdc
 Volume group "data" successfully extended

Si consultamos nuevamente veremos que el volumen de grupo ahora tiene 100 GB correspondientes a /dev/sdb (0 GB libres) y /dev/sdc ( 50 GB libres):

# pvs
PV VG Fmt Attr PSize PFree 
 /dev/sda2 system lvm2 a- 19.77g 0 
 /dev/sdb data lvm2 a- 50.00g 0 
 /dev/sdc data lvm2 a- 50.00g 50.00g
# vgs
 VG #PV #LV #SN Attr VSize VFree 
 data 2 1 0 wz--n- 99.99g 50.00g
 system 1 6 0 wz--n- 19.77g 0

Ahora procederemos a mover los datos del  volumen físico /dev/sdb al /dev/sdc:

LVM move

# pvmove /dev/sdb
/dev/sdb: Moved: 0.0%
/dev/sdb: Moved: 11.8%
/dev/sdb: Moved: 30.5%
/dev/sdb: Moved: 75.7%
/dev/sdb: Moved: 95.0%
/dev/sdb: Moved: 99.3%
/dev/sdb: Moved: 100.0%

Aquí no hace falta indicar el otro volumen porque los datos se distribuirán entre los volúmenes físicos restantes del volumen de grupo, y en este caso es solo /dev/sdcAhora verificamos  la distribución de los volúmenes físicos a ver cómo quedó:

# pvs
PV VG Fmt Attr PSize PFree 
 /dev/sda2 system lvm2 a- 19.77g 0 
 /dev/sdb data lvm2 a- 50.00g 50.00g
 /dev/sdc data lvm2 a- 50.00g 0

Como puede verse el disco /dev/sdb no tiene datos (50 GB libres) mientras que /dev/sdc tiene los datos (0 GB libres). Luego faltaría quitar el volumen físico a desincorporar del volumen de grupo:

# vgreduce data /dev/sdb
 Removed "/dev/sdb" from volume group "data"

Ahora  consultamos los volúmenes físicos y los volúmenes de grupo:

# pvs
PV VG Fmt Attr PSize PFree 
 /dev/sda2 system lvm2 a- 19.77g 0 
 /dev/sdb lvm2 a- 50.00g 50.00g
 /dev/sdc data lvm2 a- 50.00g 0
# vgs
VG #PV #LV #SN Attr VSize VFree
 data 1 1 0 wz--n- 50.00g 0 
 system 1 6 0 wz--n- 19.77g 0

Y por último procedemos desechar el volumen físico:

# pvremove /dev/sdb
 Labels on physical volume "/dev/sdb" successfully wiped
# pvs
PV VG Fmt Attr PSize PFree
 /dev/sda2 system lvm2 a- 19.77g 0
 /dev/sdc data lvm2 a- 50.00g 0

Esto permite que se puedan mover los datos de un disco a otro, sin necesidad de copiar los datos a nivel del sistema operativo, sin interrumpir servicios o reiniciar el equipo. Al final tendremos el disco /dev/sdc como el volumen físico del volumen data como se muestra a continuación:

LVM final

Referencia: http://www.tldp.org/HOWTO/LVM-HOWTO/removeadisk.html

,

2 Comentarios

LVM en Fedora / Red Hat

Enlace al video: http://blip.tv/lgallardo/lvm-en-fedora-red-hat-5908538

En este video podemos ver el proceso de instalación usando LVM en  Fedora (vale también para Red Hat). Como nota aclaratoria, el directorio que debe estar fuera del LVM es /boot, aun y cuando en el video se crea la raíz, la cual incluye a /boot.

Si no entiendes algunos de los términos de LVM, puedes revisar el artículo anterior donde se habló sobre los conceptos básicos de LVM  y algunas oŕdenes para crear un LVM a mano.

,

No hay Comentarios

Logical Volume Manager (LVM)

En el esquema de particionamiento tradicional de discos el administrador del sistema planifica con antelación el uso que se le dará cada partición. Por ejemplo, para una laptop con disco duro de 120 GB y RAM de 1 GB se puede tener el siguiente esquema de particiones:

  • 1 GB para swap (/dev/sda1),
  • 12 GB para la raíz (/dev/sda2),
  • 107 GB para /home (/dev/sda3), es decir,  el resto del disco.

Hasta aquí todo bien, pero qué pasa si el día de mañana el tamaño de la RAM aumenta a 2 GB? Para invernar habrá que aumentar la swap, y como ya se particionó todo el disco y no se dejó espacio lo que queda es reparticionar el disco, bien sea redimensionando con utilidades que lo permitan, siempre y cuando el sistema de archivo también lo permita (por ejemplo, los sistemas ext[2|3|4] permite redimensionamiento).

¿No existe algo más flexible? Si, se llama LVM (Logical Volume Manager) , y en esencia permite redimensionar en caliente las particiones, para por ejemplo, quitar 1GB de /home (/dev/sda3) y dárselo a la swap (/dev/sda1).

LVM (Logical Volume Manager)

Para poder usar LVM primero se debe asignar volúmenes físicos, luego asignar volúmenes de grupo y por último volúmenes lógicos. Todo esto parece confuso a la primera, pero vamos a explicar cada uno de estos términos y cómo se relacionan:

  • Volúmenes físicos: Es el soporte final donde se guardaran los datos, y pueden ser varios discos o incluso particiones de un disco. No guarda relación directa con los puntos de montajes. Ejemplos de volúmenes físicos: /dev/sda , /dev/sdb1, etc.
  • Volúmenes de grupo: Es la agrupación de los volúmenes físicos en un volumen que permite ver todos los discos y particiones como uno solo dispositivo. Ejemplo de volumen de grupo: /dev/vg00
  • Volúmenes lógicos: Son los volúmenes donde irán nuestros sistemas de archivos (ext2, ext3,xfs,vfat, por ejemplo) y por ende los puntos de montaje (/, /home, swap, /usr, /var, etc). En este nivel es donde se hace el formateo del sistema de archivos a usar, y es donde los datos se distribuirán a nivel lógico, similar a las particiones que acostumbramos a usar. Ejemplo de volúmenes lógicos: /dev/vg00/lv_rootfs, /dev/vg00/lv_swap, /dev/vg00/lv_home.

Instalación de LVM

En Debian puede usarse LVM instalando el siguiente paquete:

aptitude install lvm2

En otras distribuciones como Fedora, Red Hat o el mismo Ubuntu deben buscar el nombre adecuado del paquete para su instalación.

Órdenes de LVM

Para crear un LVM con sus volúmenes físicos, de grupo y lógicos veamos algunas de las instrucciones que tenemos disponible:

Volúmenes físicos

Orden Descripción
pvcreate Crea volúmenes físicos para ser usado por LVM
pvs Muestra información acerca los volúmenes lógicos
pvdisplay Muestra varios atributos de los volúmenes físicos
pvresize Redimensiona volúmenes físicos
pvmove Mueve datos de un volumen físico a otro.

Volúmenes de grupo

Orden Descripción
vgcreate Crea volúmnes de grupo para ser usado por LVM
vgs Muestra información acerca de los volúmenes de grupo
vgdisplay Muestra varios atributos de los volúmenes de grupo
vgextend Agrega volúmenes físicos a un volumen de grupo
vfreduce Quita volúmenes físicos del volumen de grupo
vgremove Elimina volúmenes de grupo

Volúmenes lógicos

Orden Descripción
lvcreate  Crea volúmnes lógicos para ser usado por LVM
lvs Muestra información acerca de los volúmenes lógicos
lvdisplay Muestra varios atributos de los volúmenes lógicos
lvresize | lvreduce | lvextend Redimensiona volúmenes lógicos
lvmove Elimina volúmenes lógicos del sistema

Ejemplo de creación de un LVM

Supongamos que se tiene el disco /dev/sdb  libre con 8 GB,  con dos particiones de 4GB cada una (/dev/sdb1 y /dev/sdb2), y sobre estas particiones se quiere crear un LVM que alojará los puntos de montajes: La raíz (/) de 1 GB, la swap de 1 GB (swap) y el resto de los 6 GB al directorio de los usuarios (/home). Para hacer el LVM podemos escribir las siguientes órdenes:

root@buckbeak:~# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created

root@buckbeak:~#pvcreate /dev/sdb2
Physical volume "/dev/sdb2" successfully created

root@buckbeak:~# pvs

PV         VG         Fmt  Attr PSize  PFree
/dev/sdb1                         lvm2 a-    4.00g 4.00g
/dev/sdb2                         lvm2 a-    3.99g 3.99g

root@buckbeak:~# vgcreate vg_group01 /dev/sdb1 /dev/sdb2

Volume group "vg_group01" successfully created

root@buckbeak:~# vgs

VG         #PV #LV #SN Attr   VSize  VFree
vg_group01   2   0   0 wz--n-  7.99g 7.99g

root@buckbeak:~# lvcreate -n lv_rootfs vg_group01 -L 1G
Logical volume "lv_rootfs" created

root@buckbeak:~# lvcreate -n lv_swap vg_group01 -L 1G
Logical volume "lv_swap" created

root@buckbeak:~# lvcreate -n lv_home vg_group01 -L 6G
Volume group "vg_group01" has insufficient free space (1534 extents): 1536 required

root@buckbeak:~# lvcreate -n lv_home vg_group01 -l 1534
Logical volume "lv_home" created

root@buckbeak:~# lvs
LV        VG         Attr   LSize  Origin Snap%  Move Log Copy%  Convert
lv_home   vg_group01 -wi-a-  5.99g
lv_rootfs vg_group01 -wi-a-  1.00g
lv_swap   vg_group01 -wi-a-  1.00g

Ahora se puede dar el sistema de archivo para cada uno de los volúmenes lógicos:

root@buckbeak:~# mkfs.ext4 /dev/vg_group01/lv_rootfs
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

root@buckbeak:~# mkfs.ext4 /dev/vg_group01/lv_home
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
393216 inodes, 1570816 blocks
78540 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1610612736
48 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

root@buckbeak:~# mkswap /dev/vg_group01/lv_swap
mkswap: /dev/vg_group01/lv_swap: warning: don't erase bootbits sectors
on whole disk. Use -f to force.
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=e743b4f3-1c80-4503-be88-6934d575cd55

root@buckbeak:~# swapon /dev/vg_group01/lv_swap

root@buckbeak:~# swapon -s
Filename                Type        Size    Used    Priority
/dev/dm-1                               partition    2064376    8    -1
/dev/dm-5                               partition    1048568    0    -2

Si se quieren usar estos volúmenes lógicos, bien puenden montarse con la orden mount o especificarlos en el archivo /etc/fstab para que sea montados al iniciar el sistema.

Referencias

,

9 Comentarios