# 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 }