De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

En Linux , Logical Volume Manager ( LVM ) es un marco de asignación de dispositivos que proporciona administración de volumen lógico para el kernel de Linux . La mayoría de las distribuciones de Linux modernas son compatibles con LVM hasta el punto de poder tener sus sistemas de archivos raíz en un volumen lógico . [3] [4] [5]

Heinz Mauelshagen escribió el código LVM original en 1998, cuando trabajaba en Sistina Software , tomando sus pautas de diseño principales del administrador de volumen de HP-UX . [1]

Usos [ editar ]

LVM se utiliza para los siguientes propósitos:

  • Creación de volúmenes lógicos únicos de varios volúmenes físicos o discos duros completos (algo similar a RAID 0 , pero más similar a JBOD ), lo que permite el cambio de tamaño dinámico del volumen.
  • Administrar grandes granjas de discos duros al permitir que los discos se agreguen y reemplacen sin tiempo de inactividad o interrupción del servicio, en combinación con el intercambio en caliente .
  • En sistemas pequeños (como un escritorio), en lugar de tener que estimar en el momento de la instalación el tamaño que podría necesitar una partición, LVM permite cambiar el tamaño de los sistemas de archivos fácilmente según sea necesario.
  • Realización de copias de seguridad consistentes tomando instantáneas de los volúmenes lógicos.
  • Cifrar múltiples particiones físicas con una contraseña.

LVM se puede considerar como una fina capa de software sobre los discos duros y las particiones, lo que crea una abstracción de continuidad y facilidad de uso para administrar el reemplazo del disco duro, el reparticionamiento y la copia de seguridad.

Funciones [ editar ]

Varios elementos del LVM

Funcionalidad básica [ editar ]

  • Los grupos de volumen (VG) se pueden cambiar de tamaño en línea absorbiendo nuevos volúmenes físicos (PV) o expulsando los existentes.
  • Los volúmenes lógicos (LV) se pueden cambiar de tamaño en línea concatenando extensiones en ellos o truncando extensiones a partir de ellos.
  • Los LV se pueden mover entre PV.
  • Creación de instantáneas de solo lectura de volúmenes lógicos (LVM1), aprovechando una función de copia en escritura (CoW), [6] o instantáneas de lectura / escritura (LVM2)
  • Los VG se pueden dividir o fusionar in situ siempre que ningún LV abarque la división. Esto puede ser útil al migrar LV completos hacia o desde el almacenamiento fuera de línea.
  • Los objetos LVM se pueden etiquetar por conveniencia administrativa. [7]
  • Los VG y LV pueden activarse a medida que los dispositivos subyacentes estén disponibles mediante el uso del lvmetaddemonio. [8]

Funcionalidad avanzada [ editar ]

  • Se pueden crear volúmenes híbridos utilizando el destino dm-cache , que permite que uno o más dispositivos de almacenamiento rápido, como SSD basados ​​en flash , actúen como caché para una o más unidades de disco duro más lentas . [9]
  • Los LV con aprovisionamiento fino se pueden asignar desde un grupo. [10]
  • En las versiones más recientes del mapeador de dispositivos , LVM está integrado con el resto del mapeador de dispositivos lo suficiente como para ignorar las rutas individuales que respaldan un dispositivo dm-multipath si devices/multipath_component_detection=1está configurado lvm.conf. Esto evita que LVM active volúmenes en una ruta individual en lugar de en el dispositivo de múltiples rutas. [11]

RAID [ editar ]

  • Se pueden crear LV para incluir la funcionalidad RAID , incluidos RAID 1 , 5 y 6 . [12]
  • LV completos o sus partes se pueden dividir en múltiples PV, de manera similar a RAID 0 .
  • Un dispositivo de back-end RAID 1 (un PV) se puede configurar como "escritura mayoritariamente", lo que evita las lecturas en dichos dispositivos a menos que sea necesario. [13]
  • La tasa de recuperación se puede limitar usando lvchange --raidmaxrecoveryratey lvchange --raidminrecoveryratepara mantener un rendimiento de E / S aceptable mientras se reconstruye un LV que incluye la funcionalidad RAID.

Alta disponibilidad [ editar ]

