someone1
Dabbler
- Joined
- Jun 17, 2013
- Messages
- 37
Hello all,
Let me preface this with I have not found a piece of software that does what I am trying to do.
I am halfway through writing version 1 of a backup utility for ZFS systems. The idea was inspired by a file-level backup solution I currently use, duplicity, for my NAS share sitting on top of FreeNAS. I wanted a way to be able to leverage the built-in ZFS snapshot capabilities to do a block-level backup of my share instead of a file-level backup which is prone to issues (ACLs, static copy of data, high memory usage for large incremental backups, slow etc.)
This backup software was designed for the secure, long-term storage of ZFS snapshots on remote storage. Backup jobs are resilient to network failures and can be stopped/resumed. It works by splitting the ZFS send stream (the format for which is committed and can be received on future versions of ZFS as per the man page) into chunks and then optionally compressing, encrypting, and signing each chunk before uploading it to your remote storage location(s) of choice. For version 1 I plan on supporting Google Cloud Storage and AWS S3 storage. Backup chunks are validated using SHA256 and CRC32C checksums (along with the many integrity checks builtin to compression algorithms, SSL/TLS transportation protocols, and the ZFS stream format itself). The compression algorithm builtin to the software is a parallel gzip compressor but I have written support for 3rd party compressors so long as the binary is available on the host system and is compatible with the gzip binary command line (e.g. xz, bzip2, lzma, etc.) I use the PGP algorithm for encryption/signing if required. The result is similar to piping the zfs send command to a compression binary and then to a pgp binary such as gpg. The benefit of this software is that it manages the entire process for you, splits the stream into chunks for parallel upload and the ability to resume a backup due to failure/cancellation, uploads it to multiple storage locations, and tracks the entire process with useful information and checksums for later review and retrieval.
I can provide more information to those who are interested. There are NO dependencies required to run this software (written in Go). It can be compiled to any target supported by the Go compiler which includes FreeBSD, Linux, and Solaris. All you need is a single file to execute and run the software. Please PM me if you are interested and tell me a little bit about your use-case.
I'd like to gauge community interest and see if anyone is willing to help test the software with me. I will post the source code up on GitHub once it has some basic functionality coded out and tested, and I welcome the help of other developers who find the project interesting/useful. As of right now, I have coded the backup (send) half of the software. What remains is the restore (receive) half of the software. I have many plans to make this a robust piece of software and include a custom backup scheduler for advanced snapshot/backup configurations.
On a side note: It wouldn't be difficult to include BTRFS support as the send/recieve mechanisms are similar to the ones in ZFS.
Let me preface this with I have not found a piece of software that does what I am trying to do.
I am halfway through writing version 1 of a backup utility for ZFS systems. The idea was inspired by a file-level backup solution I currently use, duplicity, for my NAS share sitting on top of FreeNAS. I wanted a way to be able to leverage the built-in ZFS snapshot capabilities to do a block-level backup of my share instead of a file-level backup which is prone to issues (ACLs, static copy of data, high memory usage for large incremental backups, slow etc.)
This backup software was designed for the secure, long-term storage of ZFS snapshots on remote storage. Backup jobs are resilient to network failures and can be stopped/resumed. It works by splitting the ZFS send stream (the format for which is committed and can be received on future versions of ZFS as per the man page) into chunks and then optionally compressing, encrypting, and signing each chunk before uploading it to your remote storage location(s) of choice. For version 1 I plan on supporting Google Cloud Storage and AWS S3 storage. Backup chunks are validated using SHA256 and CRC32C checksums (along with the many integrity checks builtin to compression algorithms, SSL/TLS transportation protocols, and the ZFS stream format itself). The compression algorithm builtin to the software is a parallel gzip compressor but I have written support for 3rd party compressors so long as the binary is available on the host system and is compatible with the gzip binary command line (e.g. xz, bzip2, lzma, etc.) I use the PGP algorithm for encryption/signing if required. The result is similar to piping the zfs send command to a compression binary and then to a pgp binary such as gpg. The benefit of this software is that it manages the entire process for you, splits the stream into chunks for parallel upload and the ability to resume a backup due to failure/cancellation, uploads it to multiple storage locations, and tracks the entire process with useful information and checksums for later review and retrieval.
I can provide more information to those who are interested. There are NO dependencies required to run this software (written in Go). It can be compiled to any target supported by the Go compiler which includes FreeBSD, Linux, and Solaris. All you need is a single file to execute and run the software. Please PM me if you are interested and tell me a little bit about your use-case.
I'd like to gauge community interest and see if anyone is willing to help test the software with me. I will post the source code up on GitHub once it has some basic functionality coded out and tested, and I welcome the help of other developers who find the project interesting/useful. As of right now, I have coded the backup (send) half of the software. What remains is the restore (receive) half of the software. I have many plans to make this a robust piece of software and include a custom backup scheduler for advanced snapshot/backup configurations.
On a side note: It wouldn't be difficult to include BTRFS support as the send/recieve mechanisms are similar to the ones in ZFS.