lvm: ponme un nuevo disco

14 de diciembre de 2009

Actualmente tengo una maquina con un Oracle al que se le termina el espacio de disco. Tiene un disco de 68Gb en RAID1 montado por LVM (el /dev/sda). Hemos montado otro disco de 68Gb en RAID1 (el /dev/sdb) con la idea de ampliar el espacio del volum-group formado en la maquina.

Miramos primero que se ha reconocido el segundo disco:

root@virtuozo:~# ls -l /dev/sd*   
brw-rw---- 1 root disk 8,  0 2009-12-11 11:50 /dev/sda
brw-rw---- 1 root disk 8,  1 2009-12-11 11:50 /dev/sda1
brw-rw---- 1 root disk 8,  2 2009-12-11 11:50 /dev/sda2
brw-rw---- 1 root disk 8,  5 2009-12-11 11:50 /dev/sda5
brw-rw---- 1 root disk 8, 16 2009-12-12 16:39 /dev/sdb

Miramos cómo está montado el LVM en esta máquina. Miramos los Physical Volumen o los discos físicos que forman mi LVM:
root@virtuozo:~# pvscan
  PV /dev/sda5   VG virtuozo.barcelona   lvm2 [68.00 GB / 0    free]
  Total: 1 [68.00 GB] / in use: 1 [68.00 GB] / in no VG: 0 [0   ]

Vemos que existe un volum-group llamado “virtuozo.barcelona” que está compuesto de la partición física /dev/sda5 de 68Gb.

Vemos ahora como está particionado este volum-group en diferentes logical-volum:
root@virtuozo:~# lvscan
  ACTIVE            '/dev/virtuozo.barcelona/root' [65.18 GB] inherit
  ACTIVE            '/dev/virtuozo.barcelona/swap_1' [2.82 GB] inherit

Está particionado en dos. La primera en “root” de 65Gb y la segunda es “swap_1” de 2Gb.

Ahora que tenemos esto presente, la idea de añadir un nuevo disco (el /dev/sdb) es aumentar el tamaño del logical-volum “root”, pasando de 65Gb a 133Gb aproximadamente.

Vamos pues. Lo primero que haremos es crear una única partición en /dev/sdb de system id “8e” (tipo LVM).
root@virtuozo:~# fdisk /dev/sdb

The number of cylinders for this disk is set to 8908.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-8908, default 1): 
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-8908, default 8908): 
Using default value 8908

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Una vez creada la partición (ver ls –l /dev/sd*), la formateamos. En mi caso es formato ext3:
root@virtuozo:~# mkfs -t ext3 -c /dev/sdb1

Ahora ya podemos añadir nuestro nuevo disco al volum-group:
root@virtuozo:~# pvcreate /dev/sdb1
root@virtuozo:~# vgextend virtuozo.barcelona /dev/sdb1
root@virtuozo:~# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda5
  VG Name               virtuozo.barcelona
  PV Size               68.00 GB / not usable 1.27 MB
  Allocatable           yes (but full)
  PE Size (KByte)       4096
  Total PE              17408
  Free PE               0
  Allocated PE          17408
  PV UUID               gextNx-qoAF-aNn9-1ARg-72bY-oQeY-sHaOQ7   
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               virtuozo.barcelona
  PV Size               68.24 GB / not usable 454.00 KB
  Allocatable           yes 
  PE Size (KByte)       4096
  Total PE              17469
  Free PE               17469
  Allocated PE          0
  PV UUID               dCibq8-B4TY-adnR-HR6j-iLv6-f15H-pBknpX

Para finalizar aumentamos el tamaño del logical-volum llamado “root”:
root@virtuozo:~# lvextend -l+17469 /dev/virtuozo.barcelona/root 
  Extending logical volume root to 133.42 GB
  Logical volume root successfully resized
root@virtuozo:~# lvscan
  ACTIVE            '/dev/virtuozo.barcelona/root' [133.42 GB] inherit
  ACTIVE            '/dev/virtuozo.barcelona/swap_1' [2.82 GB] inherit
# resize2fs /dev/virtuozo.barcelona/root
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/virtuozo.barcelona-root
                      133G  2.8G  123G   3% /
varrun               1008M   84K 1008M   1% /var/run
varlock              1008M     0 1008M   0% /var/lock
udev                 1008M   52K 1008M   1% /dev
devshm               1008M     0 1008M   0% /dev/shm
/dev/sda1             236M   26M  199M  12% /boot

