aboutsummaryrefslogtreecommitdiff
path: root/lib/backup/s3.sh
diff options
context:
space:
mode:
Diffstat (limited to 'lib/backup/s3.sh')
-rw-r--r--lib/backup/s3.sh69
1 files changed, 69 insertions, 0 deletions
diff --git a/lib/backup/s3.sh b/lib/backup/s3.sh
new file mode 100644
index 0000000..e463e76
--- /dev/null
+++ b/lib/backup/s3.sh
@@ -0,0 +1,69 @@
+# The configuration variable "backup_bucket_name" must contain the name
+# of the s3 bucket to use.
+
+# Raw bucket is mounted to /mnt/s3backer
+test -z "$backup_mp_s3backer" && backup_mp_s3backer=/mnt/s3backer
+# The actual file system is mounted to /mnt/s3
+test -z "$backup_mp" && backup_mp_s3=/mnt/s3
+
+# This variable is populated by s3_mount and is used by s3_unmount to unmount
+# s3-backed file system.
+umount_list=""
+
+s3_mount() {
+ # Make sure both mountpoints exist
+ test -d $backup_mp_s3backer || mkdir $backup_mp_s3backer
+ test -d $backup_mp_s3 || mkdir $backup_mp_s3backer
+
+# Sample mount output, split into several lines:
+# http://finox-backup-fs.s3.amazonaws.com/ on /mnt/s3backer type fuse.s3backer
+# (rw,nosuid,nodev,allow_other,default_permissions)
+ set -- $(mount -tfuse.s3backer |
+ awk '/https?:\/\/'$backup_bucket_name'/ { print $3 }')
+ if test -z "$1"; then
+ $dry_run s3backer --accessFile=/root/.s3backer_passwd --vhost \
+ $backup_bucket_name $backup_mp_s3backer ||
+ abend 1 "unable to mount $backup_bucket_name"
+ umount_list="$backup_mp_s3backer"
+ else
+ backup_mp_s3backer=$1
+ fi
+ set -- $(mount | grep "^${backup_mp_s3backer}/file" | awk '{ print $3 }')
+ if test -z "$1"; then
+ case $(basename $0) in
+ restore) mountopt=",ro";;
+ backup) mountopt=",rw,data=writeback";;
+ s3mount) ;;
+ *) error "called as $0: assuming default mount options"
+ esac
+ # NOTE: For ext4 add the journal_async_commit option.
+ $dry_run mount -oloop$mountopt $backup_mp_s3backer/file $backup_mp_s3 ||
+ abend 1 "unable to mount $backup_mp_s3backer/file"
+ umount_list="$backup_mp_s3 $umount_list"
+ else
+ backup_mp_s3=$1
+ fi
+ epilogue_hook="s3_unmount $epilogue_hook"
+}
+
+s3_getmpoint()
+{
+ case $1 in
+ backer)
+ mount -tfuse.s3backer |
+ awk '/https?:\/\/'$backup_bucket_name'/ { print $3 }';;
+ s3)
+ mount | grep "^${backup_mp_s3backer}/file" | awk '{ print $3 }';;
+ *)
+ abent 1 "invalid usage of getmpoint"
+ esac
+}
+
+s3_unmount()
+{
+ for id in s3 backer
+ do
+ mpoint=$(s3_getmpoint $id)
+ test -n "$mpoint" && umount $mpoint
+ done
+}

Return to:

Send suggestions and report system problems to the System administrator.