modify gc layout

This commit is contained in:
bigeagle 2014-10-24 00:33:01 +08:00
parent d595af6755
commit b4bf5a6b97
2 changed files with 12 additions and 9 deletions

View File

@ -13,7 +13,8 @@ max_retry = 2
[btrfs] [btrfs]
service_dir = "{mirror_root}/_current/{mirror_name}" service_dir = "{mirror_root}/_current/{mirror_name}"
working_dir = "{mirror_root}/_working/{mirror_name}" working_dir = "{mirror_root}/_working/{mirror_name}"
gc_dir = "{mirror_root}/_gc/{mirror_name}_{{timestamp}}" gc_root = "{mirror_root}/_garbage/"
gc_dir = "{mirror_root}/_garbage/_gc_{mirror_name}_{{timestamp}}"
[[mirrors]] [[mirrors]]
name = "archlinux" name = "archlinux"

View File

@ -3,12 +3,12 @@
import re import re
import sh import sh
import os import os
import ConfigParser
import argparse import argparse
import toml
if __name__ == "__main__": if __name__ == "__main__":
parser = argparse.ArgumentParser(prog="tunasync_snapshot_gc") parser = argparse.ArgumentParser(prog="tunasync_snapshot_gc")
parser.add_argument("--max-level", type=int, default=2, help="max walk level to find garbage snapshots") parser.add_argument("--max-level", type=int, default=1, help="max walk level to find garbage snapshots")
parser.add_argument("--pattern", default=r"^_gc_\d+", help="pattern to match garbage snapshots") parser.add_argument("--pattern", default=r"^_gc_\d+", help="pattern to match garbage snapshots")
parser.add_argument("-c", "--config", help="tunasync config file") parser.add_argument("-c", "--config", help="tunasync config file")
@ -17,7 +17,7 @@ if __name__ == "__main__":
pattern = re.compile(args.pattern) pattern = re.compile(args.pattern)
def walk(_dir, level=1): def walk(_dir, level=1):
if level > 2: if level > args.max_level:
return return
for fname in os.listdir(_dir): for fname in os.listdir(_dir):
@ -26,16 +26,18 @@ if __name__ == "__main__":
if pattern.match(fname): if pattern.match(fname):
print("GC: {}".format(abs_fname)) print("GC: {}".format(abs_fname))
try: try:
ret = sh.btrfs("subvolume", "delete", abs_fname) sh.btrfs("subvolume", "delete", abs_fname)
except sh.ErrorReturnCode, e: except sh.ErrorReturnCode, e:
print("Error: {}".format(e.stderr)) print("Error: {}".format(e.stderr))
else: else:
walk(abs_fname, level+1) walk(abs_fname, level+1)
settings = ConfigParser.ConfigParser() with open(args.config) as f:
settings.read(args.config) settings = toml.loads(f.read())
mirror_root = settings.get("global", "mirror_root")
walk(mirror_root) mirror_root = settings["global"]["mirror_root"]
gc_root = settings["btrfs"]["gc_root"].format(mirror_root=mirror_root)
walk(gc_root)
# vim: ts=4 sw=4 sts=4 expandtab # vim: ts=4 sw=4 sts=4 expandtab