]> git.frykholm.com Git - butterbackup.git/commitdiff
Updated documentation.
authorMikael Frykholm <mikael@frykholm.com>
Sun, 5 Aug 2012 09:24:32 +0000 (11:24 +0200)
committerMikael Frykholm <mikael@frykholm.com>
Sun, 5 Aug 2012 09:24:32 +0000 (11:24 +0200)
Change directory layout of subvolume and snapshots to avoid having recursive snapshots.

README.md
TODO
butterbackup.py

index ce840f16489bdd51df2230d878ca15a73f80ec2c..84d6de0fe7e989e2ab41dd19c03de594adc00085 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,4 +1,14 @@
 butterbackup
 ============
 
-Butterbackup is a backup system which stores snapshots in btrfs on a central server. A web gui allows for simple restore of files. 
\ No newline at end of file
+Butterbackup is a backup system which stores snapshots in btrfs on a central server. A web gui allows for simple restore of files. 
+
+For now it is rather crude. To get started backing up some manual work is needed.
+Create /etc/butterbackup
+# echo "--exclude /tmp --exclude /proc --exclude /sys --exclude /dev" > /etc/butterbackup/machine1.example.com
+# cp /etc/butterbackup/machine1.example.com /etc/butterbackup/machine2.example.com
+# ssh-copy-id root@machine1.example.com
+# ssh-copy-id root@machine1.example.com
+# mkdir /mnt/data2
+# mkfs.btrfs /dev/sdb1
+# mount /dev/sdb1 /mnt/data2  #hardcoded for now
\ No newline at end of file
diff --git a/TODO b/TODO
index 95c4bb151e2f3312b2e6400e52670b4a02642c76..0cb193c6e3dae284c10e04f2c8c6d95d44e667f9 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1 +1,2 @@
-check for rsync return status
+Make debian packages
+Make initial setup a bit nicer
\ No newline at end of file
index a049efc0d9b66465badadaf134da2375bcd27b9b..ccf6229473a99c46fda0fd470a583a3034ae3482 100755 (executable)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python3
 import os
 import sys
-from subprocess import check_call
+from subprocess import check_call, CalledProcessError
 import shlex
 import datetime
 class BackupRunner():
@@ -20,28 +20,36 @@ class BackupRunner():
             fp.close()
 
     def backup_host(self, host, host_config):
-        subvol_dir = os.path.join(self.dest_dir, host)
-        dest_dir = os.path.join(subvol_dir, "latest")
-        if not os.path.exists(subvol_dir):
+        host_dir = os.path.join(self.dest_dir, host)
+        subvol_dir = os.path.join(host_dir, "latest")
+        if not os.path.exists(host_dir):
             print("New host",host,".")
+            os.makedir(host_dir)
+        if not os.path.exists(subvol_dir):
             try:
                 check_call(shlex.split("btrfs subvol create %s"% subvol_dir))
-            except subprocess.CalledProcessError as ex:
+            except CalledProcessError as ex:
                 print("Failed to create subvol! Aborting backup.")
                 return() 
-            os.makedirs(dest_dir)
-        command = ("rsync --timeout=10 -a --numeric-ids --delete --delete-excluded --human-readable --inplace ")
+            
+        command = ("rsync -a --acls --xattrs --whole-file --numeric-ids --delete --delete-excluded --human-readable --inplace ")
         excludes = host_config.readline()[:-1]
         try:
-            check_call(shlex.split(command + excludes + " root@%s:/ "%(host) + dest_dir))
-        except subprocess.CalledProcessError as ex:
-            if ex.returncode not in (30, 255):
-                print("Rsync did not transfer anything, skipping snapshot.")
+            check_call(shlex.split(command + excludes + " root@%s:/ "%(host) + subvol_dir))
+        except CalledProcessError as ex:
+            if ex.returncode not in (12, 30, 255):
+                print("Rsync did not transfer anything from %s, skipping snapshot."%host)
                 return()
         todays_date = datetime.datetime.now().date().strftime("%F")
+        if os.path.exists(os.path.join(host_dir, todays_date)):
+            #There is a snapshot for today, removing it and creating a new one
+            try:
+                check_call(shlex.split("btrfs subvol delete %s"%(os.path.join(host_dir, todays_date))))
+            except CalledProcessError as ex: 
+                pass    
         try:
-            check_call(shlex.split("btrfs subvol snapshot %s %s"%(subvol_dir,os.path.join(subvol_dir, todays_date))))
-        except subprocess.CalledProcessError as ex: 
+            check_call(shlex.split("btrfs subvol snapshot -r %s %s"%(subvol_dir,os.path.join(host_dir, todays_date))))
+        except CalledProcessError as ex: 
             pass
 
 if __name__ == "__main__":