-
Notifications
You must be signed in to change notification settings - Fork 1
/
zfs-backup.txt
57 lines (52 loc) · 2.36 KB
/
zfs-backup.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
ZFS Backup Strategy
* Source -> destination
* Source can be pool or specific dataset
* Destination must be dataset
* Hierarchical datasets may need to be created
* tank/Media/Movies -> backup/tank/Media/Movies needs equivalent of "mkdir -p backup/tank/Media/Movies"
* Requires at least one snapshot
* Incrementals require at least two snapshots
* Need to compare snapshots on source and destination
* Can be recursive
* Recursion should be handled by zfs send -r
* But could determine by zfs list
* If done manually, backups need to be done in reverse order
(e.g., tank/Media/Movies/Marvel, then tank/Media/Movies, etc.)
HOW TO BACKUP
* All backups require at least one snapshot on source.
* Normally or force full
* Normal backup need list of snapshots on source and destination
* Starting from most recent snapshot, find first snapshot in common.
* If there is no such snapshot, must be full repliction
* Otherwise, 'zfs send [-r] -I ${common} ${source}@${latest} |
zfs recv -d -F ${dest}"
* Full backup: 'zfs send [-r] ${source}@${latest} |
zfs recv -d -f ${dest}"
* Can backup specific snapshot, same rules above apply
HOW TO RESTORE
* Need to ensure datasets are read-write after restoring
* Restores are either to the latest snapshot, or to a specific snapshot.
* Restores come into two categories:
* Full
* Incremental
Without a common snapshot, a full restore must be done.
An incremental restore needs the name of the snapshot to be
restored, and the most recent previous common snapshot.
* Subclasses have to be able to override the starting snapshot.
* Not true: what we need is a method to provide the
most recent full backup before a given snapshot.
If there is no last-common-snapshot, then we need to
find the most-recent-full-backup before the one selected
to restore, and then all of the snapshots inbetween.
* Prototype:
ZFSBackup.restore(self, snapshot_name=None, force_full=False,
start=None)
* If start is specified, use that as the starting snapshot.
* If snapshot_name is specified, use that as the snapshot to
restore to. If snapshot_name=None, then restore to the
latest snapshot.
HOW TO VERIFY
* ZFS: nothing to do.
* ZFS-over-SSH: Verify datasets exist?
* Directory: ensure all listed chunk files exist.
* S3: Same as Directory, plus clear up any incomplete multipart uploads