LVM en GNU/Linux. Parte I: ¿Qué es y a quién le sirve?

Inicialmente este artículo lo iba a escribir con el fin de hacer un tutorial sobre como instalar Ubuntu en un sistema utilizando LVM, pero en la medida que fui redactando el artículo me di cuenta que además de quedarme muy largo, el tema es lo suficientemente interesante como para utilizar más de un artículo. Así que no desesperen, que el tutorial ya vendrá.

Luego de la pequeña introducción, vamos a ir directo al grano:

¿Qué es LVM?

LVM es el acrónimo de Logical volume managent, que en computación hace referencia a una forma de asignar espacio de forma más flexible que las formas tradicionales como el particionado. En particular un volume manager puede concatenar, dividir o combinar particiones (¡incluso de discos distintos!) en otras virtuales más grandes que los administradores pueden redimensionar o mover, potencialmente sin ni siquiera interrumpir su uso. También permite la administración de volúmenes definidos por grupos de usuarios, otorgándole al administrador del sistema lidiar con grupos de volúmenes con nombres más sensibles como “desarrollo” o “sistema” en vez de nombres de discos físicos que poco nos dicen como “sda” y “sdb”.

Disco Duro
stock.xchng | weloo

¿Por qué utilizar LVM?

En general, el LVM se asocia si tienes un disco grande o para administrar muchos discos, es notablemente más cómodo, pero en la práctica tiene beneficios para discos pequeños (que veremos en la siguiente sección) o grandes. En mi caso, lo hago porque me gusta probar nuevas distribuciones, de esta forma, puedo maximizar mi partición /home y luego en la medida que las nuevas distribuciones sean más útiles les voy dando más espacio (o menos si es que no me agradan) y no tengo que reformatear o mover particiones cada vez.

Beneficios en un sistema pequeño

Uno de los grandes problemas que tiene que enfrentarse un usuario nuevo en GNU/Linux es como particionar el disco. La necesidad de estimar cuánto espacio se necesitará para los archivos de sistema y los de usuario hacen la instalación más complejo de lo que debiera (de todas formas, con los nuevos asistentes, esta tarea para muchos pasa desapercibida) y finalmente muchos usuarios optan simplemente por poner todos sus datos en una gran partición para evitarse problemas. Esto es un poco riesgoso (y poco cómodo si pensamos luego simplemente reinstalar la distro).

Una vez que uno ha supuesto cuánto espacio necesita /,/home, /opt (o el asistente de instalación lo realizó automáticamente) o cualquier otra es muy común encontrarse que una de esas se llene incluso si hay suficiente espacio en el disco en otras particiones.

Con el LVM, todo el disco puede ser asignado a un volumen de grupo (volume group y de ahora en adelante VG) y los volúmenes lógicos (logical volume; LV) creados para almacenar /,/home y /opt. Por ejemplo, el LV donde está /home se llena, pero aún queda espacio en/opt es posible achicarla para darle más espacio a la primera.

Otra alternativa podría ser asignar sólo una cantidad mínima de espacio para cada LV y dejar el resto del disco sin asignar y luego apenas se comiencen a llenar se expanden como sea necesario.

stock.xchng | GilOraggio

Ahora viendo un ejemplo más práctico: Pepito intenta revivir un viejo disco duro de 8.4 GiB para instalar GNU/Linux utilizando el siguiente sistema de particionado:

/boot    /dev/hda1     10 Megabytes
/swap    /dev/hda2    256 Megabytes
/        /dev/hda3      2 Gigabytes
/home    /dev/hda4      6 Gigabytes

Esto, supone, maximizará la cantidad de espacio para guardar su música.

Un tiempo después, se le ocurre instalar OpenOffice.org y el último entorno de escritorio, pero se da cuenta que la partición raíz (/) no es lo suficientemente grande. Esto lo lleva a guardar todos sus OGGs en un DVD dejando más espacio libre en /home.

Sus opciones no son muy cómodas (ni buenas):

  1. Reformatear el disco, cambiar el esquema de particionado y reinstalar.
  2. Comprar un nuevo disco, ingeniarse y pensar un nuevo esquema que le requerirá sólo el mínimo de movimiento.
  3. Configurar un enlace simbólico en / apuntando a /home e instalar todo el nuevo software ahí.

Con LVM la tarea se simplifica.

Juanita revive un equipo similar, pero ella utiliza LVM para dividir el disco de forma similar:

/boot     /dev/hda1        10 Megabytes
swap      /dev/vg00/swap   256 Megabytes
/         /dev/vg00/root     2 Gigabytes
/home     /dev/vg00/home     6 Gigabytes

