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.

    6 comentarios:

    Vicente Navarro dijo...

    Muy interesante, útil y presentado de forma muy sencilla. Nada más hay que añadir ;-)

    Gracias

    Iván dijo...

    Hola Super coco,

    me alegro de que te haya gustado. Gracias a ti por el comentario.

    Saludos, Iván.

    Anónimo dijo...

    Gracias Ivan por los articulos estan muy interesantes, creo que este fin de semana probare y te comento

    Saludos

    Iván dijo...

    Hola Renato,

    por favor, cuando lo pruebes cuéntanos qué tal te ha ido y si funciona correctamente en el NSLU2.

    Espero que te sirva.

    Saludos, Iván.

    Anónimo dijo...

    Buen artículo, haces que LVM se vaya aprendiendo por capítulos :)

    Lo bueno que tiene esto que luego podemos asignar el espacio a los filesystems que queramos, asi no es problema que nos quedemos sin espacio en /var y por ejemplo ya que en linux no hace falta desmontar el filesytem y hacer el resize, con el filesytem montado, ext2online /pto_montaje y listo, probadlo :)

    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. Prometo no adelantarme más :)

    Iván dijo...

    Hola Rubick

    me alegro de que te haya gustado. Respecto al truco de cambiar un disco por otro, ya lo conté en el post de LVM en Linux, pero ahora al buscarlo me he dado cuenta de que el post me quedó muy largo y seguro que nadie llega hasta el final, así que creo que lo rescataré para un próximo post.

    Saludos, Iván.

    Publicar un comentario