diff --git a/virt-back b/virt-back index 3aa71b4..2487f21 100755 --- a/virt-back +++ b/virt-back @@ -124,7 +124,9 @@ def backup(doms): f.write(xml) # Updated regular expression to match file= and dev= within elements - disklist = re.findall(r"", xml, re.DOTALL) + disklist = re.findall( + r"", xml, re.DOTALL + ) logit("backup", "invoking backup for " + dom.name()) @@ -137,13 +139,24 @@ def backup(doms): if is_zfs_dataset(disk_source): # Handle ZFS dataset - zfs_dataset = disk_source[len('/dev/zvol/'):] if disk_source.startswith('/dev/zvol/') else disk_source + zfs_dataset = ( + disk_source[len("/dev/zvol/") :] + if disk_source.startswith("/dev/zvol/") + else disk_source + ) zfs_snapshot_base = f"{zfs_dataset}@backup-{TODAY}" zfs_snapshot = zfs_snapshot_base suffix = 1 # Increment snapshot name until an available name is found - while subprocess.run(["zfs", "list", zfs_snapshot], stdout=subprocess.PIPE, stderr=subprocess.PIPE).returncode == 0: + while ( + subprocess.run( + ["zfs", "list", zfs_snapshot], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ).returncode + == 0 + ): zfs_snapshot = f"{zfs_snapshot_base}-{suffix}" suffix += 1 @@ -152,7 +165,9 @@ def backup(doms): zfs_file += ".gz" # Create ZFS snapshot - logit("backup", f"creating ZFS snapshot {zfs_snapshot} for {dom.name()}") + logit( + "backup", f"creating ZFS snapshot {zfs_snapshot} for {dom.name()}" + ) try: subprocess.run(["zfs", "snapshot", zfs_snapshot], check=True) except subprocess.CalledProcessError as e: @@ -160,14 +175,23 @@ def backup(doms): continue # Send ZFS snapshot to file with optional compression - logit("backup", f"sending ZFS snapshot {zfs_snapshot} to {zfs_file} for {dom.name()}") + logit( + "backup", + f"sending ZFS snapshot {zfs_snapshot} to {zfs_file} for {dom.name()}", + ) try: with open(zfs_file, "wb") as f: if options.nogzip: - subprocess.run(["zfs", "send", zfs_snapshot], stdout=f, check=True) + subprocess.run( + ["zfs", "send", zfs_snapshot], stdout=f, check=True + ) else: - send_proc = subprocess.Popen(["zfs", "send", zfs_snapshot], stdout=subprocess.PIPE) - gzip_proc = subprocess.Popen(["gzip"], stdin=send_proc.stdout, stdout=f) + send_proc = subprocess.Popen( + ["zfs", "send", zfs_snapshot], stdout=subprocess.PIPE + ) + gzip_proc = subprocess.Popen( + ["gzip"], stdin=send_proc.stdout, stdout=f + ) send_proc.stdout.close() # Allow send_proc to receive a SIGPIPE if gzip_proc exits gzip_proc.communicate() except subprocess.CalledProcessError as e: @@ -222,7 +246,10 @@ def backup(doms): tar.add(zfs_file) # add zfs snapshot to tar remove(zfs_file) # cleanup tmp files else: - logit("error", f"ZFS snapshot file {zfs_file} not found for {dom.name()}") + logit( + "error", + f"ZFS snapshot file {zfs_file} not found for {dom.name()}", + ) else: disk_file = disk_source.split("/")[-1] disk_dest = path.join(options.backpath, disk_file) @@ -240,12 +267,14 @@ def is_zfs_dataset(disk_source): logit("backup", f"checking if {disk_source} is a ZFS dataset") try: # Extract the ZFS dataset name from the device path - if disk_source.startswith('/dev/zvol/'): - zfs_dataset = disk_source[len('/dev/zvol/'):] + if disk_source.startswith("/dev/zvol/"): + zfs_dataset = disk_source[len("/dev/zvol/") :] else: zfs_dataset = disk_source - result = subprocess.run(["zfs", "list", zfs_dataset], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + result = subprocess.run( + ["zfs", "list", zfs_dataset], stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) is_zfs = result.returncode == 0 logit("backup", f"{zfs_dataset} is {'a' if is_zfs else 'not a'} ZFS dataset") return is_zfs