Utilizar /root en LV requiere una imagen initrd capaz de arrancarlo, en algunos casos podría ser arriesgado porque si se actualiza el kernel y no initrd podría ser imposible bootearlo. Eso sí, en general, las nuevas distribuciones soportan lvm en sus mkinitrd por lo que este “inconveniente” (si es que alguna fue tal) debería desaparecer.

La partición /boot no debiera incluirse en el LV porque no todos los bootloaders saben utilizarlas, de forma que podríamos quedar con un sistema que no sea arrancable.

Cuando ella se encuentra frente al mismo problema que Pepito, puede reducir el tamaño de /home en un (1) GiB y agregar ese espacio a la partición /.

flickr | saberhagen (cc - by-nc-sa)

Ahora supongamos que los dos se las arreglan para llenar el disco, así que deciden agregar un nuevo disco de 20 GiB a sus sistemas.

Pepito formatea todo el disco como una partición (/dev/hdb1) y moviliza su /home existente a él y utiliza todo el disco como /home. Pero tiene 6 GiB sin utilizar o tiene que utilizar enlaces simbólicos para que ese disco parezca una extensión de /home, algo así como /home/pepito/viejos-oggs.

Por otra parte, Juanita sencillamente agrega el nuevo disco al VG expande el VL de /home para incluir el nuevo disco. O, de hecho, podría mover los datos desde el viejo /home al nuevo disco y luego hacer que todo la raíz (/; root) cubra el viejo disco.

Beneficios en un sistema grande

Granja de discos duros
stock.xchng | goody2230

Los beneficios del LVM son bastante más obvios en los sistemas grandes con muchos discos. Manejar una granja de discos (disk farm) es un trabajo que consume mucho tiempo, y se hace particularmente más complejo si el sistema contiene varios de distinto tamaño. Equilibrar (y en muchos casos generando conflictos) los requerimientos de espacio entre varios usuarios puede ser una pesadilla.

Los grupos de usuarios pueden asignarse a VG y LV y pueden crecer en la medida que sea necesario. Es posible para el administrador del sistema “retener” espacio hasta que se requiera. Luego puede ser agregado al VG (usuario) que más lo requiera.

Cuando se añaden nuevos discos al sistema, no es necesario mover los archivos de los usuarios por todas partes para darle mejor uso al espacio; simplemente se añade el disco a un (o más) VG y luego se extienden los LV de la forma que sea necesite.

También es fácil dar de baja discos moviendo los datos a los discos más nuevos – todo esto en línea, sin interrumpir el trabajo de los usuarios (cosa imposible de realizar en el esquema clásico).

Bueno, esa sería esta primera parte, más informativa que nada, ¡espero que les sea útil!. Como siempre, dudas, reclamos y amenazas en los comentarios.

