Ir al contenido

Blog ·

Lo que una copia de seguridad no contiene

La misma opción ausente significa sí en una máquina virtual y no en un contenedor. Así se midió la cobertura de Proxmox en lugar de darla por prometida.

Por Provibr

Si se pregunta a un panel de gestión si una máquina tiene copia de seguridad, la respuesta suele ser que sí. La pregunta interesante es más estrecha y bastante más difícil: qué partes están en el archivo y cuáles no. Un contenedor con un montaje enlazado a un directorio del anfitrión tiene datos que ningún vzdump tocará jamás, y un panel que sobre esa configuración dice «con copia» no está siendo optimista, está haciendo una promesa en nombre del software de otra persona.

Así que se dejó de prometer y se empezó a medir. Cada copia y cada punto de restauración lleva ahora una observación de cómo era el huésped en ese momento, y el panel deduce la cobertura de esa observación y no del hecho de que una copia terminara bien.

La misma ausencia, dos significados opuestos

El motivo por el que esto se mide y no se razona es una regla de comportamiento de Proxmox que va justo en sentido contrario para los dos tipos de huésped.

En un contenedor, un punto de montaje está en el archivo solo cuando lleva escrito backup=1. La documentación es explícita: para incluir un punto de montaje en las copias, hay que activar la opción de copia sobre él. La ausencia significa no.

En una máquina virtual, un disco está en el archivo salvo que lleve escrito backup=0. Eso no aparece con esas palabras en el manual; aparece en la función que entrega a vzdump su lista, donde el valor se lee como la marca de copia del disco con uno por defecto. La ausencia significa sí.

Línea de configuración¿En el archivo?
rootfs: local-lvm:vm-101-disk-0,size=8Gsí, siempre; la raíz ni siquiera conoce el campo de copia
mp0: local-lvm:vm-101-disk-1,mp=/data,backup=1sí
mp0: local-lvm:vm-101-disk-1,mp=/datano
mp0: /srv/data,mp=/data (montaje enlazado)no; el contenido de los montajes enlazados no se copia
mp0: /dev/sdb1,mp=/disk (montaje de dispositivo)no; lo mismo vale para los montajes de dispositivo
scsi0: local-lvm:vm-100-disk-0,size=32Gsí
scsi1: local-lvm:vm-100-disk-1,backup=0no
ide2: local:iso/debian.iso,media=cdromno procede
efidisk0: … con bios: ovmfsí
efidisk0: … sin bios: ovmfno
tpmstate0: …sí
scsi2: /dev/sdb (paso directo)sí
unused0: local-lvm:vm-100-disk-4no
virtiofs0: dataset-ano

Las dos líneas en negrita son la misma ausencia. Al plegarlas en una sola frase, una de las dos pantallas miente, y ninguna de las dos da error.

Leer la fuente, no la intuición

Tres de esas filas salieron distintas de lo que el plan de este trabajo suponía, y las tres se resolvieron leyendo Proxmox en lugar de discutir.

De un disco de paso directo se supuso que era dato del anfitrión que se queda atrás, por analogía con el montaje de dispositivo de un contenedor. No es así. La función que construye la lista de copia no mira el camino en ningún momento, y el paso de preparación convierte un identificador de volumen sin almacenamiento detrás en un dispositivo de bloques y lo incluye. Equivocarse en la dirección que parece segura diría a los clientes que hay datos fuera de su archivo que en realidad están dentro, lo cual suena inofensivo hasta que se nota que fuerza un reconocimiento en cada restauración y enseña así a la gente a pasar por encima de los reconocimientos.

Los discos desconectados y los directorios compartidos del anfitrión sencillamente faltaban en el plan. Un unusedN es dato real del cliente que está en el almacenamiento sin bus asociado, y vzdump deja constancia de que lo salta. Un virtiofsN es un directorio del anfitrión y nunca un volumen, lo que lo convierte en el equivalente del montaje enlazado para una máquina virtual. Ambos son huecos reales de cobertura y ambos habrían contado como completos.

Los prefijos de las claves de disco y sus cantidades vienen del mismo sitio: cuatro puestos IDE, seis SATA, treinta y uno SCSI, dieciséis virtio, un disco EFI, un estado TPM, doscientos cincuenta y seis puestos sin usar, diez virtiofs. Una clave fuera de esos rangos no es un disco para Proxmox, así que tampoco puede convertirse aquí en uno en silencio. Y virtiofs se comprueba antes que virtio, porque virtiofs0 empieza por virtio: al revés, un directorio compartido del anfitrión se leería como disco y se informaría como copiado.

Desconocido nunca se llama completo

Las palabras en pantalla para un huésped sin medir son «no establecido», y por extenso: lo que contiene una copia no se ha establecido. Nunca «completa», nunca «fuera de la copia». Hay tres maneras de llegar ahí y las tres son reales: el huésped es de un tipo que el agente no sabe leer, el agente es anterior a la versión que lee configuraciones, o el agente lo intentó y no pudo acceder.

Ese último caso es el motivo de que la observación lleve una marca explícita de que la configuración se leyó. Sin ella, una lista vacía de puntos de montaje no se distingue de un contenedor sin montajes adicionales, salvo porque el segundo no existe: siempre hay una raíz. Un agente que no pudo mirar se leería en otro caso como un huésped sin nada fuera del archivo, que es exactamente el fallo que este trabajo existe para evitar.

