LVM para torpes (I)

El LVM (Gestor de volúmenes lógicos, Logical Volume Manager) es una de mis funcionalidades preferidas en Linux. En esta y posteriores entradas intentaré explicarlo de la forma más sencilla posible para que los que no lo usaron nunca se adentren en él.

De forma simplificada podríamos decir que LVM es una capa de abstracción entre un dispositivo de almacenamiento (por ejemplo un disco) y un sistema de ficheros. En realidad pueden existir múltiples capas, como cifrado con device-mapper, raid software con md, etc. por encima o debajo de LVM. Pero para empezar diremos que LVM estará entre nuestros discos físicos y los sistemas de ficheros (o swap, o almacenamiento de máquinas virtuales,…).

Las ventajas que tienen son múltiples, pero la inicial y más evidente es la flexibilidad frente al particionado tradicional. Pongamos (sin LVM) que creamos 4 particiones contiguas en un disco. Si en el futuro quisieramos aumentar alguna de las 3 primeras no podríamos hacerlo sin borrar las siguientes, lo que es complejo, peligroso y requiere de parada del servicio casi seguro. Pongamos que quisieramos ampliar la última, siempre tendríamos el límite del tamaño del disco. Pongamos que compramos un disco nuevo, y queremos ampliar el espacio de un sistema de ficheros existente en el disco anterior con el espacio nuevo, imposible salvo con “ñapas” de nuevos sistemas de ficheros y puntos de montaje. Con LVM todas esas limitaciones desaparecen. Podemos aumentar sus “particiones” (volúmenes lógicos en adelante) independientemente de que no haya espacio libre contiguo a éstas. Podemos aumentar sus volúmenes lógicos con espacio libre de diferentes discos físicos. E incluso podemos mover volúmenes lógicos entre dispositivos físicos. Y lo mejor de todo… ¡en caliente! Sin desmontar el sistema de ficheros, ¡sin parar un servicio! ¡Brujería! ¡Brujería!

Las ventajas no terminan ahí, y procuraré repasarlas todas en lo sucesivo. Pero empecemos hablando de nomenclatura. Para entender casi por completo el LVM debemos tener muy claros únicamente tres conceptos (y que el concepto es el concepto):

  • Volumen físico/Physical Volume (PV). Un volumen físico (PV en adelante) es un dispositivo de almacenamiento, o más correctamente expresado un dispositivo de bloque. Puede ser un disco duro, una partición, una tarjeta SD, un floppy, un dispositivo RAID, un dispositivo loop (que convierte un fichero a un dispositivo de bloque), un dispositivo cifrado, ¡incluso un volumen lógico (LV) puede usarse de PV!. Para simplificar diremos que un PV es una fuente de almacenamiento, es decir un dispositivo que nos proporciona espacio. En el ejemplo más sencillo: el disco duro de nuestra máquina, o una partición en él. Un PV no hay que formatearlo, simplemente se le entregará al LVM “en crudo” y desde ese momento será gestionado por el LVM, no volveremos a tocarlo.
Dispositivos que pueden usarse como PVs

Dispositivos que pueden usarse como PVs

  • Grupo de volúmenes/Volume Group (VG). Para poder usar el espacio/almacenamiento de un PV, éste debe pertenecer a un Grupo de volúmenes (en adelante VG). El VG será el centro del universo LVM. Podemos decir que un VG es una especie de disco duro virtual (ya veo a los puristas rasgándose las vestiduras). Un VG es un “disco” compuesto de UNO o más PVs y que crece simplemente añadiendo más PVs. A diferencia de un disco real, un VG puede crecer con el tiempo, sólo hay que “darle” un PV más. En una máquina con un sólo disco podemos crear un VG que esté compuesto por un sólo PV (el disco físico o una de sus particiones). Si con el tiempo nos quedamos sin espacio en el VG, compramos otro disco (PV), lo añadimos al VG y el resto es transparente para sistemas de ficheros, procesos o usuarios. ¡Magia negra!

 

Un VG con nombre acorde a su composición: vg_absurdo

Un VG con nombre acorde a su composición: vg_absurdo

  • Volumen Lógico/Logical Volume (LV). Los volúmenes lógicos (en adelante LV) son “el producto final” del LVM. Son estos dispositivos los que usaremos para crear sistemas de ficheros, swap, discos para máquinas virtuales, etc… Por seguir con la analogía del “disco duro virtual” que es el VG, los LVs serían las particiones. Con los que vamos a trabajar realmente. A diferencia de “sus primas” las particiones tradicionales, los LVs pueden crecer (mientras haya espacio en el VG) independientemente de la posición en la que estén, incluso expandiéndose por diferentes PVs. Un LV de 1G puede estar compuesto de 200MB procedentes de un disco duro, 400MB de un RAID software, y 400MB de una partición en un tercer dispositivo físico. El único requisito es que todo los PVs pertenezcan al mismo VG. Por supuesto, aunque posible, no parece una combinación con mucho sentido 😛

 

