Administración de instantáneas de LVM en LVM2

Instantáneas de LVM

Ahora comenzaremos a buscar algunos temas de LVM2 más avanzados y el primero es la administración de instantáneas de LVM. En el próximo blog veremos el Aprovisionamiento ligero en LVM. Las instantáneas LVM son copias Puntuales de volúmenes lógicos LVM. Son eficientes desde el espacio en el sentido de que comienzan a no almacenar datos, pero a medida que los datos se procesan en el LV de origen, los datos originales se escriben en el volumen de instantáneas LVM. Los casos de uso para esto incluyen:

  • Copias de seguridad: Las instantáneas LVM en sí no son una copia de seguridad eficiente, ya que deben almacenarse dentro del mismo Grupo de volúmenes. Sin embargo, las instantáneas se pueden usar para aumentar las copias de seguridad. Simplemente cree una instantánea del volumen de destino y, a continuación, realice una copia de seguridad del volumen de instantáneas para superar cualquier problema relacionado con la concurrencia de archivos durante la copia de seguridad. La instantánea se puede eliminar al final del proceso de copia de seguridad
  • Probar y destruir: las instantáneas LVM son una copia de lectura / escritura del LV original. Puede crear instantáneas LVM de un LV que contenga scripts complejos, cambiar y probar tanto como desee y luego destruir los datos cuando haya terminado. Todo sin afectar a los guiones originales.
  • Probar nuevas implementaciones de software: La instalación de una nueva versión de software puede incluir muchos cientos de archivos ubicados a través de muchos directorios de software. Si la ubicación de destino de todo el software está en un único volumen lógico LVM, podemos crear una instantánea antes de actualizar el software. Si después de probar el software no funciona de la manera deseada. Es una tarea sencilla revertir el LV original a la instantánea. La instantánea, por supuesto, contiene esa copia en el momento del volumen de origen original en el momento en que se tomó la instantánea.

Siga el enlace de abajo para descargar la ‘Guía completa de LVM2 en Linux’, que cuesta solo £1.99! Una vez descargado, el libro electrónico se puede imprimir si es necesario.

Descargar libro electrónico

Preparación para crear instantáneas LVM

Se debe crear una instantánea LVM en el mismo Grupo de volúmenes que el LV de origen. Usando la tecnología CoW (Copiar al escribir), el almacenamiento subyacente tiene que ser el mismo. Permitir que los datos sin cambios en la instantánea se lean desde la fuente LV original. Nuestro Grupo de volúmenes está lleno, por lo que eliminaremos el Volumen lógico existente y lo recrearemos en un tamaño más pequeño. También usaremos dos puntos de montaje,/mnt / original y/mnt / snap.

Después de todo este trabajo, ahora estamos de vuelta a la situación en la que tenemos un volumen lógico de nuevo formato al que hemos llamado lv1. Ahora se monta en / mnt / original para el propósito de la demostración. Hemos creado lv1 a 600 mb dejando 392 mb de espacio libre en el Grupo de volumen vg1. Recuerde que solo nos preocupa el espacio libre en el mismo Grupo de Volúmenes que nuestros Volúmenes Lógicos. La instantánea debe crearse en el mismo Grupo de volúmenes que el LV de origen. Si comprobamos la salida del comando vgs, podemos ver el espacio libre disponible:

# vgs VG #PV #LV #SN Attr VSize VFree vg1 2 1 0 wz--n- 992.00m 392.00m vg2 2 0 0 wz--n- 192.00m 192.00m

Este comando, como hemos visto antes, es una excelente manera de resumir Grupos de volúmenes. Para poder crear una instantánea de punto en el tiempo del Volumen Lógico, lv1, necesitaremos agregar algunos datos. Simplemente copiaremos el archivo / etc / services a / mnt / original.

 # cp /etc/services /mnt/original/ # wc -l /mnt/original/services 612 /mnt/original/services

También podemos ver que este archivo, en mi servidor Ubuntu, tiene 612 líneas. Ahora tenemos datos, así que empecemos.

Crear instantáneas LVM en LVM2

Las instantáneas LVM son, en esencia, volúmenes lógicos simples con algunas ventajas adicionales atornilladas. Por lo tanto, se crean utilizando el comando lvcreate y la opción –s. También necesitamos especificar el volumen de origen al crear la instantánea.

 # lvcreate -L 12m -s /dev/vg1/lv1 -n lv1_snap Logical volume "lv1_snap" created.