El LVM también funciona en un clúster de almacenamiento compartido en el que los discos que contienen los PV se comparten entre varias computadoras host, pero pueden requerir un demonio adicional para mediar el acceso a los metadatos a través de una forma de bloqueo.

CLVM
Se utiliza un administrador de bloqueo distribuido para gestionar accesos de metadatos LVM simultáneos. Siempre que un nodo del clúster necesite modificar los metadatos LVM, debe obtener el permiso de su local clvmd, que está en contacto constante con otros clvmddemonios en el clúster y puede comunicar el deseo de obtener un bloqueo en un conjunto particular de objetos.
HA-LVM
El conocimiento del clúster se deja en manos de la aplicación que proporciona la función de alta disponibilidad. Por parte de LVM, HA-LVM puede usar CLVM como mecanismo de bloqueo, o puede continuar usando el bloqueo de archivos predeterminado y reducir las "colisiones" restringiendo el acceso solo a aquellos objetos LVM que tienen las etiquetas apropiadas. Dado que esta solución más simple evita la contención en lugar de mitigarla, no se permiten accesos concurrentes, por lo que HA-LVM se considera útil solo en configuraciones activo-pasivo.
lvmlockd
A partir de 2017 , un componente LVM estable que está diseñado para reemplazar clvmdal hacer que el bloqueo de objetos LVM sea transparente para el resto de LVM, sin depender de un administrador de bloqueo distribuido. [14] Tuvo un desarrollo masivo durante 2016. [15]

Los mecanismos descritos anteriormente solo resuelven los problemas con el acceso de LVM al almacenamiento. El sistema de archivos seleccionado para estar en la parte superior de dichos LV debe admitir la agrupación en clústeres por sí mismo (como GFS2 o VxFS ) o solo debe ser montado por un solo nodo de clúster en cualquier momento (como en una configuración activa-pasiva).

Política de asignación de grupos de volumen [ editar ]

Los LVM VG deben contener una política de asignación predeterminada para los nuevos volúmenes creados a partir de ellos. Esto se puede cambiar más tarde para cada LV usando el lvconvert -Acomando, o en el propio VG a través de vgchange --alloc. Para minimizar la fragmentación, LVM intentará la política más estricta (contigua) primero y luego avanzará hacia la política más liberal definida para el objeto LVM hasta que la asignación finalmente tenga éxito.

En las configuraciones RAID, casi todas las políticas se aplican a cada tramo de forma aislada. Por ejemplo, incluso si un LV tiene una política de adherencia , expandir el sistema de archivos no dará como resultado que LVM use un PV si ya lo usa una de las otras ramas en la configuración de RAID. Los LV con funcionalidad RAID colocarán cada tramo en diferentes PV, lo que hará que los otros PV no estén disponibles para ningún otro tramo determinado. Si esta fuera la única opción disponible, la expansión del LV fallaría. En este sentido, la lógica detrás de la adherencia solo se aplicará a la expansión de cada una de las ramas individuales de la matriz.

Las políticas de asignación disponibles son:

  • Contiguo : obliga a todos los LE en un LV dado a ser adyacentes y ordenados. Esto elimina la fragmentación pero reduce severamente la capacidad de expansión del VI.
  • Cling : obliga a que los nuevos LE se asignen solo a los PV ya utilizados por un LV. Esto puede ayudar a mitigar la fragmentación, así como a reducir la vulnerabilidad de LV particulares en caso de que un dispositivo falle, al reducir la probabilidad de que otros LV también tengan extensiones en ese PV.
  • Normal : implica una selección casi indiscriminada de PE, pero intentará evitar que los tramos paralelos (como los de una configuración RAID) compartan un dispositivo físico.
  • En cualquier lugar : no impone restricciones de ningún tipo. Es muy arriesgado en una configuración RAID, ya que ignora los requisitos de aislamiento, lo que socava la mayoría de los beneficios de RAID. Para volúmenes lineales, puede resultar en una mayor fragmentación.

Implementación [ editar ]

Ejemplo básico de un cabezal LVM
Funcionamiento interno de la versión 1 de LVM. En este diagrama, PE significa Extensión física.

