Heinz Mauelshagen escribió el código LVM original en 1998, cuando trabajaba en Sistina Software , tomando sus pautas de diseño primarias del administrador de volúmenes de HP-UX . [1]
Usos
LVM se utiliza para los siguientes fines:
Creación de volúmenes lógicos individuales de múltiples volúmenes físicos o discos duros completos (algo similar a RAID 0 , pero más parecido a JBOD ), lo que permite el cambio de tamaño dinámico del volumen.
Gestión de grandes granjas de discos duros permitiendo agregar y reemplazar discos sin tiempo de inactividad ni interrupción del servicio, en combinación con intercambio en caliente .
En sistemas pequeños (como una computadora de escritorio), en lugar de tener que estimar en el momento de la instalación qué tamaño debería tener una partición, LVM permite redimensionar fácilmente los sistemas de archivos según sea necesario.
Realizar copias de seguridad consistentes tomando instantáneas de los volúmenes lógicos.
Cifrar múltiples particiones físicas con una sola contraseña.
LVM puede considerarse 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, la repartición y la copia de seguridad del disco duro.
Características
Funcionalidad básica
Los grupos de volúmenes (VG) se pueden redimensionar en línea absorbiendo nuevos volúmenes físicos (PV) o expulsando los existentes.
Los volúmenes lógicos (LV) se pueden redimensionar en línea concatenando extensiones en ellos o truncando extensiones 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 resultar útil al migrar LV completos hacia o desde un almacenamiento fuera de línea.
Los objetos LVM se pueden etiquetar para mayor comodidad administrativa. [7]
Los VG y LV se pueden activar a medida que los dispositivos subyacentes se vuelven disponibles mediante el uso del lvmetaddemonio. [8]
Los LV con aprovisionamiento fino se pueden asignar desde un grupo. [10]
En las versiones más nuevas de Device Mapper , LVM está integrado con el resto de Device Mapper lo suficiente como para ignorar las rutas individuales que respaldan un dispositivo dm-multipath si devices/multipath_component_detection=1está configurado en lvm.conf. Esto evita que LVM active volúmenes en una ruta individual en lugar del dispositivo multipath. [11]
Es posible distribuir LV completos o partes de ellos en varios PV, de manera similar a RAID 0 .
Un dispositivo backend RAID 1 (un PV) se puede configurar como "de escritura principal", lo que da como resultado que se eviten las lecturas en dichos dispositivos a menos que sea necesario. [13]
La tasa de recuperación se puede limitar utilizando lvchange --raidmaxrecoveryratey lvchange --raidminrecoveryratemanteniendo un rendimiento de E/S aceptable mientras se reconstruye un LV que incluye la funcionalidad RAID.
Alta disponibilidad
El LVM también funciona en un clúster de almacenamiento compartido en el que los discos que contienen los PV se comparten entre múltiples computadoras host, pero puede 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 los accesos simultáneos a los metadatos de LVM. Siempre que un nodo del clúster necesita modificar los metadatos de LVM, debe obtener el permiso de su servidor local clvmd, que está en contacto constante con otros clvmddaemons del clúster y puede comunicar el deseo de obtener un bloqueo en un conjunto particular de objetos.
HA-LVM
La función de alta disponibilidad se deja a cargo de la aplicación que proporciona la función de alta disponibilidad. Por parte de LVM, HA-LVM puede utilizar CLVM como mecanismo de bloqueo o puede continuar utilizando el bloqueo de archivos predeterminado y reducir las "colisiones" restringiendo el acceso únicamente a aquellos objetos LVM que tengan las etiquetas adecuadas. Dado que esta solución más simple evita la contención en lugar de mitigarla, no se permiten accesos simultáneos, por lo que HA-LVM se considera útil únicamente en configuraciones activas-pasivas.
bloqueo lvm
A partir de 2017 [update], 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 sobre dichos LV debe admitir la agrupación en clústeres por sí mismo (como GFS2 o VxFS ) o solo debe ser montado por un único nodo de clúster en cualquier momento (como en una configuración activa-pasiva).
Política de asignación de grupos de volúmenes
Los grupos de volúmenes virtuales LVM 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 adelante para cada grupo de volúmenes utilizando el lvconvert -Acomando o en el propio grupo de volúmenes mediante vgchange --alloc. Para minimizar la fragmentación, LVM intentará primero la política más estricta (contigua) 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 pata de forma aislada. Por ejemplo, incluso si un LV tiene una política cling , la expansión del sistema de archivos no hará que el LVM utilice un PV si ya lo utiliza una de las otras patas de la configuración RAID. Los LV con funcionalidad RAID colocarán cada pata en diferentes PV, lo que hará que los otros PV no estén disponibles para ninguna otra pata determinada. Si esta fuera la única opción disponible, la expansión del LV fallaría. En este sentido, la lógica detrás de cling solo se aplicará a la expansión de cada una de las patas individuales de la matriz.
Las políticas de asignación disponibles son:
Contiguo : obliga a que todos los LE de un LV determinado sean adyacentes y ordenados. Esto elimina la fragmentación, pero reduce considerablemente la capacidad de expansión del LV.
Cling : obliga a que se asignen nuevos LE solo en PV que ya utiliza un LV. Esto puede ayudar a mitigar la fragmentación, así como a reducir la vulnerabilidad de determinados LV en caso de que un dispositivo deje de funcionar, 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 las patas paralelas (como las de una configuración RAID) compartan un dispositivo físico.
En cualquier lugar : no impone ninguna restricción. Es muy riesgoso en una configuración RAID, ya que ignora los requisitos de aislamiento y socava la mayoría de los beneficios de RAID. En el caso de volúmenes lineales, puede generar una mayor fragmentación.
Implementación
Normalmente, el primer megabyte de cada volumen físico contiene una estructura codificada principalmente en ASCII denominada "encabezado LVM" o "cabeza LVM". Originalmente, el encabezado LVM solía escribirse 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 de todo el grupo de volúmenes, incluidos los UUID de todos los demás PV y de los 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 sus contenidos en otros dispositivos de bloques. Esto minimiza la cantidad de código de kernel relativamente difícil de depurar necesario para implementar el LVM. También permite que sus servicios de redirección de E/S se compartan con otros administradores de volúmenes (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 metadatos en el disco en cada invocación.
Para poner en línea un grupo de volúmenes, utilice la herramienta "vgchange":
Busca PV en todos los dispositivos de bloque disponibles.
Analiza el encabezado de metadatos en cada PV encontrado.
Calcula los diseños de todos los grupos de volúmenes visibles.
Realiza un bucle sobre cada volumen lógico del grupo de volúmenes que se va a poner en línea y:
Comprueba si el volumen lógico que se pondrá en línea tiene todos sus PV visibles.
Crea una nueva asignación de dispositivo vacía.
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":
Crea una nueva asignación de dispositivo vacía para el destino.
Aplica el destino "espejo" a los mapas original y de destino. El núcleo iniciará el espejo en modo "degradado" y comenzará a copiar datos del original al destino para sincronizarlos.
Reemplaza la asignación original con el destino cuando el espejo se sincroniza y luego destruye el original.
Estas operaciones de mapeo de dispositivos se llevan a cabo de forma transparente, sin que las aplicaciones o los sistemas de archivos sepan que su almacenamiento subyacente se está moviendo.
Advertencias
Hasta la versión 2.6.31 del kernel de Linux, [16] no se admitían barreras de escritura (se admitían plenamente en la versión 2.6.33). Esto significa que la garantía contra la corrupción del sistema de archivos que ofrecían los sistemas de archivos con registro como ext3 y XFS se anulaba en algunas circunstancias. [17]
A partir de 2015 [update], no existe ningún programa de desfragmentación en línea o fuera de línea para LVM. Esto se mitiga en cierta medida porque la fragmentación solo ocurre si se expande un volumen y se aplican las políticas de asignación mencionadas anteriormente. Sin embargo, la fragmentación aún ocurre y, si se va a reducir, se deben identificar las extensiones no contiguas y reorganizarlas manualmente utilizando el pvmovecomando. [18]
En la mayoría de las configuraciones LVM, solo se guarda una copia del encabezado LVM en cada PV, lo que puede hacer que los volúmenes sean más susceptibles a sectores de disco dañados. Este comportamiento se puede anular utilizando vgconvert --pvmetadatacopies. Si el LVM no puede leer un encabezado adecuado utilizando la primera copia, comprobará 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 en /etc/lvm/backup, lo que permite la reescritura manual de un encabezado LVM dañado utilizando el vgcfgrestorecomando .
^ ab "LVM README". 17 de noviembre de 2003. Consultado el 25 de junio de 2014 .
^ "Se ha creado la etiqueta anotada [lvm-devel] v2_03_21". 21 de abril de 2023. Consultado el 22 de abril de 2023 .
^ "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 .
^ "Cómo configurar el escritorio 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 .
^ "9.15.4 Crear volumen lógico LVM". Red Hat. 8 de octubre de 2014. Consultado el 22 de mayo de 2015 .
^ "Rendimiento de BTRFS comparado con LVM+EXT4 en relación con las cargas de trabajo de la base de datos". 29 de mayo de 2018.
^ "Etiquetado de objetos de almacenamiento LVM2". Micro Focus International . Consultado el 21 de mayo de 2015 .
^ "El demonio de metadatos". Red Hat Inc. Recuperado el 22 de mayo de 2015 .
^ "Uso de la nueva función de caché de LVM". 22 de mayo de 2014. Consultado el 11 de julio de 2014 .
^ "2.3.5. Volúmenes lógicos con aprovisionamiento fino (Thin Volumes)". Access.redhat.com . Consultado el 20 de junio de 2014 .
^ "4.101.3. RHBA-2012:0161 — Corrección de errores y actualización de mejoras de lvm2" . Consultado el 8 de junio de 2014 .
^ "5.4.16. Volúmenes lógicos RAID". Access.redhat.com . Consultado el 7 de febrero de 2017 .
^ "Control de operaciones de E/S en un volumen lógico RAID1". redhat.com . Consultado el 16 de junio de 2014 .
^ "Re: Instantánea de LVM con VG agrupado [RESUELTO]". 15 de marzo de 2013. Consultado el 8 de junio de 2015 .
^ ""Historial de Git de vmlockd.c"". Archivado desde el original el 4 de enero de 2024.
^ "Error 9554: no se admiten barreras de escritura en el asignador de dispositivos". 2009-07-01 . Consultado el 2010-01-24 .
^ "Barreras y sistemas de archivos con registro en diario". LWN . 2008-05-22 . Consultado el 2008-05-28 .
^ "¿Moverse de un nivel a la vez desfragmentará?". 2010-04-29 . Consultado el 2015-05-22 .
^ "Gotchas". Wiki de btrfs. Archivado desde el original el 4 de enero de 2024. Consultado el 24 de abril de 2017 .
Patente estadounidense 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 un dispositivo de almacenamiento de acceso directo", expedida el 7 de julio de 1992 (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.