Mostrando entradas con la etiqueta LVM. Mostrar todas las entradas
Mostrando entradas con la etiqueta LVM. Mostrar todas las entradas

martes, 13 de noviembre de 2007

Cambiar un disco por uno de mayor capacidad con LVM en caliente

En mi anterior artículo sobre simular un raid lineal con LVM, RuBICK nos comentaba:
Luego hay otro "truquillo" para sustituir un disco de ej: 80 GB por uno de 300Gb en caliente y sin que nadie lo note, pero eso seguro que nos lo tiene guardado Iván para otro dia.

   Tal y como le contesté en los comentarios, ya conté en el artículo inicial del LVM cómo hacerlo, aunque revisando el artículo me he dado cuenta de que me quedó un poco largo y justo eso quedó al final. Así, lo he rescatado para que se vean aún más las posibilidades de LVM.

   Partimos de un disco/partición con datos /dev/sda1 y lo que vamos a hacer es reemplazarlo por uno nuevo /dev/sdb1 previamente formateado con LVM.
  • Creamos un PV en la nueva partición:
    shian:~# pvcreate /dev/sdb1
    Physical volume "/dev/sdb1" successfully created
  • Lo añadimos al VG vg01 ya existente:
    shian:~# vgextend vg01 /dev/sdb1
    Volume group "vg01" successfully extended
  • Mostramos la información y comprobamos que tenemos dos PVs en el mismo VG. Nos fijamos en las extensiones disponibles en cada uno:
    shian:~# 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 5
    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 5.99 GB
    PE Size 4.00 MB
    Total PE 1534
    Alloc PE / Size 256 / 1.00 GB
    Free PE / Size 1278 / 4.99 GB
    VG UUID BpNJTl-9tlr-DjzM-C8Mb-LfnL-NWDa-uyWDpf

    --- Logical volume ---
    LV Name /dev/vg01/lvdatos
    VG Name vg01
    LV UUID 7CYTLY-YgI2-c64S-F50h-vPXH-TEk9-o4hFOE
    LV Write Access read/write
    LV Status available
    # open 1
    LV Size 1.00 GB
    Current LE 256
    Segments 1
    Allocation inherit
    Read ahead sectors 0
    Block device 254:0

    --- Physical volumes ---
    PV Name /dev/sda1
    PV UUID 1wounc-DIHj-Tf54-4h2c-4rcB-w137-gLH4I6
    PV Status allocatable
    Total PE / Free PE 511 / 255

    PV Name /dev/sdb1
    PV UUID N0nwct-jNnY-eU0D-6Evh-tkIN-9vKs-9KsV3v
    PV Status allocatable
    Total PE / Free PE 1023 / 1023
  • Movemos la información de la partición que queremos liberar. Previamente nos aparece un error indicando que necesitamos tener activado en el kernel el mirror, así que cargamos el módulo:
    shian:~# pvmove /dev/sda1
    mirror: Required device-mapper target(s) not detected in your kernel

    shian:~# modprobe dm_mirror
  • De nuevo, intentamos mover los datos, aunque ahora sí lo conseguimos. Este paso variará en función de la cantidad de datos que se deban mover:
    shian:~# pvmove -v /dev/sda1
    /dev/sda1: Moved: 100.0%
  • Comprobamos el estado del VG y vemos que el PV /dev/sda1 tiene todas las extensiones disponibles:
    shian:~# vgdisplay -v vg01
    ...
    ...
    --- Physical volumes ---
    PV Name /dev/sda1
    PV UUID 1wounc-DIHj-Tf54-4h2c-4rcB-w137-gLH4I6
    PV Status allocatable
    Total PE / Free PE 511 / 511

    PV Name /dev/sdb1
    PV UUID N0nwct-jNnY-eU0D-6Evh-tkIN-9vKs-9KsV3v
    PV Status allocatable
    Total PE / Free PE 1023 / 767
  • Y finalmente eliminamos el PV /dev/sda1 del VG vg01 y comprobamos el resultado:
    shian:~# vgreduce -v vg01 /dev/sda1
    Removed "/dev/sda1" from volume group "vg01"

    shian:~# 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 1
    Metadata Sequence No 11
    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 4.00 GB
    PE Size 4.00 MB
    Total PE 1023
    Alloc PE / Size 256 / 1.00 GB
    Free PE / Size 767 / 3.00 GB
    VG UUID BpNJTl-9tlr-DjzM-C8Mb-LfnL-NWDa-uyWDpf

    --- Logical volume ---
    LV Name /dev/vg01/lvdatos
    VG Name vg01
    LV UUID 7CYTLY-YgI2-c64S-F50h-vPXH-TEk9-o4hFOE
    LV Write Access read/write
    LV Status available
    # open 1
    LV Size 1.00 GB
    Current LE 256
    Segments 1
    Allocation inherit
    Read ahead sectors 0
    Block device 254:0

    --- Physical volumes ---
    PV Name /dev/sdb1
    PV UUID N0nwct-jNnY-eU0D-6Evh-tkIN-9vKs-9KsV3v
    PV Status allocatable
    Total PE / Free PE 1023 / 767

  •    Así, hemos conseguido cambiar un disco que se nos estaba quedando pequeño por otro de mayor capacidad, en caliente y sin que nadie note nada. Obviamente si es un servidor con discos internos, necesariamente hay que apagar la máquina para añadir/quitar el disco, pero con máquinas conectadas a almacenamiento externo no habría ningún problema.

    jueves, 25 de octubre de 2007

    Simular un raid lineal con LVM partiendo de un disco con información

       Como continuación de la entrada anterior en la que contaba cómo crear un raid 1 a partir de un disco con datos y teniendo uno nuevo, ahora voy a responder a la pregunta que dejaba abierta al final. No obstante tengo que decir que tanto Super coco como Rubick se adelantaron a la solución en los comentarios del post.

       Si recordamos, el truco de crear el raid 1 con un único disco no funcionaba para un raid lineal, así que, ¿qué podemos hacer?. La solución que se me ha ocurrido es usar LVM. Aunque no es exactamente un raid lineal el resultado final es el mismo puesto que tenemos un único punto de montaje y la capacidad de los dos discos.

       Al igual que en el artículo anterior, no me voy a extender demasiado en los detalles puesto que mi anterior artículo sobre LVM en linux es más completo.
  • Partimos de la misma situación que en la entrada anterior. Ya existe la partición /dev/sda1 y se encuentra montada en /mnt/datos.
  • Particionamos el nuevo disco como LVM (tipo 8e).
    shian:~# fdisk /dev/sdb
    ...
    Disk /dev/sdb: 1073 MB, 1073741824 bytes
    255 heads, 63 sectors/track, 130 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot Start End Blocks Id System
    /dev/sdb1 1 130 1044193+ 8e Linux LVM
    ...
  • Creamos un PV y un VG en él.
    shian:~# pvcreate /dev/sdb1
    Physical volume "/dev/sdb1" successfully created

    shian:~# vgcreate vg01 /dev/sdb1
    Volume group "vg01" successfully created
  • Ahora creamos un lvol con toda la capacidad del disco:
    shian:~# lvcreate -L 1G -n lvdatos vg01
    Logical volume "lvdatos" created
  • Lo formateamos, lo montamos y copiamos los datos que ya tenemos.
    shian:~# mkfs.ext3 /dev/vg01/lvdatos

    shian:~# mkdir /mnt/datos_lvm
    shian:~# mount /dev/vg01/lvdatos /mnt/datos_lvm/

    shian:~# cp -a /mnt/datos/* /mnt/datos_lvm/
  • No perdamos de vista el espacio que tenemos disponible:
    shian:~# df -h
    /dev/sda1 1004M 43M 911M 5% /mnt/datos
    /dev/mapper/vg01-lvdatos
    1001M 18M 932M 2% /mnt/datos_lvm
  • Ahora desmontamos la partición con los datos originales, la eliminamos y creamos una nueva de tipo LVM.
    shian:~# umount /dev/sda1
    shian:~# fdisk /dev/sda
    ...
    Disk /dev/sda: 1073 MB, 1073741824 bytes
    255 heads, 63 sectors/track, 130 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot Start End Blocks Id System
    /dev/sda1 1 130 1044193+ 8e Linux LVM
  • Creamos un PV en el antiguo disco que acabamos de particionar.
    shian:~# pvcreate /dev/sda1
    Physical volume "/dev/sda1" successfully created
  • Y lo añadimos al VG que creamos al principio para ampliarlo.
    shian:~# vgextend vg01 /dev/sda1
    Volume group "vg01" successfully extended
  • Si mostramos la información del VG, podemos ver que ahora los dos discos forman parte de él y que tenemos 1016MB nuevos disponibles para utilizar, por lo que podemos ampliar el lvol.
    shian:~# 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 1.98 GB
    PE Size 4.00 MB
    Total PE 508
    Alloc PE / Size 254 / 1016.00 MB
    Free PE / Size 254 / 1016.00 MB
    VG UUID fYT1oQ-w6zH-z6b6-58eo-qZ39-u1Ua-vROsN4

    --- Logical volume ---
    LV Name /dev/vg01/lvdatos
    VG Name vg01
    LV UUID NBOF9q-jmfW-RCik-MH2P-0Od4-DgMR-5YRJf7
    LV Write Access read/write
    LV Status available
    # open 1
    LV Size 1016.00 MB
    Current LE 254
    Segments 1
    Allocation inherit
    Read ahead sectors 0
    Block device 253:0

    --- Physical volumes ---
    PV Name /dev/sdb1
    PV UUID yH8UHo-Vgy2-Pk9t-AozF-s1Ik-JPmL-og1kM4
    PV Status allocatable
    Total PE / Free PE 254 / 0

    PV Name /dev/sda1
    PV UUID 4cGeH2-nl7W-eH4a-mBHo-BCBI-b0np-f6gw1v
    PV Status allocatable
    Total PE / Free PE 254 / 254
  • Y finalmente lo ampliamos. Recordemos que primero ampliamos el lvol y luego el filesystem.
    shian:~# lvextend -L+1016M /dev/vg01/lvdatos
    Extending logical volume lvdatos to 1.98 GB
    Logical volume lvdatos successfully resized

    shian:~# umount /mnt/datos_lvm/

    shian:~# e2fsck -f /dev/vg01/lvdatos

    shian:~# resize2fs /dev/vg01/lvdatos
    The filesystem on /dev/vg01/lvdatos is now 520192 blocks long.
  • Y ya estaría ampliado sin necesidad de formateos.
    shian:~# df -h
    Filesystem Size Used Avail Use% Mounted on
    /dev/mapper/vg01-lvdatos
    2.0G 43M 1.9G 3% /mnt/datos_lvm

  •    Y con esto respodo a la duda inicial que me planteó Renato. Espero que te sea útil.

    sábado, 21 de abril de 2007

    Linux y LVM

       En los 320GB del disco de mi nuevo pc he reservado unos 45GB para linux. En concreto me he estado esperando para instalar la nueva Ubuntu Feisty Fawn porque iba a salir en poco tiempo. Durante estos días he estado pensando cómo particionar esos 45GB y la verdad es que no lo tenía nada claro. Después de preguntar a Alex por gtalk, esta fue su solución:
    150MB /boot ext2 (o ext3)
    6GB / ext3
    1GB /var ext3
    2GB swap
    El resto en un PV de LVM para vgdata (por ejemplo). Después creas /opt en lvopt sobre vgdata y /home en lvhome sobre vgdata.
    Por último dejar el /usr en el / (no ponerlo en LVM ni como otro FS)

       Además me dió unos cuantos comandos para crear todo y me "soltó" para que probase.

       Después de mirar el man y buscar un poco por internet me enteré de qué es LVM, en qué se basa, para qué me podía servir y cómo utilizarlo. Manos a la obra...

       Como siempre, para cacharrear utilizo una máquina virtual puesto que es mucho más cómodo y permite mucha flexibilidad a la hora de añadir discos, cambiarlos de tipo,... Añadí un nuevo disco duro scsi de 2 GB (para las pruebas es más que suficiente) y me dispuse a aprender:
  • El primer paso como siempre particionar. En este caso, el tipo de partición será Linux LVM (8e)

    shian:~# fdisk /dev/sda

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

    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): p

    Disk /dev/sda: 2147 MB, 2147483648 bytes
    255 heads, 63 sectors/track, 261 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot Start End Blocks Id System
    /dev/sda1 1 261 2096451 8e Linux LVM

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

    Calling ioctl() to re-read partition table.
    Syncing disks.
  • El siguiente paso es crear el Physical Volume (PV):
    shian:~# pvcreate -v /dev/sda1
    Set up physical volume for "/dev/sda1" with 4192518 available sectors
    Zeroing start of device /dev/sda1
    Physical volume "/dev/sda1" successfully created
  • Ahora creamos el Volume Group (VG) con el PV recien creado. En mi caso crearé sólo uno:
    shian:~# vgcreate -v vg01 /dev/sda1
    Adding physical volume '/dev/sda1' to volume group 'vg01'
    Archiving volume group "vg01" metadata.
    Creating volume group backup "/etc/lvm/backup/vg01"
    Volume group "vg01" successfully created
  • Después creamos los Logical Volume (LV) que queramos. Cada uno de estos será al final un punto de montaje distinto. En mi caso crearé uno de 1 GB para datos (y dejaré el otro GB libre):
    shian:~# lvcreate -v -L 1G -n lvdatos vg01
    Finding volume group "vg01"
    Creating logical volume lvdatos
    Archiving volume group "vg01" metadata.
    Creating volume group backup "/etc/lvm/backup/vg01"
    Found volume group "vg01"
    Loading vg01-lvdatos
    Zeroing start of logical volume "lvdatos"
    Creating volume group backup "/etc/lvm/backup/vg01"
    Logical volume "lvdatos" created

  •    Bien, veamos lo que llevamos hecho hasta ahora.
  • Lista de PVs creados:
    shian:~# pvdisplay -v
    Scanning for physical volume names
    --- Physical volume ---
    PV Name /dev/sda1
    VG Name vg01
    PV Size 2.00 GB / not usable 0
    Allocatable yes
    PE Size (KByte) 4096
    Total PE 511
    Free PE 255
    Allocated PE 256
    PV UUID 1wounc-DIHj-Tf54-4h2c-4rcB-w137-gLH4I6
  • Lista de VGs creados. En VG Size vemos que el VG es de 2GB y que hemos utilizado 1GB (Alloc Size):
    shian:~# vgdisplay
    --- Volume group ---
    VG Name vg01
    System ID
    Format lvm2
    Metadata Areas 1
    Metadata Sequence No 2
    VG Access read/write
    VG Status resizable
    MAX LV 0
    Cur LV 1
    Open LV 0
    Max PV 0
    Cur PV 1
    Act PV 1
    VG Size 2.00 GB
    PE Size 4.00 MB
    Total PE 511
    Alloc PE / Size 256 / 1.00 GB
    Free PE / Size 255 / 1020.00 MB
    VG UUID BpNJTl-9tlr-DjzM-C8Mb-LfnL-NWDa-uyWDpf
  • Lista de LVols creados:
    shian:~# lvdisplay -v
    Finding all logical volumes
    --- Logical volume ---
    LV Name /dev/vg01/lvdatos
    VG Name vg01
    LV UUID 7CYTLY-YgI2-c64S-F50h-vPXH-TEk9-o4hFOE
    LV Write Access read/write
    LV Status available
    # open 0
    LV Size 1.00 GB
    Current LE 256
    Segments 1
    Allocation inherit
    Read ahead sectors 0
    Block device 254:0
  • Y finalmente, si queremos ver la asignación de VGs, LVols y PVs:
    shian:~# vgdisplay -v
    Finding all volume groups
    Finding volume group "vg01"
    --- Volume group ---
    VG Name vg01
    System ID
    Format lvm2
    Metadata Areas 1
    Metadata Sequence No 2
    VG Access read/write
    VG Status resizable
    MAX LV 0
    Cur LV 1
    Open LV 0
    Max PV 0
    Cur PV 1
    Act PV 1
    VG Size 2.00 GB
    PE Size 4.00 MB
    Total PE 511
    Alloc PE / Size 256 / 1.00 GB
    Free PE / Size 255 / 1020.00 MB
    VG UUID BpNJTl-9tlr-DjzM-C8Mb-LfnL-NWDa-uyWDpf

    --- Logical volume ---
    LV Name /dev/vg01/lvdatos
    VG Name vg01
    LV UUID 7CYTLY-YgI2-c64S-F50h-vPXH-TEk9-o4hFOE
    LV Write Access read/write
    LV Status available
    # open 0
    LV Size 1.00 GB
    Current LE 256
    Segments 1
    Allocation inherit
    Read ahead sectors 0
    Block device 254:0

    --- Physical volumes ---
    PV Name /dev/sda1
    PV UUID 1wounc-DIHj-Tf54-4h2c-4rcB-w137-gLH4I6
    PV Status allocatable
    Total PE / Free PE 511 / 255

  •    Después de este pequeño resumen seguimos con la creación de la partición.
  • Una vez que tenemos el lvol creado lo formateamos con la sistema de ficheros que más nos guste:
    shian:~# mkfs.ext3 /dev/vg01/lvdatos
    mke2fs 1.37 (21-Mar-2005)
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    131072 inodes, 262144 blocks
    13107 blocks (5.00%) reserved for the super user
    First data block=0
    8 block groups
    32768 blocks per group, 32768 fragments per group
    16384 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 27 mounts or
    180 days, whichever comes first. Use tune2fs -c or -i to override.
  • Lo montamos para probar:
    shian:~# mkdir /mnt/datos_lvm
    shian:~# mount /dev/vg01/lvdatos /mnt/datos_lvm
    shian:~# df -h /mnt/datos_lvm/
    Filesystem Size Used Avail Use% Mounted on
    /dev/mapper/vg01-lvdatos
    1008M 33M 925M 4% /mnt/datos_lvm
  • Y listo, ya sólo queda añadirlo a /etc/fstab para que se monte automáticamente en el arranque:
    shian:~# echo "/dev/vg01/lvdatos /mnt/datos_lvm ext3   defaults        0       2" >> /etc/fstab

  •    Hasta aquí es lo fácil. Como se puede ver con unos cuantos comandos tenemos el filesystem montado y listo para ser utilizado sin mayores complicaciones.

       La ventaja de utilizar lvm es que podemos redimensionar las particiones de manera dinámica sin tener que hacer un backup de la información, tener que reparticionar,... Vamos a probarlo.
  • Creamos un archivo aleatorio de 25MB, calculamos su CRC y lo apuntamos:
    shian:~# dd if=/dev/urandom of=/mnt/datos_lvm/random count=51200
    51200+0 records in
    51200+0 records out
    26214400 bytes transferred in 7.991592 seconds (3280248 bytes/sec)
    shian:~# cksum /mnt/datos_lvm/random
    1105592823 26214400 /mnt/datos_lvm/random
  • Supongamos que necesitamos espacio adicional en el disco, por ejemplo, 500MB más. Lo que tenemos que hacer es ampliar el lvol y después el filesystem:
    shian:~# lvextend -v -L+500M /dev/vg01/lvdatos
    Finding volume group vg01
    Archiving volume group "vg01" metadata.
    Extending logical volume lvdatos to 1.49 GB
    Creating volume group backup "/etc/lvm/backup/vg01"
    Found volume group "vg01"
    Found volume group "vg01"
    Loading vg01-lvdatos
    Logical volume lvdatos successfully resized
  • En el caso de un sistema de archivos como ext3 es necesario desmontarlo primero antes de realizar la ampliación. Adicionalmente también es necesario ejecutar e2fsck para chequear el filesystem:
    shian:~# umount /mnt/datos_lvm/
    shian:~# resize2fs /dev/vg01/lvdatos
    resize2fs 1.37 (21-Mar-2005)
    Please run 'e2fsck -f /dev/vg01/lvdatos' first.

    shian:~# e2fsck -f /dev/vg01/lvdatos
    e2fsck 1.37 (21-Mar-2005)
    Pass 1: Checking inodes, blocks, and sizes
    Pass 2: Checking directory structure
    Pass 3: Checking directory connectivity
    Pass 4: Checking reference counts
    Pass 5: Checking group summary information
    /dev/vg01/lvdatos: 12/131072 files (0.0% non-contiguous), 18737/262144 blocks

    shian:~# resize2fs /dev/vg01/lvdatos
    resize2fs 1.37 (21-Mar-2005)
    Resizing the filesystem on /dev/vg01/lvdatos to 390144 (4k) blocks.
    The filesystem on /dev/vg01/lvdatos is now 390144 blocks long.
  • Y ya estaría listo. Si ahora montamos el filesystem y/o comprobamos el lvol vemos que tiene 500MB más:
    shian:~# mount /mnt/datos_lvm/
    shian:~# df -h /mnt/datos_lvm/
    Filesystem Size Used Avail Use% Mounted on
    /dev/mapper/vg01-lvdatos
    1.5G 58M 1.4G 4% /mnt/datos_lvm

    shian:~# lvdisplay
    --- Logical volume ---
    LV Name /dev/vg01/lvdatos
    VG Name vg01
    LV UUID 7CYTLY-YgI2-c64S-F50h-vPXH-TEk9-o4hFOE
    LV Write Access read/write
    LV Status available
    # open 0
    LV Size 1.49 GB
    Current LE 381
    Segments 1
    Allocation inherit
    Read ahead sectors 0
    Block device 254:0
  • Para reducirlo el procedimiento es similiar, pero hay que tener en cuenta que primero hay que reducir el filesystem y luego el lvol. La primera vez que lo hice no lo pensé mucho y reduje primero el lvol, por lo que me cargué los datos ;-)
    shian:~# umount /mnt/datos_lvm/
    shian:~# e2fsck -f /dev/vg01/lvdatos
    e2fsck 1.37 (21-Mar-2005)
    Pass 1: Checking inodes, blocks, and sizes
    Pass 2: Checking directory structure
    Pass 3: Checking directory connectivity
    Pass 4: Checking reference counts
    Pass 5: Checking group summary information
    /dev/vg01/lvdatos: 12/196608 files (0.0% non-contiguous), 20795/390144 blocks

    shian:~# resize2fs /dev/vg01/lvdatos 1G
    resize2fs 1.37 (21-Mar-2005)
    Resizing the filesystem on /dev/vg01/lvdatos to 262144 (4k) blocks.
    The filesystem on /dev/vg01/lvdatos is now 262144 blocks long.

    shian:~# lvreduce -v -L-500M /dev/vg01/lvdatos
    Finding volume group vg01
    WARNING: Reducing active logical volume to 1.00 GB
    THIS MAY DESTROY YOUR DATA (filesystem etc.)
    Do you really want to reduce lvdatos? [y/n]: y
    Archiving volume group "vg01" metadata.
    Reducing logical volume lvdatos to 1.00 GB
    Creating volume group backup "/etc/lvm/backup/vg01"
    Found volume group "vg01"
    Found volume group "vg01"
    Loading vg01-lvdatos
    Logical volume lvdatos successfully resized

    shian:~# mount /mnt/datos_lvm/
    shian:~# df -h /mnt/datos_lvm/
    Filesystem Size Used Avail Use% Mounted on
    /dev/mapper/vg01-lvdatos
    1008M 58M 921M 6% /mnt/datos_lvm
  • Comprobamos el cksum para ver que no nos hemos cargado nada:
    shian:~# cksum /mnt/datos_lvm/random
    1105592823 26214400 /mnt/datos_lvm/random

  •    Aunque todo parece muy bonito, no fue tan fácil. Como he dicho al principio del artículo el disco virtual que añadí al vmware era scsi por lo que cuando arrancaba la máquina, como los controladores scsi se cargan posteriormente al montaje de las particiones aparecía un error porque no encontraba el dispositivo. Como no estaba seguro que de fuera eso añadí un nuevo disco ide, repetí todos los pasos y funcionó a la perfección. Así, el problema era del scsi. Lo que tuve que hacer para solucionarlo fue:
  • Miré el controlador scsi que utiliza vmware y los módulos cargados:
    shian:~# lspci
    0000:00:00.0 Host bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01)
    0000:00:01.0 PCI bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 01)
    0000:00:07.0 ISA bridge: Intel Corp. 82371AB/EB/MB PIIX4 ISA (rev 08)
    0000:00:07.1 IDE interface: Intel Corp. 82371AB/EB/MB PIIX4 IDE (rev 01)
    0000:00:07.3 Bridge: Intel Corp. 82371AB/EB/MB PIIX4 ACPI (rev 08)
    0000:00:0f.0 VGA compatible controller: VMWare Inc [VMWare SVGA II] PCI Display Adapter
    0000:00:10.0 SCSI storage controller: LSI Logic / Symbios Logic 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI (rev 01)
    0000:00:11.0 Ethernet controller: Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rev 10)

    shian:~# lsmod
    Module Size Used by
    ipv6 241728 -
    ehci_hcd 28744 -
    usbcore 127804 -
    shpchp 34416 -
    pci_hotplug 14784 -
    intel_agp 23084 -
    pcnet32 31972 -
    mii 5392 -
    crc32 3888 -
    agpgart 33472 -
    raid1 20912 -
    md_mod 72172 -
    sd_mod 19552 -
    dm_mod 55692 -
    mptspi 16348 -
    mptscsih 24720 -
    mptbase 52064 -
    scsi_transport_spi 23792 -
    scsi_mod 145484 -
    ide_cd 40200 -
    cdrom 39424 -
    unix 25328 -
    ext3 126488 -
    jbd 54552 -
    ide_disk 16112 -
    generic 4952 -
    piix 10228 -
    ide_core 117252 -
    evdev 9824 -
  • La clave me la dio el MPT tanto de la controladora como de los módulos cargados:
    0000:00:10.0 SCSI storage controller: LSI Logic / Symbios Logic 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI (rev 01)

    ...
    mptspi 16348 -
    mptscsih 24720 -
    mptbase 52064 -
    ...
  • Así, añadí al archivo /etc/modules lo siguiente:
    # /etc/modules: kernel modules to load at boot time.
    #
    # This file should contain the names of kernel modules that are
    # to be loaded at boot time, one per line. Comments begin with
    # a "#", and everything on the line after them are ignored.
    ide-cd
    ide-disk
    mptspi
    mptscsih
    mptbase
  • Guardé los cambios, reinicié y ahora ya sí se inicializaba la tarjeta scsci antes del lvm y al intentar montar las particiones éstas estaban disponibles.


  •    Otra de las cosas interesantes que podemos hacer con lvm es crear un volumen físico sobre uno de raid. Aprovechando el raid 1 que cree hace tiempo hice la siguiente prueba. Ojo que los datos del raid se pierden!.
    shian:~# umount /dev/md0
    shian:~# pvcreate -v /dev/md0
    Set up physical volume for "/dev/md0" with 2096000 available sectors
    Zeroing start of device /dev/md0
    Physical volume "/dev/md0" successfully created

    shian:~# vgcreate -v vg02 /dev/md0
    Adding physical volume '/dev/md0' to volume group 'vg02'
    Archiving volume group "vg02" metadata.
    Creating volume group backup "/etc/lvm/backup/vg02"
    Volume group "vg02" successfully created

    shian:~# lvcreate -v -L 900M -n lvol_raid vg02
    Finding volume group "vg02"
    Creating logical volume lvol_raid
    Archiving volume group "vg02" metadata.
    Creating volume group backup "/etc/lvm/backup/vg02"
    Found volume group "vg02"
    Loading vg02-lvol_raid
    Zeroing start of logical volume "lvol_raid"
    Creating volume group backup "/etc/lvm/backup/vg02"
    Logical volume "lvol_raid" created

    shian:~# mkfs.ext3 /dev/vg02/lvol_raid
    mke2fs 1.37 (21-Mar-2005)
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    115200 inodes, 230400 blocks
    11520 blocks (5.00%) reserved for the super user
    First data block=0
    8 block groups
    32768 blocks per group, 32768 fragments per group
    14400 inodes per group
    Superblock backups stored on blocks:
    32768, 98304, 163840, 229376

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

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

    shian:~# mount /dev/vg02/lvol_raid /mnt/raid

    shian:~# df -h /mnt/raid
    Filesystem Size Used Avail Use% Mounted on
    /dev/mapper/vg02-lvol_raid
    886M 17M 825M 2% /mnt/raid

       Y ya tenemos un LVM + Raid 1 funcionando y con las ventajas de ambos: la redundancia del raid y la gestión dinámica de las particiones de lvm.

       Finalmente, para terminar, otra cosa que se puede hacer con lvm es lo siguiente (cortesía de Alex). Imaginemos que tenemos lvm montado en un disco, con particiones, datos,... pero que se nos está quedando pequeño. Nos compramos un disco nuevo para sustituir al antiguo (en el ejemplo he añadido un nuevo disco scsi a la máquina virtual de 4GB, sdb) y después de particionarlo como lvm hacemos lo siguiente:
  • Creamos un PV en la nueva partición:
    shian:~# pvcreate -v /dev/sdb1
    Set up physical volume for "/dev/sdb1" with 8385483 available sectors
    Zeroing start of device /dev/sdb1
    Physical volume "/dev/sdb1" successfully created
  • Lo añadimos al VG vg01 ya existente:
    shian:~# vgextend -v vg01 /dev/sdb1
    Checking for volume group "vg01"
    Archiving volume group "vg01" metadata.
    Adding physical volume '/dev/sdb1' to volume group 'vg01'
    Volume group "vg01" will be extended by 1 new physical volumes
    Creating volume group backup "/etc/lvm/backup/vg01"
    Volume group "vg01" successfully extended
  • Mostramos la información y comprobamos que tenemos dos PVs en el mismo VG. Nos fijamos en las extensiones disponibles en cada uno:
    shian:~# 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 5
    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 5.99 GB
    PE Size 4.00 MB
    Total PE 1534
    Alloc PE / Size 256 / 1.00 GB
    Free PE / Size 1278 / 4.99 GB
    VG UUID BpNJTl-9tlr-DjzM-C8Mb-LfnL-NWDa-uyWDpf

    --- Logical volume ---
    LV Name /dev/vg01/lvdatos
    VG Name vg01
    LV UUID 7CYTLY-YgI2-c64S-F50h-vPXH-TEk9-o4hFOE
    LV Write Access read/write
    LV Status available
    # open 1
    LV Size 1.00 GB
    Current LE 256
    Segments 1
    Allocation inherit
    Read ahead sectors 0
    Block device 254:0

    --- Physical volumes ---
    PV Name /dev/sda1
    PV UUID 1wounc-DIHj-Tf54-4h2c-4rcB-w137-gLH4I6
    PV Status allocatable
    Total PE / Free PE 511 / 255

    PV Name /dev/sdb1
    PV UUID N0nwct-jNnY-eU0D-6Evh-tkIN-9vKs-9KsV3v
    PV Status allocatable
    Total PE / Free PE 1023 / 1023
  • Movemos la información de la partición que queremos liberar. Previamente nos aparece un error indicando que necesitamos tener activado en el kernel el mirror, así que cargamos el módulo:
    shian:~# pvmove -v /dev/sda1
    Finding volume group "vg01"
    Archiving volume group "vg01" metadata.
    Creating logical volume pvmove0
    mirror: Required device-mapper target(s) not detected in your kernel

    shian:~# modprobe dm_mirror
  • De nuevo, intentamos mover los datos, aunque ahora sí lo conseguimos:
    shian:~# pvmove -v /dev/sda1
    Finding volume group "vg01"
    Archiving volume group "vg01" metadata.
    Creating logical volume pvmove0
    Moving 256 extents of logical volume vg01/lvdatos
    Found volume group "vg01"
    Updating volume group metadata
    Creating volume group backup "/etc/lvm/backup/vg01"
    Found volume group "vg01"
    Found volume group "vg01"
    Loading vg01-pvmove0
    Found volume group "vg01"
    Loading vg01-lvdatos
    Checking progress every 15 seconds
    /dev/sda1: Moved: 72.7%
    /dev/sda1: Moved: 100.0%
    Found volume group "vg01"
    Found volume group "vg01"
    Found volume group "vg01"
    Loading vg01-pvmove0
    Found volume group "vg01"
    Loading vg01-lvdatos
    Found volume group "vg01"
    Found volume group "vg01"
    Removing temporary pvmove LV
    Writing out final volume group after pvmove
    Creating volume group backup "/etc/lvm/backup/vg01"
  • Comprobamos el estado del VG y vemos que el PV /dev/sda1 tiene todas las extensiones disponibles:
    shian:~# vgdisplay -v vg01
    ...
    ...
    --- Physical volumes ---
    PV Name /dev/sda1
    PV UUID 1wounc-DIHj-Tf54-4h2c-4rcB-w137-gLH4I6
    PV Status allocatable
    Total PE / Free PE 511 / 511

    PV Name /dev/sdb1
    PV UUID N0nwct-jNnY-eU0D-6Evh-tkIN-9vKs-9KsV3v
    PV Status allocatable
    Total PE / Free PE 1023 / 767
  • Y finalmente eliminamos el PV /dev/sda1 del VG vg01 y comprobamos el resultado:
    shian:~# vgreduce -v vg01 /dev/sda1
    Finding volume group "vg01"
    Using physical volume(s) on command line
    Archiving volume group "vg01" metadata.
    Removing "/dev/sda1" from volume group "vg01"
    Creating volume group backup "/etc/lvm/backup/vg01"
    Removed "/dev/sda1" from volume group "vg01"

    shian:~# 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 1
    Metadata Sequence No 11
    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 4.00 GB
    PE Size 4.00 MB
    Total PE 1023
    Alloc PE / Size 256 / 1.00 GB
    Free PE / Size 767 / 3.00 GB
    VG UUID BpNJTl-9tlr-DjzM-C8Mb-LfnL-NWDa-uyWDpf

    --- Logical volume ---
    LV Name /dev/vg01/lvdatos
    VG Name vg01
    LV UUID 7CYTLY-YgI2-c64S-F50h-vPXH-TEk9-o4hFOE
    LV Write Access read/write
    LV Status available
    # open 1
    LV Size 1.00 GB
    Current LE 256
    Segments 1
    Allocation inherit
    Read ahead sectors 0
    Block device 254:0

    --- Physical volumes ---
    PV Name /dev/sdb1
    PV UUID N0nwct-jNnY-eU0D-6Evh-tkIN-9vKs-9KsV3v
    PV Status allocatable
    Total PE / Free PE 1023 / 767

  •    En este extenso (si has llegado hasta aquí enhorabuena) artículo hemos visto qué es el LVM y cómo gestionarlo.

       Tengo que admitir que durante mis pruebas me he cargado alguna vez algo pero nada que no se pueda arreglar empezando de nuevo. Además, si finalmente me decido a utilizarlo en casa ya me andaré con más cuidado y pensaré bien lo que hago antes de estropearlo. Todavía no tengo muy claro si lo haré o no porque en caso de fallo no creo que sea lo mismo intentar recuperar una partición ext3 que una lvm, en fín, me tendré que informar.