Observar como utilizamos el parámetro +17469 para aumentar el espacio con los “Free PE” (Physical Extended) del nuevo disco que hemos añadido. También podríamos utilizar algo como “lvextend -L+68G /dev/virtuozo.barcelona/root”.

Esta es una tabla de todos los comandos que se pueden utilizar para LVM:
--------------------
Comandos de volúmenes físicos
--------------------
pvchange |  Cambia los atributos de un volumen físico
pvcreate |  Crea un volumen físico
pvdata  |  Muestra información de depuración sobre un volumen físico
pvdisplay  | Muestra información sobre un volumen físico
pvmove   | Mueve extensiones físicas de un volumen físico a otro.
pvscan  | Localiza y enumera todos los volúmenes físicos
--------------------
Comandos de grupos volumen
--------------------
vgcfgbackup  | Hace una copia del área del descriptor de grupo volumen
vgcfgrestore  | Recupera el área del descriptor de grupo volumen al disco
vgchange  | Cambia los atributos de un grupo volumen
vgck   | Comprueba la consistencia del área del descriptor de grupo volumen
vgcreate  | Crea un grupo volumen a partir de volúmenes físicos
vgdisplay  | Muestra los atributos de un grupo volumen
vgexport  | Exporta un grupo volumen del sistema
vgextend  | Añade volúmenes físicos a un grupo volumen
vgimport  | Importa un grupo volumen al sistema
vgmerge  | Combina dos grupos volumen
vgmknodes  | Combina un directorio y los archivos especiales de un grupo volumen
vgreduce  | Elimina volúmenes físicos de un grupo volumen
vgremove  | Elimina un grupo volumen
vgrename  | Renombra un grupo volumen
vgscan   | Localiza y enumera todos los grupos volumen del sistema
vgsplit  | Divide un grupo volumen
--------------------
Comandos de volúmenes lógicos
--------------------
lvchange  | Cambia los atributos de un volumen lógico 
lvcreate  | Crea un volumen lógico
lvdisplay  | Muestra los atributos de un volumen lógico
lvextend  | Incrementa el tamaño de un volumen lógico
lvreduce  | Reduce el tamaño de un volumen lógico
lvremove  | Elimina un volumen lógico
lvrename  | Renombra un volumen lógico
lvscan   | Localiza y enumera todos los volúmenes lógicos, creando /etc/lvmtab 
y /etc/lvmtab.d/*
--------------------
Comandos del Administrador de Volúmenes Lógicos (LVM)
--------------------
lvmchange  | Cambia los atributos del sistema LVM
lvmdiskscan  | Localiza y enumera todos los discos disponibles, los dispositivos 
múltiples y las particiones
lvmsadc  | Recoge información sobre la actividad de LVM
lvmsar   | Muestra información sobre la actividad de LVM


6 comentarios:

Anónimo dijo...

Hola Amperis, has ampliado la particion logica pero falta ampliar el filesystem con resize2fs

Anónimo dijo...

Hola buenas,

Entiendo que para realizar estos pasos, debes de tener configurado lvm en la particion original, sino tocaria reparticionar y reinstalar.

Mi pregunta es ¿recomendarias siempre instalar el sistema operativo en una particion LVM?

Saludos

amperis dijo...

Correcto faltaba el resize2fs para expandir el filesystem.

amperis dijo...

Respecto a instalar el SO en LVM supongo que eso depende mucho de tú entorno.
Que pasa si tienes un sistema que genera muchos /tmp o muchos /var/log... estaría bien poder ir dimensionando con LVM segun tus necesidades.
Otra cosa es poder instalar el SO en un particion tradicional y /var/log, /home, etc sobre LVM.
Otra cosa es que LVM complica la gestión y puede ser que tú entorno no lo necesite.

Por ejemplo un servidor Web (hosting) o un Samba pondria un LVM, pero para un servir de Nagios que solo monitoriza pues no pondria LVM.

gautama dijo...

Este paso no es necesario:

"Una vez creada la partición (ver ls –l /dev/sd*), la formateamos. En mi caso es formato ext3:
root@virtuozo:~# mkfs -t ext3 -c /dev/sdb1"

Lluís dijo...

Si añadimos un disco nuevo en un entorno virtual y no queremos reiniciar el servidor, podemos ejecutar el script siguiente para que el SO vea el disco nuevo:

#!/bin/bash
HOSTID=`ls /sys/class/scsi_host`
echo $HOSTID
echo "- - -" > /sys/class/scsi_host/$HOSTID/scan