Desde las opciones del comando, podemos ver que primero especificamos el tamaño para ser 12 MiB. Solo necesitamos espacio suficiente para almacenar los cambios que hacemos en la fuente. Podríamos haber llenado el LV de origen con 600 MiB de datos, pero si es probable que solo cambien 12 MiB, solo necesitamos un volumen de instantánea de 12 MiB. Ajustamos el tamaño de la instantánea para que coincida con el tamaño de los cambios que se producirán. La opción-s o-snapshot especifica el volumen de origen de la instantánea. Como antes, la opción-n establece el nombre del LV que estamos creando.La instantánea es de lectura / escritura, por lo que se puede montar. Vamos a seguir adelante y montarlo en el directorio / mnt / snap:

# mount /dev/vg1/lv1_snap /mnt/snap/

Podremos ver el mismo contenido en ambos directorios aunque no se hayan realizado cambios. Las instantáneas LVM enlazan a los datos originales hasta que se cambian.

Cuando miramos el detalle de la fuente y el volumen de la instantánea, se verá un poco diferente. En primer lugar, el volumen lv1_snap. La instantánea LV.

# lvdisplay /dev/vg1/lv1_snap --- Logical volume --- LV Path /dev/vg1/lv1_snap LV Name lv1_snap VG Name vg1 LV UUID s8gBiX-IV1z-jiZK-q4dN-paG5-8mvq-TCQkuk LV Write Access read/write LV Creation host, time yogi, 2017-08-22 09:26:14 +0000 LV snapshot status active destination for lv1 LV Status available # open 1 LV Size 600.00 MiB Current LE 150 COW-table size 12.00 MiB COW-table LE 3 Allocated to snapshot 0.36% Snapshot chunk size 4.00 KiB Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:3

Podemos recordar, espero que lo haga, que creamos esto con un tamaño de 12 MiB. El tamaño del LV, sin embargo, se muestra como 600 MiB. El tamaño que vemos es del LV original o de origen. El tamaño de la instantánea se muestra en el tamaño de la tabla COW. La copia en escritura se produce cuando se cambian los datos en el origen y los datos originales se copian en el volumen de instantáneas. El volumen de instantáneas siempre mostrará una lista de los archivos de instantáneas originales, sin importar si han cambiado o no. Al crear la instantánea, no hay cambios de vaca que almacenar, por lo que el valor asignado es muy bajo para comenzar y aumentará a medida que se realicen cambios en los datos de origen. Cuando miramos los detalles de la pantalla ahora para el lv1 LV, también será un poco diferente:

# lvdisplay /dev/vg1/lv1 --- Logical volume --- LV Path /dev/vg1/lv1 LV Name lv1 VG Name vg1 LV UUID dmVaWm-kA9V-xouM-OZBR-b7Id-aMUh-EWymB0 LV Write Access read/write LV Creation host, time yogi, 2017-08-21 18:51:57 +0000 LV snapshot status source of lv1_snap LV Status available # open 1 LV Size 600.00 MiB Current LE 150 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:0

Podemos ver que se muestra como la fuente de la instantánea para lv1_snap.

Cambiar los datos de instantáneas LVM

Si ahora hacemos un cambio en los datos en el volumen de origen, comenzaremos a ver una diferencia en los datos en el volumen de instantáneas. El volumen de instantáneas contiene los datos originales, mientras que el LV de origen contiene los cambios. Primero, agregaremos un nuevo archivo al volumen de origen:

# cp /etc/hosts /mnt/original/

Ahora podemos ver que el contenido difiere para la fuente de los volúmenes snaphot

También podemos ver que comenzamos a consumir más espacio de VACA en el Volumen Lógico. Volviendo a lvdisplay para lv1_snap veremos aumentar el porcentaje Asignado a instantáneas.

# lvdisplay /dev/vg1/lv1_snap --- Logical volume --- LV Path /dev/vg1/lv1_snap LV Name lv1_snap VG Name vg1 LV UUID s8gBiX-IV1z-jiZK-q4dN-paG5-8mvq-TCQkuk LV Write Access read/write LV Creation host, time yogi, 2017-08-22 09:26:14 +0000 LV snapshot status active destination for lv1 LV Status available # open 1 LV Size 600.00 MiB Current LE 150 COW-table size 12.00 MiB COW-table LE 3 Allocated to snapshot 0.98% Snapshot chunk size 4.00 KiB Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:3

Aunque no hayamos cambiado los datos existentes, la adición de nuevos datos también afectará a la instantánea, ya que el volumen de la instantánea debe mostrar los datos tal como estaban cuando se tomó la instantánea. Si es necesario, deberíamos ser capaces de revertir el original a los datos snapshoteados.