Dos reglas empujan en el mismo sentido. Una configuración de contenedor que sí se leyó pero no contiene raíz es desconocida y no completa, porque evidentemente se leyó algo que no era una configuración de contenedor. Y una configuración de máquina virtual en la que no hay nada que plantee una pregunta de cobertura, ni nada ni más que unidades ópticas, es desconocida por el mismo motivo: completa significa que todo está dentro, y decir eso sobre cero cosas es una afirmación sin medición debajo. El precio se conoce y se acepta, y es que una máquina realmente sin discos ahora se lee como no establecida y pide un reconocimiento al restaurar. Ese es el lado en el que equivocarse no cuesta nada.

El veredicto también está ordenado a propósito: demostrablemente fuera vence a no medido. Un contenedor con un montaje enlazado y una línea ilegible es parcial y no desconocido, porque la parte que importa está probada. La línea ilegible no desaparece; conserva su propia fila con su propia palabra.

No procede no es lo mismo que excluido

Una unidad óptica recibe un estado de cobertura propio, y la distinción no es quisquillosa sino la acción que se deriva de ella.

Excluido significa que hay datos del cliente fuera del archivo y que existe una casilla en Proxmox que lo cambia. Una unidad óptica no lleva datos de esta máquina: es una imagen de una biblioteca, o el disco de inicialización que se rehace en cada arranque, y Proxmox la salta antes de evaluar cualquier otra cosa. Si una unidad óptica se llamara excluida, toda máquina con una imagen en la unidad sería parcial y toda restauración pediría un reconocimiento sobre una unidad en la que no hay nada. La gente aprendería que el reconocimiento no significa nada, y entonces no significaría nada.

La fila aparece igualmente en la tabla, con su propia palabra. Una fila ausente plantea la duda de si se llegó a mirar, y esa ambigüedad es justo la que retira la marca de lectura.

El reconocimiento falla hacia el lado seguro

Restaurar un archivo cuya cobertura sea algo distinto de un «completa» medido exige marcar una casilla que nombra lo que quedó fuera. También con desconocida, y esa es la parte deliberada: un punto de restauración antiguo, o un archivo creado por otra persona, bien puede carecer de datos del anfitrión, y la casilla es donde el cliente aprende a comprobarlo por su cuenta. Solo una cobertura completa medida se lo salta, porque entonces no hay realmente nada que reconocer.

La misma frase vigila dos puertas, el punto de entrada y la función que hay detrás, porque una pantalla no es una frontera. Y el botón de confirmación no se desactiva mientras el panel está abierto: un elemento desactivado no puede retener el foco, así que un diálogo que desactiva a quien lo abrió no puede devolver el foco al cerrarse y quien navega con teclado acaba en el cuerpo del documento. Un estado de ocupado y un atenuado hacen el mismo trabajo sin romper eso.

Lo que quedó fuera del archivo se escribe además como evento sobre la restauración, con nivel de advertencia y los puntos de montaje entre sus datos. Una restauración que salió bien en silencio dejando atrás tres directorios debería poder encontrarse un mes después por alguien que no estuvo presente.

Lo que dejaríamos escrito

  1. Mida la cobertura, no la deduzca. «La copia terminó bien» y «sus datos están en la copia» son dos afirmaciones sobre cosas distintas.
  2. Compruebe si un valor por defecto es el mismo a ambos lados de su abstracción. Aquí una opción ausente significa sí para un tipo de huésped y no para el otro, y una frase compartida resulta falsa en exactamente una pantalla sin error en ninguna parte.
  3. Lea el código que construye la lista de verdad, no solo el manual. Tres de nuestras reglas eran falsas hasta que se hizo, y una lo era en la dirección que parece segura.
  4. Dé a lo no medido una palabra propia y no deje nunca que se funda con el sí o con el no.
  5. Dé también una palabra propia a lo que no plantea pregunta. Un estado que fuerza una confirmación sin sentido enseña a ignorar las confirmaciones.
  6. Separe la observación del juicio. El agente informa de lo que vio; una función decide qué significa, con pruebas al lado y sin que quien informa pueda afirmar que algo está completo.

Para que quede claro qué es esto: las copias de cliente están detrás de un interruptor de despliegue apagado por defecto, nada de esto se puede comprar hoy, y las reglas se verificaron contra la documentación y el código de Proxmox y no contra un hipervisor propio en marcha. Tres cosas quedan sin probar o deliberadamente fuera de alcance. La cobertura de un punto de restauración concreto se hereda de la ejecución que lo creó en lugar de leerse del archivo. Los discos de máquina virtual con backup=0 se ven en esta tabla y en ningún otro sitio del producto. Y una máquina realmente sin discos se lee como no establecida, un precio que se prefirió a la alternativa.

Del trabajo de copias de seguridad en Provibr. Por qué una restauración sin probar no es una copia está en una copia que nunca se restauró, y qué garantizan realmente los tres modos de vzdump está en modos de vzdump en Proxmox: qué garantizan.

Empiece con un host y un agente

Cree una cuenta, instale el agente con un solo comando y conecte su primer host de Proxmox. El periodo de prueba dura 14 días y no pide ningún dato de pago.