Normalmente, el primer megabyte de cada volumen físico contiene una estructura codificada principalmente en ASCII denominada "encabezado LVM" o "encabezado LVM". Originalmente, el cabezal LVM solía estar escrito en el primer y último megabyte de cada PV para redundancia (en caso de una falla parcial del hardware); sin embargo, esto se cambió más tarde a solo el primer megabyte. El encabezado de cada PV es una copia completa del diseño del grupo de volumen completo, incluidos los UUID de todos los demás PV y LV, y el mapa de asignación de PE a LE . Esto simplifica la recuperación de datos si se pierde un PV.

En la serie 2.6 del kernel de Linux, el LVM se implementa en términos del mapeador de dispositivos , un esquema simple a nivel de bloque para crear dispositivos de bloques virtuales y mapear su contenido en otros dispositivos de bloque. Esto minimiza la cantidad de código del kernel relativamente difícil de depurar que se necesita para implementar LVM. También permite que sus servicios de redirección de E / S se compartan con otros administradores de volumen (como EVMS ). Cualquier código específico de LVM se envía a sus herramientas de espacio de usuario, que simplemente manipulan estas asignaciones y reconstruyen su estado a partir de los metadatos del disco en cada invocación.

Para poner un grupo de volumen en línea, la herramienta "vgchange":

  1. Busca PV en todos los dispositivos de bloque disponibles.
  2. Analiza el encabezado de metadatos en cada PV encontrado.
  3. Calcula los diseños de todos los grupos de volúmenes visibles.
  4. Recorre cada volumen lógico en el grupo de volumen para ponerlo en línea y:
    1. Comprueba si el volumen lógico que se pondrá en línea tiene todos sus PV visibles.
    2. Crea una nueva asignación de dispositivo vacía.
    3. Lo asigna (con el objetivo "lineal") a las áreas de datos de los PV a los que pertenece el volumen lógico.

Para mover un volumen lógico en línea entre PV en el mismo grupo de volúmenes, use la herramienta "pvmove":

  1. Crea una nueva asignación de dispositivo vacía para el destino.
  2. Aplica el objetivo "espejo" a los mapas original y de destino. El kernel iniciará el espejo en modo "degradado" y comenzará a copiar datos del original al destino para sincronizarlo.
  3. Reemplaza la asignación original con el destino cuando el espejo se sincroniza y luego destruye el original.

Estas operaciones del mapeador de dispositivos se llevan a cabo de forma transparente, sin que las aplicaciones o los sistemas de archivos se den cuenta de que su almacenamiento subyacente se está moviendo.

Advertencias [ editar ]

  • Hasta el kernel de Linux 2.6.31, [16] las barreras de escritura no eran compatibles (totalmente compatible en 2.6.33). Esto significa que la garantía contra la corrupción del sistema de archivos que ofrecen los sistemas de archivos registrados como ext3 y XFS fue negada en algunas circunstancias. [17]
  • A partir de 2015 , no existe ningún programa de desfragmentación en línea o fuera de línea para LVM. Esto se ve mitigado de alguna manera por la fragmentación que solo ocurre si se expande un volumen y aplicando las políticas de asignación mencionadas anteriormente. Sin embargo, todavía se produce fragmentación y, si se va a reducir, las extensiones no contiguas deben identificarse y reorganizarse manualmente mediante el pvmovecomando. [18]
  • En la mayoría de las configuraciones de LVM, solo se guarda una copia del cabezal LVM en cada PV, lo que puede hacer que los volúmenes sean más susceptibles a sectores de disco fallidos. Este comportamiento se puede anular mediante vgconvert --pvmetadatacopies. Si el LVM no puede leer un encabezado adecuado usando la primera copia, verificará el final del volumen en busca de un encabezado de respaldo. La mayoría de las distribuciones de Linux mantienen una copia de seguridad en ejecución /etc/lvm/backup, lo que permite la reescritura manual de un cabezal LVM dañado mediante el vgcfgrestorecomando.

Ver también [ editar ]

  • Btrfs (tiene sus propias "instantáneas" que son diferentes, pero el uso de instantáneas LVM de btrfs conduce a la pérdida de ambas copias) [19]
  • Mapeador de dispositivos
  • Administrador de discos lógicos (LDM)
  • Gestión de volumen lógico
  • Instantánea (almacenamiento de computadora)
  • Virtualización de almacenamiento
  • ZFS