A continuación, sobrescribiremos el archivo /etc/services original:

# > /mnt/original/services

El archivo / mnt / original / services ahora estará vacío. Sin embargo, si comprobamos el archivo de instantánea, todavía tendrá los datos. Usando el comando wc podemos contar el número de líneas en cada archivo:

 # wc -l /mnt/original/services /mnt/snap/services 0 /mnt/original/services 612 /mnt/snap/services 612 total

Por supuesto, volver a comprobar la salida de lvdisplay para lv1_snap mostrará que el porcentaje Asignado a instantáneas ha aumentado con el cambio:

Allocated to snapshot 1.17%

Cambios de volumen para instantáneas LVM

Los atributos de las LV de origen y de instantánea cambiarán cuando se cree la instantánea. Podemos ver esto en detalle con el comando lvdisplay, pero se resume mejor con el comando lvs:

Hay 10 atributos que leemos de izquierda a derecha:

Para lv1 los atributos leídos:

  • Tipo de volumen: Origen. El origen de una instantánea
  • Permisos: Grabable
  • Política de asignación: Heredada del Grupo de volúmenes
  • El número menor fijo no está establecido
  • Estado: Está marcado como activo
  • Dispositivo: Está abierto o montado
  • Tipo de destino: Instantánea, es decir, participa en una instantánea

Para lv1_snap los atributos leídos:

  • Tipo de volumen: Volumen de instantáneas
  • Permisos: Escribible
  • Política de asignación: Heredado del Grupo de volúmenes
  • El número menor fijo no está establecido
  • Estado: Está marcado como activo
  • Dispositivo: Está abierto o montado
  • Tipo de destino: Instantánea, es decir, está participando en una instantánea

Los LVs originales y de destino deben estar en el mismo Grupo de volúmenes que ya hemos mencionado, no necesariamente compartir los mismos dispositivos dentro de esos Grupos de volúmenes. Esto normalmente se abstrae de nosotros, pero podemos agregar la opción al comando lvs:

Agregar los dispositivos-o para opciones y +mostrará los dispositivos subyacentes que componen el LV. Podemos ver que lv1 es más grande que /dev/sdc1 o /dev/sdc2 y se extiende a través de ambos. Considerando que, vg1_snap puede hacer uso del espacio sobrante en /dev/sdc2. El número entre paréntesis después del nombre del dispositivo indica el número de extensión física en el que se inicia el LV desde el dispositivo. Podemos ver que lv1 comienza en la extensión 0 para /dev / sdc1 y /dev/sdc2 y lv1_snap comienza en la extensión 26 de / dev / sdc2. Para ver todas las opciones disponibles con la opción –o, utilice el comando:

# lvs -o help

Como la lista es extensa, no hemos incluido la salida.

Además de mirar los Volúmenes lógicos directamente, también podemos usar el comando lsblk. Aquí veremos más cambios de los que quizás piensas:

 # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop1 7:1 0 100M 0 loop sdb 8:16 0 256M 0 disk loop0 7:0 0 100M 0 loop sdc 8:32 0 1000M 0 disk ├─sdc2 8:34 0 500M 0 part │ ├─vg1-lv1-real 252:1 0 600M 0 lvm │ │ ├─vg1-lv1 252:0 0 600M 0 lvm /mnt/original │ │ └─vg1-lv1_snap 252:3 0 600M 0 lvm /mnt/snap │ └─vg1-lv1_snap-cow 252:2 0 12M 0 lvm │ └─vg1-lv1_snap 252:3 0 600M 0 lvm /mnt/snap └─sdc1 8:33 0 499M 0 part └─vg1-lv1-real 252:1 0 600M 0 lvm ├─vg1-lv1 252:0 0 600M 0 lvm /mnt/original └─vg1-lv1_snap 252:3 0 600M 0 lvm /mnt/snap sda 8:0 0 9.8G 0 disk /

Ya estamos familiarizados con el dispositivo vg1-lv1 y los dispositivos vg1-lv1_snap. Estos han sido los LVs subyacentes con los que hemos estado trabajando. El número principal del núcleo o controlador que se utiliza con LVM2 es 252. Por lo tanto, vemos esto para todos los LVs que tenemos en su lugar. El primer LV fue vg1-lv1, por lo que este tiene el número menor de 0. Sin embargo, cuando miramos vg1-lv1_snap, este tiene un número menor de 3 que indica el 4º LV y no el 2º como es de esperar. En su lugar, se crean dos LV de envoltura para la instantánea, vg1-lv1-real y vg1-lv1_snap-cow. Estos se administran internamente y no nos involucramos en estos objetos que LVM2 usa para administrar el proceso de snapshotting. Cada LV que vemos aquí también tiene un dispositivo devmapper correspondiente. Si listamos el directorio /dev y el archivador en dm – * podemos mostrarlos.