Un LV (lv_ejemplo) dentro del VG (vg_absurdo) usando espacio de 3 PVs

Un LV (lv_ejemplo) dentro del VG (vg_absurdo) usando espacio de 3 PVs

Perdón por los dibujos, el día que repartían “venas artísticas” no fui al cole. La idea es visualizar los diferentes componentes. Que agrupamos PVs para dar forma (tamaño) al VG, y que con el espacio del VG podemos crear LVs. Los LVs de un VG pueden usar espacio de uno o varios PVs, por supuesto seremos nosotros los que decidamos de que PVs sacamos el espacio que compone un LV. El ejemplo actual no tiene mucho sentido ya que tenemos un LV (pensemos en una “partición”) que tiene partes redundadas (el espacio que viene del RAID) y partes que no (el espacio asignado desde el disco o la partición), o partes más rápidas (posiblemente el RAID) y partes más lentas. En este VG (insisto, un tanto extraño) podríamos tener LVs que sólo usaran espacio del disco, y LVs que sólo usaran espacio del RAID, lo que tendría algo más de sentido. En cualquier caso lo normal es que los PVs que forman un VG tengas características (redundancia, velocidad) similares.

Otra ventaja del LVM que ya podemos ver es que los nombres de los componentes los elegimos nosotros, lo que facilita su comprensión. Al crear un VG o un LV, somos nosotros los que decidimos sus nombres. Por tanto nos alejamos de cosas “raras” como sda5, md3, etc. y pasamos a una nomenclatura que nos ayuda a comprender que hay en cada LV:

# Ejemplos de nombres para VGs y LVs
# Un VG para producción, posiblemente con RAID como PVs
# Los nombres de los LVs permiten saber que es lo que contienen
/dev/produccion/datos
/dev/produccion/aplicacion
# Un VG para desarrollo, tal vez sin RAID y con discos "baratos"
/dev/desarrollo/datos
# Una máquina con discos internos y con acceso a una cabina de discos
/dev/interno/raiz
/dev/interno/swap
/dev/cabina/web

Con estos términos claros podemos explicar mejor la flexibilidad del LVM con unos ejemplos:

  • Un LV puede crecer siempre que haya espacio libre en el VG al que pertenece. El LVM se encarga de que lo que haya sobre el LV (frecuentemente un sistema de ficheros) vea todo el espacio continuo. Podemos crear inicialmente un LV usando espacio de un PV, pero si posteriormente queremos aumentarlo, aunque no quede espacio en el PV original, podemos usar espacio de cualquier PV que pertenezca al VG. Para el sistema de ficheros será transparente.
  • Podemos cambiar el espacio asignado  de un PV a un LV a otro PV (que tenga espacio suficiente libre). Me explico, yo puedo crear un LV de 10G en un PV que sea un disco. Si posteriormente meto en el VG un PV que sea un RAID, podría mover los 10G que estaba usando del disco al RAID, en caliente y de forma transparente al sistema de ficheros y las aplicaciones que lo usan. De forma que si con el tiempo puedo mejorar el hardware de la máquina, no tengo porque volver a crear un sistema de ficheros, copiar los datos y cambiar el montaje. Con LVM simplemente digo: los 10G del LV que están en un PV los quiero mover a un PV diferente. Y el hará la mudanza sin interrumpir el funcionamiento del sistema.
  • Para poder disfrutar al máximo de la flexibilidad del LVM es importante tener la mayor cantidad de espacio libre en el VG (volveré a este tema más tarde), pero tarde o temprano nos quedaremos sin espacio en un VG (porque usemos todo el espacio de sus PVs). Bien, esto, que tradicionalmente es bastante complicado de gestionar, con LVM es tan sencillo como darle otro PV al VG. Añadimos un disco (PV) a la máquina y lo asignamos al VG, que pasa a tener todo ese espacio nuevo disponible para cualquiera de los LVs que contenga. O para crear LVs nuevos.

La idea, al menos de esta primera ventaja que nos presta el LVM, es que el almacenamiento no nos imponga límites “artificiales”. Nada de particiones que no pueden crecer porque les sigue otra en el disco. O discos que una vez llenos no podemos seguir usando sin hacer malabares. El espacio de mis dispositivos está ahí a mi disposición, para que lo use como me convenga. Para crecer mientras haya espacio libre, para mover los datos entre dispositivos sin que tenga paradas en el servicio. En resumen, los megas son mios y los uso como quiero.

