Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dsnet/zsync
Daemon for replicating ZFS datasets.
https://github.com/dsnet/zsync
backup zfs zfs-snapshots zfs-sync-storage
Last synced: about 2 months ago
JSON representation
Daemon for replicating ZFS datasets.
- Host: GitHub
- URL: https://github.com/dsnet/zsync
- Owner: dsnet
- License: bsd-3-clause
- Created: 2017-09-03T04:01:03.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2024-08-08T20:15:25.000Z (5 months ago)
- Last Synced: 2024-10-20T22:20:43.962Z (2 months ago)
- Topics: backup, zfs, zfs-snapshots, zfs-sync-storage
- Language: Go
- Homepage:
- Size: 163 KB
- Stars: 7
- Watchers: 3
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# ZFS syncing daemon #
## Introduction ##
The `zsync` daemon auto-snapshots ZFS datasets, replicates datasets, and
auto-deletes stale snapshots. The replication can be performed across machines
in either a push or pull mechanism using either SSH or local OS subprocesses.This only tested with [ZFS on Linux](http://zfsonlinux.org/).
## Usage ##
### Delegate ZFS permissions ###
In order for the daemon to properly perform ZFS operations, the `zfs allow`
feature must be used to enable permissions on certain operations.The following permissions should be granted:
```bash
# On all sources:
sudo zfs allow $USER send,snapshot,destroy,mount $DATASET# On all mirrors:
sudo zfs allow $USER receive,create,mount,mountpoint,readonly,snapshot,destroy,mount $DATASET
```The `mountpoint` and `readonly` properties are only need when performing the
first replication, where the receiving side sets `mountpoint=none` and
`readonly=on`.The `zpool` and `zfs` tool must work without `sudo`.
See the ["Changes in Behavior" section of the ZoL v0.7.0 release](https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.7.0).### Build the daemon ###
```go get -u github.com/dsnet/zsync```
The instruction steps below assume `$GOPATH/bin` is in your `$PATH`,
so that the `zsync` binary can be executed directly from the shell.### Create configuration file ###
The operation of `zsync` is configured using a JSON configuration file,
where the full list of features can be listed by running `zsync -help`.Here is an example configuration file (adjust as appropriate):
```javascript
{
"SSH": {
"KeyFiles": ["/home/user/.ssh/id_rsa"],
"KnownHostFiles": ["/home/user/.ssh/known_hosts"],
},"AutoSnapshot": {"Cron": "@daily", "Count": 7},
"Datasets": [{
"Source": "//localhost/tank/dataset",
"Mirrors": ["//user@remotehost:22/tank/dataset-mirror"],
}],
}
```This example auto-snapshots daily and only keeps 7 snapshots.
It replicates `tank/dataset` on the local machine to `tank/dataset-mirror`
on a remote machine using an SSH push.### Running the daemon ###
Start the daemon with:
```bash
zsync /path/to/config.json
```