Si bien las diferentes instantáneas montadas funcionarían, parece que podría ser terriblemente lento en muchos casos.
¿Existe una funcionalidad específica de btrfs para diferentes instantáneas? (No pude encontrar ninguno en los documentos)
Si bien las diferentes instantáneas montadas funcionarían, parece que podría ser terriblemente lento en muchos casos.
¿Existe una funcionalidad específica de btrfs para diferentes instantáneas? (No pude encontrar ninguno en los documentos)
Respuestas:
Parece que está buscando btrfs enviar / recibir , que aparecerá en Linux 3.6. El send
comando crea un archivo de registro de las diferencias entre dos instantáneas, y el receive
comando aplica los cambios desde un archivo. Tenga en cuenta que enviar / recibir utiliza un formato de archivo personalizado, por lo que el archivo no se verá exactamente como, por ejemplo, diff o tar.
Estoy ejecutando Debian estable que no tiene btrfs send
, así que busqué una solución usando btrfs subvolume find-new
.
Si tiene snapshot1 y snapshot2 y desea saber qué cambió en la posterior, snapshot 2, ya que se hizo snapshot1, puede usar el script que se encuentra a continuación, que proporciona
btrfs-diff oldsnapshot/ newsnapshot/
que enumerará todos los archivos modificados en newsnapshot / since oldsnapshot /.
#!/bin/bash
usage() { echo $@ >2; echo "Usage: $0 <older-snapshot> <newer-snapshot>" >2; exit 1; }
[ $# -eq 2 ] || usage "Incorrect invocation";
SNAPSHOT_OLD=$1;
SNAPSHOT_NEW=$2;
[ -d $SNAPSHOT_OLD ] || usage "$SNAPSHOT_OLD does not exist";
[ -d $SNAPSHOT_NEW ] || usage "$SNAPSHOT_NEW does not exist";
OLD_TRANSID=`btrfs subvolume find-new "$SNAPSHOT_OLD" 9999999`
OLD_TRANSID=${OLD_TRANSID#transid marker was }
[ -n "$OLD_TRANSID" -a "$OLD_TRANSID" -gt 0 ] || usage "Failed to find generation for $SNAPSHOT_NEW"
btrfs subvolume find-new "$SNAPSHOT_NEW" $OLD_TRANSID | sed '$d' | cut -f17- -d' ' | sort | uniq
Para explicar: btrfs subvolume find-new
encuentra los archivos cambiados después de una 'generación' particular de instantánea. También informa el número de generación actual.
Por ejemplo, tome la instantánea diaria de un caso de subvolumen:
mkdir test && cd test
btrfs subvolume create live
date >live/foo1
date >live/bar1
btrfs subvolume snapshot live/ snap1
date >live/foo2 # new file
date >>live/bar1 # modify file
rm live/foo1 # delete file
btrfs subvolume snapshot live/ snap2
date >live/foo3 # new file
mv live/bar{1,2} # rename file
rm live/foo2 # delete file
¿Qué cambió entre snap1 y snap2?
$ btrfs-diff snap1/ snap2/
bar1
foo2
Entonces podemos ver el nuevo archivo, ver el archivo modificado, pero la eliminación no se informa . Esto se debe a que el comando informa sobre los archivos que existen, no sobre los que ahora no.
¿Qué cambió entre snap2 y el subvolumen en vivo?
$ btrfs-diff snap2/ live/
foo3
el archivo renombrado no se informa . Sus datos no han cambiado.
¿Y si agregamos datos al archivo renombrado?
date >>live/bar2
btrfs-diff snap2/ live/
bar2
foo3
OK, tiene sentido. Pero hagamos un nuevo archivo
date >live/lala
btrfs-diff snap2/ live/
bar2
foo3
eh! donde esta lala . Si agrega otro archivo, lala
aparece. Entonces este comportamiento es un poco extraño. Probablemente por eso la wiki dice:
El enfoque de encontrar nuevo tiene algunas limitaciones serias y, por lo tanto, no se puede usar para algo como enviar / recibir.
Sin embargo, la rareza se produce cuando compara un subvolumen en vivo con un estado anterior, no cuando compara instantáneas (solo lectura). Por lo tanto, esto podría ser útil a menos que también desee identificar los archivos eliminados.
Esto es compatible con la herramienta de conveniencia de instantáneas snapper
.
sudo snapper -c config diff 445..446
Por supuesto, esto requiere que esté utilizando snapper
para sus instantáneas.
Los identificadores de esta instantánea se pueden encontrar usando snapper list -a
. Desafortunadamente, al momento de escribir, Snapper no admitía instantáneas de lista para una sola configuración, aunque estos números se pueden encontrar a partir de nombres de subvolúmenes.
A
contienea
, escribab
su instantánea y luego vuelva a cambiarlaa
, el archivo realmente no cambió en absoluto.