En la próxima entrada empezaré a hablar de los comandos para la gestión del LVM y estarán mucho más claros todos esto ejemplos y funcionalidades. ¿Preguntas? Pon un comentario e intentaré resolverlas.

$ exit

31 pensamientos en “LVM para torpes (I)

  1. Sergio

    Me gustaron los dibujos, un +1 por haberlos hecho vos mismo….

    Para armar una guia, tuve fiaca y baje varios diagramas de google

    Para hacerlo mas simple podes hacer tipo un arbol de dependencias por decirlo de algun modo que sea

    PV->VG->LV

    Saludos

    Responder
  2. Pingback: LVM para torpes (tomado de inittab.org) | Blog de un informatico

  3. Richard

    hola tengo una pregunta como gestiono mi memoria swap si tengo 128 de ram, hago el doble o solo lo dejo por defauld quiero correr el oracle linux 6.5 y hay el weblogic, espero su ayuda

    Responder
    1. Alberto Gonzalez Iniesta Autor

      Hola, no dejas claro si son 128Gigas o 128Megas. En el primer caso, yo no me preocuparía mucho del SWAP (no pondría, o pondía menos de un 10% de RAM). En el segundo caso…. mucho me temo que no tienes ni para empezar a instalar weblogic (o cualquier cosa que lleve java). Saludos.

      Responder
  4. Rabba

    Hola, increible explicación, finalmente entendi de que va LVM y ahora me interesa mucho mas, de nuevo gracias por el tiempo para crear esta explicación.

    Responder
  5. Fausto Disla

    Hola,

    Muy buena la explicacion, tengo unas preguntas. Si tengo un VG con 3 discos de 100gb, tengo 300gb, la pregunta es como se divide o almacena la data en esos discos? puedo retirar un disco de esos y ver su contenido sin problema?

    Me interesa saber esas inquietudes.
    Gracias buen post.

    Responder
    1. Alberto Gonzalez Iniesta Autor

      Hola Fausto, todo depende de como crees los LVS. Pero en principio no será fácil ver la información en un disco que perteneciera a un VG si lo sacas de él. Primero porque no tiene una tabla de particiones que indique donde empiezan y terminan los sistemas de ficheros que contiene. Y segundo porque podría no contener sistemas de ficheros completos, ya que en función de como se crearan los LVs su información podría estar en más de un disco. No es buena idea 🙂

      Responder
      1. Alberto

        Ciertas cosas, muchas en informática, no son fáciles de explicar pero tu magistral exposición ha hecho que lo entienda sin problemas. La pregunta de Fausto y tu respuesta me llevan a una nueva cuestión en el campo de la seguridad. Si tenemos un portátil en el que el LVM gestiona todo el disco y “alguien no autorizado” no pudiendo acceder al sistema operativo intentara ver el contenido del disco montándolo en otra máquina, según lo que has explicado, no conseguiría ver nada ¿Es así? Si es correcto sería otro punto más, y de peso, a favor de este sistema gestión de discos.
        Un saludo.

        Responder
        1. Alberto Gonzalez Iniesta Autor

          Hola, gracias por tu comentario. El LVM sólo flexibiliza la gestión del almacenamiento, pero no incluye nada de cifrado. Es decir, no protege el acceso a tus datos.

          En el caso de la pregunta de Fausto, el plantea acceder a la información *en un disco* que pertenece a un VG *con varios* discos. Lo que sucede en este caso es que tienes *sólo* una parte de la información. Algo se podría sacar (con mucho esfuerzo posiblemente) porque no está cifrado. Pero es como tener un puñado de páginas de un libro.

          Responder
  6. Emil

    Hola,
    Gracias por su lecion esta bien, me interesa saber una cosa, como puedo ver o encontrar el /dev/sdb que discos physicos ocupa, por ejemplo en Raid10 o que sea? ¿Existe alguna comando para comprobar esto o procedimiento?

    Gracias por adelantado

    Responder
    1. Alberto Gonzalez Iniesta Autor

      Hola, entiendo que no estás usando RAID por software y que la controladora te presenta un dispositivo lógico (un RAID por hardware) como si fuera un disco (sdb). En ese caso necesitas una herramienta propia de la controladora. Por ejemplo, para las controladoras HP hay un comando “hpacucli” que te permite trabajar con ellas. Una vez ejecutado hpacucli, en él puedes ejecutar “controller all show config” para ver que RAIDs tienes creados y que discos físicos está usando cada uno. Saludos.

      Responder
  7. Emil

    Hola Alberto,
    Gracias por su respuesta, es cierto que la controladora presentada es de nivel Hardware, mi pregunta y la idea era, como podemos predeterminar LVM donde se ubica en disco físico.
    ¿ Hay alguna forma comando o procedimiento para verlo?

    Gracias por adelantado,
    Saludos

    Responder
    1. Alberto Gonzalez Iniesta Autor

      Hola Emil, no estoy seguro de a que te refieres. En la creación de los LVs puedes elegir en que PVs (discos) quieres que se ubique el LV que estás creado. Le puedes pasar una lista como argumento del comando “lvcreate”. Si tienes tres discos (PVs) en el VG, y quieres crear un LV que sólo use dos en concreto, le especificas esos discos en el comando de creación del LV.

      Responder
  8. Rafa

    Hola Alberto,
    Tengo un disco para backup montado como volumen lógico (es un volumen físico, que compone un grupo de volúmenes formado por él solo y a su vez tiene un único volumen lógico). ¿Hay inconveniente en desmontar este volumen lógico y montarlo en otra máquina?
    Supongo que habría que crear toda la estructura en la nueva máquina, volúmenes físicos, grupos de volúmenes y volúmenes lógicos.
    ¿Es posible esto? Muchas gracias de antemano.

    Responder
    1. Alberto Gonzalez Iniesta Autor

      Hola Rafa,
      Si todo (PV, VG y LV) está en un disco, no hay ningún problema en usarlo en otra máquina. Desmonta el sistema de ficheros, desactiva el VG [1] y cuando lo pinches en la máquina nueva, activa el VG [2] (si no lo hace el sistema por ti).

      [1] vgchange NOMBRE_VG -an
      [2] vgchange NOMBRE_VG -ay

      Responder
  9. Luis Miguel

    Jajajja Joder esto si que es mágia negra, brujeria y santeria cubana!! Me he partido el culo con las frases espontaneas de humor jajaj. Lo del floppy disc ¡OMG!.
    Muy buena explicación, eres un crack!

    Responder
  10. John

    Que buena explicacion, muchas gracias por compartir tu conocimiento. Ylo de las frases esta excelente haces que la gente siga interesada en la lectura, que no sea un texto simple como la mayoria, Gracias de nuevo.

    Responder
  11. panclasta

    muy bien explicado!
    aun así queria preguntarte una duda…
    Tengo un portatil al que le quité la bandeja de dvd para añadir otro disco duro. Por tanto ahora tengo un ssd de 120 GB para el sistema y otro de 1 TB para particion /home. El problema viene que una vez hecho el particionado, el disco de 1 TB es inexistente (parece que la particion /home quedó en el disco principal), lo veo en gparted, pero no me ha aumentado el espacio de /home.
    Cual es la mejor manera de cifrar por completo ambos discos al inicio quedando el de 1TB unicamente para /home? (no se si me explico muy bien)
    Gracias de antemano

    Responder
    1. Alberto Gonzalez Iniesta Autor

      Buenas, muy claro tampoco creas que me queda. Entiendo que quieres cifrar ambos discos y usar el de 1TB exclusivamente para /home. En primer lugar, si quieres cifrarlos por completo lo más sencillo es que lo hagas en la instalación, a posteriori es muy complicado o casi imposible según el caso. Así que en la instalación tendrías que: 1) crear una partición de unos 200MB para /boot (en el SSD). 2) El resto del SSD lo usas en otra partición, que designas para cifrado y el dispositivo resultante sería el PV para el VG donde iría el raíz y el swap. 3) Con el disco de 1T creas otro dispositivo cifrado y con éste el PV para el VG donde irá el /home. No uses todo el TB para el LV home de inicio, que lo mismo te viene bien tener espacio libre en el VG para hacer alguna cosa. Ve creciendo el LV home según lo necesites.
      Saludos.

      Responder
  12. Juan Carlos

    Hola. Te felicito por dar una explicación tan sencilla pero completa para comprender para que sirve y como funciona el LVM. En vista que nos proporcionaste una genial teoría hace falta que nos proporciones la practica.

    Responder
  13. Pingback: Virtualización: LVM. – Bitacora Byte

  14. Flavio

    Hola, me dejaron un server con 50 particiones (100GB cada una) dentro de un LVM ejemplo U003, esas 50 particiones estan distribuidas en 50 discos fisicos, existe la manera de mover todas esas particiones a la menor cantidad de discos posibles? mi logica es agrega la misma cantidad de tamaño que se usara a dicho LVM (U003) y retirar las particiones de 100GB, afectara en algo?

    Responder
  15. Pingback: LINUX – Software Free Box

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *