Automatically create (incremental) backups of zfs snapshots on a file server.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.4 KiB

#!/usr/local/bin/python
import pathlib
import subprocess
from copy_snapshots_to_remote import get_member_name
SSH_KEY_FILE = "/mnt/Datenspeicher/snap-backup-dataset/backup_key"
SSH_REMOTE = "zfs_snap_backup@etha.cpi.imtek.uni-freiburg.de"
REMOTE_PATH = "zfs-backups"
ZFS_POOL = "Datenspeicher"
ZFS_ELAB_PREFIX = "elabfs-"
TMP_BACKUP_FOLDER = "/mnt/Datenspeicher/snap-backup-dataset/temporary-backups"
def remote_call(arguments):
""" makes runs an command on the remote backup server
:params arguments: list of command line arguments and parameters
:returns: string of the command output
:raises subprocess.CalledProcessError: if command has not an exit value of 0
"""
cmd = ["ssh", "-i", SSH_KEY_FILE, SSH_REMOTE]
cmd.extend(arguments)
result = subprocess.run(" ".join(cmd), check=True,
stdout=subprocess.PIPE,
universal_newlines=True, shell=True)
return result.stdout
def get_local_backup_members():
tmp_folder = pathlib.Path(TMP_BACKUP_FOLDER)
backups = (i for i in tmp_folder.iterdir() if i.suffix==".gz")
return {get_member_name(b.name) for b in backups}
def get_remote_checksums():
result = {}
for member in get_local_backup_members():
remote_path = f"{REMOTE_PATH}/{member}/\*"
cmd_result = remote_call(["sha256sum", remote_path])
print(cmd_result)
if __name__ == "__main__":
get_remote_checksums()