Referencias [ editar ]

  1. ^ a b "LÉAME DE LVM" . 2003-11-17 . Consultado el 25 de junio de 2014 .
  2. Kergon, Alasdair (3 de noviembre de 2017). "Se ha creado la etiqueta anotada [lvm-devel] v2_02_176" . lvm-devel . Red Hat . Consultado el 3 de noviembre de 2017 .
  3. ^ "7.1.2 Configuración de LVM con YaST" . SUSE. 12 de julio de 2011. Archivado desde el original el 25 de julio de 2015 . Consultado el 22 de mayo de 2015 .
  4. ^ "Cómo: configurar el escritorio de Ubuntu con particiones LVM" . Ubuntu. 1 de junio de 2014. Archivado desde el original el 4 de marzo de 2016 . Consultado el 22 de mayo de 2015 .
  5. ^ "9.15.4 Crear volumen lógico LVM" . Sombrero rojo. 8 de octubre de 2014 . Consultado el 22 de mayo de 2015 .
  6. ^ https://blog.pythian.com/btrfs-performance-compared-lvmext4-regards-database-workloads/
  7. ^ "Etiquetado de objetos de almacenamiento LVM2" . Micro Focus International . Consultado el 21 de mayo de 2015 .
  8. ^ "El demonio de metadatos" . Red Hat Inc . Consultado el 22 de mayo de 2015 .
  9. ^ "Usando la nueva función de caché de LVM" . Consultado el 11 de julio de 2014 .
  10. ^ "2.3.5. Volúmenes lógicos con aprovisionamiento fino (volúmenes delgados)" . Access.redhat.com . Consultado el 20 de junio de 2014 .
  11. ^ "4.101.3. RHBA-2012: 0161 - actualización de mejora y corrección de errores de lvm2" . Consultado el 8 de junio de 2014 .
  12. ^ "5.4.16. Volúmenes lógicos RAID" . Access.redhat.com . Consultado el 7 de febrero de 2017 .
  13. ^ "Control de operaciones de E / S en un volumen lógico RAID1" . redhat.com . Consultado el 16 de junio de 2014 .
  14. ^ "Re: instantánea de LVM con Clustered VG [SOLUCIONADO]" . 15 de marzo de 2013 . Consultado el 8 de junio de 2015 .
  15. ^ https://sourceware.org/git/?p=lvm2.git;a=history;f=lib/locking/lvmlockd.c;h=master;hb=HEAD
  16. ^ "Error 9554: las barreras de escritura sobre el mapeador de dispositivos no son compatibles" . 2009-07-01 . Consultado el 24 de enero de 2010 .
  17. ^ "Barreras y sistemas de archivos de diario" . LWN . 2008-05-22 . Consultado el 28 de mayo de 2008 .
  18. ^ "¿pvmove'ing (un LV a la vez) desfragmentará?" . 2010-04-29 . Consultado el 22 de mayo de 2015 .
  19. ^ Gotchas , btrfs Wiki , obtenidos 04/24/2017

Lectura adicional [ editar ]

  • Lewis, AJ (27 de noviembre de 2006). "LVM HOWTO" . Proyecto de documentación de Linux . Consultado el 4 de marzo de 2008 ..
  • Patente de EE.UU. 5129088 , Auslander, et al., "Método de procesamiento de datos para crear discos virtuales a partir de grupos no contiguos de bloques direccionables lógicamente contiguos de dispositivo de almacenamiento de acceso directo", concedida 1992-7-7  (patente fundamental).
  • "RedHat Linux: ¿Qué es Logical Volume Manager o LVM?" . techmagazinez.com . 6 de agosto de 2013. Archivado desde el original el 10 de agosto de 2013 . Consultado el 4 de septiembre de 2013 .
  • "Página de recursos de LVM2" . sourceware.org . 8 de junio de 2012 . Consultado el 4 de septiembre de 2013 .
  • "Cómo: instalar Ubuntu en particiones LVM" . Debuntu.org . 28 de julio de 2007 . Consultado el 4 de septiembre de 2013 .
  • "Administrador de volúmenes lógicos" . markus-gattol.name . 13 de julio de 2013.