22 thoughts on “LVM en GNU/Linux. Parte I: ¿Qué es y a quién le sirve?

  1. porque no es conveniente utilizar una sola particion con aiguna distribucion?? por q habara problemas si necesito re-instalarla?? me pregunto esto, pues, yo tenia como todo nuevo usuario de linux, una particion( pequeña eso ) para windows y la otra para ubuntu 9.0.4. Igual me convenia tener window, pues, algunas cosas como la del router trair un disco de instalacion solo para windows. Bueno todo bien y luego actualce al ubuntu 9.10 desde ubuntu 9.04 pero ahi perdi la entrada a windows con el famoso Grub, q en realidad lo q me dijeron por varios lados no me funciono. Asi q ahora pensaba tener una sola particion con ubunntu, pero arriba dice q es riegoso, y es eso q me gustaria me aclararan

    od-, muy buenos articulos

    Me gusta

  2. Si entendi bien y siguiendo el ejemplo de la Sra. Juanita me parece que hay algo mal escrito.
    Donde dice La partición /boot debiera incluirse en el LV porque no todos los bootloaders saben utilizarlas, ¿deberia decir La partición /boot no debiera incluirse en el LV… ?

    Me gusta

    • Chupy35, en que te basas para decir semejante tonteria? ¿Acaso tienes algun link a algun testeo hecho por alguna pagina de calidad sobre ese tema? Aparte de que el LVM tiene prestaciones par afuncionar incluso mas rapido, journaling, optimizacion de accesos… en fin.

      En serio, ese tipo de post solo hacen que confundir y engañar (ya que no aportas pruebas) al perosnal.

      Me gusta

  3. Felipe Lucero: Ja! Póngale del “güeno” no más!

    Piponazo: Qué bueno que haya sido útil, atento que viene una o dos entregas más ;).

    Sergio Peralta: Te lo explicaré con una analogía, imagina que instalas todo en la misma partición, eso sería equivalente a instalar windows en una partición (práctica muy común). Lo que pasa es que si falla windows, tienes que formatear todo incluidos tus archivos personales que nada tienen que ver con el funcionamiento de windows. Es la misma idea, si por alguna razón quieres reinstalar Ubuntu (por ejemplo) y está todo en la misma partición, tendrás que borrar tus datos personales (almacenados en la carpeta /home/usuario). Por eso es mejor tenerlos en particiones distintas, ¿me explico?

    Loloto: Gracias, ya hice la corrección; mira de nuevo ;).

    Me gusta

  4. Encuentro muy bien explicado el caso, pero como todo principiante en linux, tengo mis en dudas , en cuanto espacio se necesita por partición.-

    Estuve leyendo y encontré que a la swap /Memoria de intercambio, se le asigna el doble de la memoria ram. , osea si tengo 512 mb de ram u 1 gb de ram, lo optimo sería asignarle 1 gb o 2 gb a la swap según corresponda.

    Aunque ese caso, se da mas para los pc antiguos , actualmente poseo discos grandes, y procesadores potentes, y bastante memoria ram, así que la teoría quedara obsoleta al ocupar 4 gb u 8 gb de ram, ya que no me cabe en cabeza y encuentro una perdida de disco al asignar 8 u 16 gb de memoria swap, Así que actualmente no ocupo mas de 2 gb de swap .

    Pero mi pregunta va a lo siguiente, a /opt u /usr u /var, cuanto espacio debiese asignarle? como realizo ese calculo?… dejo pasada mi duda y me encantaria fuese respondida.

    Por otro lado debo seguir instruyendome para ver que tipo de archivos van en cada carpeta.

    Me gusta

    • Hola! Bueno, efectivamente este es un artículo bastante antiguo. En lo personal, ya no uso LVM, sino que utilizo zfs y ahí tengo varias “pools”, dónde distribuyo el espacio. Sobre lo de la memoria swap que dices es muy cierto, pero con una **gran** observación. Si utilizas un laptop y pretendes hibernar el computador, en la mayor parte de los casos se hace a la swap (también se puede a un archivo [swapfile], pero en lo personal nunca lo he hecho). Así que en mi caso por lo menos, aplico tanto swap como memoria ram… ya que eso es finalmente lo que se almacena en el disco duro y se guarda, para que esté disponible cuando puedas encenderlo. Ahora, en realidad esa información se comprime… así que también podría ser menos, pero la verdad es que prefiero irme a la segura :)

      Sobre tu segunda pregunta, en realidad no hay una respuesta mágica por desgracia :(, ya que depende de tu uso, y en particular, como tu distro de linux utiliza esos espacios. En mi caso que uso arch linux, sólo un par de cosas se instalan en `/opt`, por lo que no considero muy necesario dejarle un espacio “aparte”. En este minuto por ejemplo, sólo tengo unas 4 aplicaciones ahí, dropbox, mendeley, prey y el addon-sdk de firefox.

      En el caso de `/var` es muchísimo más “var”iable (jajajaja… qué fome xD), pero ahí si que resulta al menos en mi caso justificable, por unas 3 cosas: 1) la cache de los paquetes de pacman se descargan ahí, por lo que me asegura que si algo se “llena”, no sea mi directorio raíz principal (que lleva a errores súper extraños), 2) en mi laptop y computador de escritorio, tengo un ssd y un disco duro, en general como en el directorio `/var` se tiende a escribir mucho, podría hacer trabajar más al ssd y por tanto acortar su vida útil (aunque por otra parte podría ser más “rápido”), por ello con zfs lo que hago es tener algunas partes de `/var` en un disco duro clásico, y otras en ssd, y 3) la idea última de dejar tan “disgregado” el sistema, es que también puedes utilizar sistemas de archivos distintos para tus necesidades. Por ejemplo, los sistemas de archivos más modernos (zfs, btrfs), utilizan una estrategia llamado copy-on-write (COW), que resulta no ser muy buena idea en archivos utilizados por bases de datos y como utilizo postgresql y mysql, prefiero dejar puntos de montaje especiales para ambos, el primero (al menos en arch linux) en `/var/lib/postgres`.

      Por último, recuerda dos cosas: a) el dividir y reparticionar tan detalladamente el disco tiene que tener un fin, no hacerlo sólo por el hecho de que puedas hacerlo, y b) no es tan difícil ir “haciendo” tu sistema en la medida que vas entendiendo que es mejor para cada cosa, basta con hacer “bind mounts”, copiar las cosas, y luego remontar. Esto último es especialmente sencillo si utilizas herramientas como zfs o btrfs. Así que si te gusta LVM, quizá podrías considerarlos ;)

      Espero haberte ayudado algo y perdón por la demora!

      Me gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s