zfs send produce un stream replicable, no un directorio. El destino natural es otro pool (zfs recv). S3 es un segundo salto: guardas el stream como objeto, o usas una herramienta tipo z3.
Incremental a otro host (el comando que uso)
| |
| Flag | Qué hace |
|---|---|
-w | raw: manda el dataset cifrado como está. El destino no necesita la key para recibir. |
-R | replica propiedades y snapshots hijas |
-i @initial @new | incremental desde @initial (tiene que existir en origen y destino) |
-v | progreso |
recv -s | resumible si se corta el SSH (zfs restart / recv -s otra vez) |
Pon un hold en @initial y @new mientras corre el send, o el prune te rompe la cadena.
El primer full (sin -i) es obligatorio una vez:
| |
Aterrizar en S3
Mismo stream, otro lado del pipe:
| |
Restaurar:
| |
Esto no es un sync de archivos. Es un blob opaco: o recuperas el stream entero (o el incremental encima del full), o no recuperas nada. Versiona los nombres @initial, @new y no borres el full.
Para incrementales en S3, herramientas como z3 llevan el catálogo de qué snapshot ya subió. Un aws s3 cp - crudo no sabe de eso.
-w en S3 es correcto si el dataset ya está cifrado: Amazon no ve plaintext. Si el origen no está cifrado, o cifras en recv (artículo) o cifras el objeto (KMS / cliente) — el stream en claro en un bucket es un backup en claro.
Ver también: cifrado nativo.