# ls /dev/dm-* /dev/dm-0 /dev/dm-1 /dev/dm-2 /dev/dm-3

De nuevo. vemos los 4 dispositivos no solo los 2 que podríamos haber esperado. Por lo tanto, en segundo plano LVM2 está gestionando mucho para nosotros y nos permite acceder solo a los elementos que necesitamos.

Revertir un volumen a la instantánea

Un escenario de recuperación con instantáneas LVM nos permite revertir a la instantánea.Si encontramos que necesitamos revertir el LV original a la instantánea de punto en el tiempo, podemos hacerlo. Recuerde, que la instantánea será una representación del volumen original en el momento de la instantánea. Podemos hacer esto después de que se haya probado una actualización de software y se haya tomado la decisión de volver a la instantánea que debería haberse tomado antes del proceso de actualización de software. Para asegurarnos de que podemos ver esto en tiempo real, primero desmontaremos ambos LVs:

# umount /mnt/{original,snap}

Si no cerramos los dispositivos, tendremos que esperar hasta que se active el LV original, vg1. A menudo esto es en un reinicio. Con los Volúmenes lógicos ahora desmontados y cerrados, usamos el comando lvconvert para fusionar la instantánea con el padre u origen. Esto es revertir el volumen lógico de origen al contenido de la instantánea. La instantánea se elimina automáticamente al final del proceso.

# lvconvert --merge /dev/vg1/lv1_snap Merging of volume lv1_snap started. lv1: Merged: 99.2% lv1: Merged: 100.0%

Dependiendo del tamaño de los datos a fusionar y de la velocidad de los discos, es posible que esto lleve algún tiempo. Utiliza la opción-b para hacer un segundo plano del proceso.

Si ahora montamos lv1 de nuevo y comprobamos el contenido. Nos faltará el archivo hosts que se agregó después de que se tomó la instantánea. El archivo de servicios ahora tenemos el contenido que sobrescribimos.

 # mount /dev/vg1/lv1 /mnt/original/ # ls /mnt/original/ lost+found services # wc -l /mnt/original/services 612 /mnt/original/services

Pruebas y desarrollo

Otro uso para instantáneas LVM es en un entorno de pruebas. Si prefiere trabajar directamente con los datos de snapshot, puede hacerlo. Cuando haya terminado, solo necesita desmontar la instantánea LV y eliminarla. El LV original subyacente se deja sin cambios. Esto es genial cuando desea trabajar en scripts sin afectar los scripts de producción originales.

El proceso es prácticamente el mismo, pero ahora solo trabajamos con el directorio /mnt/snap. A continuación se presenta un resumen de los comandos:

Extender el tamaño de la instantánea

Cuando creamos un volumen de instantánea, debemos establecer un tamaño que sintamos adecuado para almacenar todos los cambios realizados en el LV original mientras la instantánea está en su lugar. Sin embargo, es posible expandir automáticamente un volumen de instantáneas si es necesario.

Es importante tener en cuenta que si una instantánea se llena completamente, la instantánea se elimina automáticamente.

La configuración predeterminada no permite que las instantáneas crezcan automáticamente. Tenemos que habilitarlo. La configuración de LVM2 está en /etc/lvm / lvm.conf. Si buscamos la configuración efectiva usando grep:

 # grep -E '^\s*snapshot_auto' /etc/lvm/lvm.conf snapshot_autoextend_threshold = 100 snapshot_autoextend_percent = 20

Tener el valor snapshot_autoextend_threshold establecido al 100% significa que la instantánea nunca crecerá. Tan pronto como alcanzamos el umbral del 100%, la instantánea se elimina. Si necesitamos activar extensión automática, considere establecer esto en algo como 70. En cuyo caso, cuando la instantánea esté llena en un 70%, el tamaño aumentará. El tamaño del aumento está controlado por snapshot_autoexend_percent. El valor predeterminado está establecido en 20%, lo que significa que el tamaño aumentará en un 20% de su tamaño actual cada vez que se requiera un crecimiento.

Write a Comment

Tu dirección de correo electrónico no será publicada.