¿Confirmar o revertir una instantánea de Linux LVM?


16

Estoy a punto de realizar una actualización experimental en mi servidor CentOS 5. Si la actualización falla, quiero poder hacer una copia de seguridad de los cambios en el sistema de archivos. Este escenario parece similar al ejemplo de la Sección 3.8 del CÓMO LVM para las instantáneas de lectura y escritura de LVM2, pero el ejemplo carece bastante del tutorial real.

  1. ¿Cómo confirmaría los cambios, fusionándolos nuevamente en la partición original?

  2. ¿Cómo revertiría los cambios, restaurando el sistema de archivos a su estado original? ¿Debo suponer que tendré que reiniciar varios servicios, si no es que reinicio completo?

  3. ¿Es posible capturar solo ciertos directorios en una partición o es una operación de toda la partición?

Respuestas:


11

La funcionalidad de combinación de instantáneas de mapeador de dispositivos / LVM2 está disponible si está ejecutando Linux 2.6.33+ y está utilizando LVM 2.0.58+:

lvconvert --merge

Ver esta publicación: http://www.jonnor.com/2010/02/lvm-snapshot-merging-avaliable/

Hace referencia a http://kernelnewbies.org/Linux_2_6_33 (consulte la sección 5, MD / DM) y al registro de cambios de LVM en 2.0.58: ftp://sources.redhat.com/pub/lvm2/WHATS_NEW

Pero aún no puedo decirte cómo usarlo correctamente ;-)


dmsetup targetsdebería mostrar snapshot-merge si ese es el caso, el comando merge, aplicado a snapshot-lv volverá al estado donde se tomó la instantánea.
Nils

El OP parece confundido acerca de cometer cambios a través de algún tipo de paso de fusión. Los cambios se están confirmando a medida que la instantánea aumenta de tamaño. La instantánea (de los cambios) es la información necesaria para respaldarlos a través de lvconvert --merge. Si el OP está contento con sus cambios, puede eliminar la instantánea a través de lvremove.
Vince

20

Acabo de probar una actualización basada en instantáneas con Ubuntu. Y sí, necesitaba reiniciar varias veces. Primero cambie el nombre del root-lv original a otro, para que pueda darle a la instantánea el nombre original (ya que una actualización crea muchos cambios y los cambios son más rápidos en la instantánea que en el original):

 # lvrename lvm root root-old
 # lvcreate -n root -s lvm/root-old -L 10G

El tamaño debe elegirse adecuadamente. Luego reinicie, para que el 'nuevo' lvm / ubuntu se monte como root y pueda realizar la actualización. Ahora puede probar la nueva versión e incluso cambiar al sistema anterior al

 # lvrename lvm root root-new
 # lvrename lvm root-old root
 # reboot

Si desea descartar la actualización, simplemente ejecute (desde el sistema anterior)

# lvremove lvm/root-new

Si desea confirmar los cambios, simplemente ejecute (desde el sistema anterior)

# lvconvert --merge lvm/root-new

o, del nuevo sistema

# lvrename lvm root root-new
# lvconvert --merge lvm/root-new
# lvrename lvm root-old root

seguido de un reinicio. El sistema se negará a fusionar de inmediato, ya que los volúmenes están abiertos. Por lo tanto, la fusión se iniciará durante el arranque y continuará mientras ya pueda trabajar con el sistema.

Ah, y por cierto: al cambiar entre los sistemas, recuerde usar el núcleo apropiado. Como / boot no es parte de lvm, los núcleos viejos y nuevos se colocarían allí uno al lado del otro.


Gracias por tu respuesta. Acabo de reproducir su procedimiento en una máquina virtual CentOS 7 y funcionó de maravilla. Después de restablecer mi máquina virtual en el medio del proceso de fusión, el subsistema LVM lo reanudó mientras el sistema todavía estaba accediendo a los archivos actualizados.
Anderson Medeiros Gomes

Parte de esta respuesta parece sugerir la confirmación de cambios a través de lvconvert --merge. A medida que la instantánea aumenta de tamaño, los cambios también se confirman. Un lvconvert --merge revierte (retrocede) los cambios utilizando la información de la instantánea.
Vince

10

Ok, creo que lo tengo resuelto al releer el CÓMO 3.8.

  • Las instantáneas de solo lectura (como LVM1) contienen las diferencias de nivel de bloque después de la creación de la instantánea: el original aún se modifica, pero la instantánea conserva una representación del original. La lectura de la instantánea presenta los datos tal como aparecieron en ese momento.
  • Las instantáneas de lectura y escritura (predeterminadas en LVM2) se pueden escribir en: son una bifurcación de la partición original. Escribir en la instantánea no cambia el original.

