From d669127d2efaf9969b081fbaff47ff8938388750 Mon Sep 17 00:00:00 2001 From: Sergey Poznyakoff Date: Tue, 29 May 2012 13:02:40 +0300 Subject: Rename project to BEAM (Backup Easy And Manageable). --- lib/beam/s3.sh | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 lib/beam/s3.sh (limited to 'lib/beam/s3.sh') diff --git a/lib/beam/s3.sh b/lib/beam/s3.sh new file mode 100644 index 0000000..5f7235c --- /dev/null +++ b/lib/beam/s3.sh @@ -0,0 +1,85 @@ +# This file is part of BEAM -*- shell-script -*- +# Copyright (C) 2012 Sergey Poznyakoff +# +# BEAM is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# BEAM is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with BEAM. If not, see . + +# 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 $backup_s3backer_options \ + $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 + beam-restore|restore) mountopt=",ro";; + beam-backup|backup) mountopt=",rw,data=writeback";; + beam-s3) ;; + *) 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 +} -- cgit v1.2.1