La forma en que funciona una instantánea es un conjunto de cambios a nivel de bloque del original. Entonces, cuando se escribe en el original, suceden las siguientes cosas:

  1. Algo intenta escribir al original.
  2. El original se lee y los bloques del original se copian en la instantánea.
  3. El original se cambia.
  4. La instantánea contiene las "diferencias inversas": los cambios que hacen que el original se vea como cuando se creó la instantánea.

Por lo tanto, tirar la instantánea no afectará en absoluto al original, porque el original ha sido cambiado y la instantánea solo contenía una lista de esos cambios.

Respondiendo a mi propia pregunta:

Cree una nueva instantánea con LVM. Si la actualización se puede configurar para escribir en el punto de montaje de la instantánea, use una instantánea R / W. De lo contrario, ya sea RO o R / W.

Luego:

  • Si escribe en el punto de montaje de la instantánea R / W , confirme escribiendo la instantánea en el original y reviértala tirando la instantánea.
  • Si escribe en el punto de montaje original , comprométase a tirar la instantánea y revierta escribiendo desde la instantánea al original.

Todavía no he encontrado una herramienta específica para realizar esta fusión y, dado que mi escenario no es exactamente el uso previsto de las instantáneas, puede que no haya una. Suena como un trabajo para rdiff.


No hay una herramienta de fusión LVM disponible todavía. Ha estado en proceso, pero no creo que esté completo.
Ignacio Vazquez-Abrams

la herramienta de combinación existe ahora (al menos en Ubuntu Trusty): lvconvert --merge <snapshot-name>"restaurará" su disco original a esa instantánea y la eliminará. Por supuesto, puede restaurarlo rápidamente de inmediato.
dpb

3

LVM funciona a nivel de bloque. Incluso 'no sabe' qué es un sistema de archivos. Por lo tanto, no puede capturar solo ciertos directorios, a menos que un sistema de archivos de un volumen LVM diferente esté montado allí.

Cuando realiza una instantánea LVM, en realidad solicita el duplicado 'copiar en escritura' de un volumen. Cualquier bloque que se cambie en el volumen de la instantánea se almacenará primero sin modificaciones en la instantánea. Entonces, para 'confirmar cambios' no tienes que hacer nada. Simplemente elimine el volumen de la instantánea.

No sé cuál es la forma recomendada de "revertir los cambios", ya que nunca usé LVM en tal escenario, pero supongo que se describe bien en la documentación de LVM en alguna parte. Sea lo que sea, probablemente necesite reiniciar cualquier cosa que haya cambiado, un reinicio podría ser una buena idea.


2
  1. No hay razón para fusionar algunos. Simplemente elimine la instantánea, la fuente LV permanece modificada
  2. Se necesita combinar para revertir los cambios lvconvert --merge <snapshot name>
  3. LVM funciona con dispositivos de bloque. Cualquier cambio relacionado con FS debe ser realizado por utilidades especiales (xfs_growfs, e2fsck, ...) según el tipo de FS

Instantánea 'congelar' estado original de LV. Eliminar instantánea significa olvidar ese estado. Combinar instantánea significa volver a ese estado

Pero dentro de LVM guarda los datos reescritos en la instantánea: asegúrese de que el tamaño de la instantánea cumpla con la cantidad esperada de cambios en LV e instantánea


En realidad, la instantánea no congela nada. Registra los cambios en un lugar adicional para que puedan revertirse más tarde si lo desea.
Vince

0

La documentación es confusa. Me parece que lvcreate --merge significa revertir todos los cambios, y lvremove significa cometer los cambios. La distinción está en cómo lo usas.

En la mayoría de los casos, solo está utilizando la instantánea como un punto congelado de solo lectura en la copia de tiempo del volumen en vivo, y el volumen en vivo sigue cambiando. En este caso, si combina, lógicamente eso significaría que sobrescribirá el volumen en vivo con la copia congelada, o en otras palabras, fusionar significa cambios de reversión y eliminar significa confirmar cambios.

Si escribe en la instantánea (una nueva opción con LVM2), que no es el comportamiento predeterminado que parece, y probablemente requiere cambiar la configuración en otro lugar para que las aplicaciones escriban en la instantánea en lugar del volumen original, entonces lo contrario sería cierto.

¡Tenga cuidado al tratar con instantáneas, ya que algunas personas supondrán que quiere usarlas de una manera y le darán instrucciones que pueden destruir su sistema si opera bajo el supuesto opuesto!


Usted escribe en la instantánea simplemente montando la instantánea; lo que se monta donde tiene poco que ver con los valores predeterminados de LVM: no le importa mucho qué hace exactamente con cada volumen lógico, ya sea una instantánea o no, solo rastrea si está abierto o no.
Josip Rodin
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.