Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
backupninja
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Model registry
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
lyz
backupninja
Commits
4ceb4f15
Commit
4ceb4f15
authored
18 years ago
by
micah
Browse files
Options
Downloads
Patches
Plain Diff
Added rhatto's updated rub handler, not removing rsnap now, will probably want to do that
later
parent
7debcd46
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
handlers/rub
+171
-41
171 additions, 41 deletions
handlers/rub
with
171 additions
and
41 deletions
handlers/rub
+
171
−
41
View file @
4ceb4f15
...
@@ -5,8 +5,9 @@
...
@@ -5,8 +5,9 @@
# http://www.mikerubel.org/computers/rsync_snapshots/
# http://www.mikerubel.org/computers/rsync_snapshots/
#
#
# feedback: rhatto at riseup.net | gpl
# feedback: rhatto at riseup.net | gpl
# lot of enhancements grabbed from "rsnap" handler by paulv at bikkel.org
#
#
#
c
onfig file options
#
C
onfig file options
# -------------------
# -------------------
#
#
# [general]
# [general]
...
@@ -18,23 +19,49 @@
...
@@ -18,23 +19,49 @@
# backupdir = folder relative do $mountpoint where the backup should be stored
# backupdir = folder relative do $mountpoint where the backup should be stored
# days = number of backup increments (min = 5)
# days = number of backup increments (min = 5)
# lockfile = lockfile to be kept during backup execution
# lockfile = lockfile to be kept during backup execution
# enable_mv_timestamp_bug = set to "yes" if your system isnt handling timestamps correctly
# tmp = temp folder
#
#
# [source]
# [source]
# from = local or remote
# testconnect = when "yes", test the connection for a remote source before backup
# include = include folder on backup
# include = include folder on backup
# exclude = exclude folder on backup
# exclude = exclude folder on backup
# from = local or remote
# ssh = ssh command line (remote only)
# ssh = ssh command line (remote only)
# rsync = rsync command line
# rsync = rsync program
# rsync_options = rsync command options
# exclude_vserver = vserver-name (valid only if vservers = yes on backupninja.conf)
# exclude_vserver = vserver-name (valid only if vservers = yes on backupninja.conf)
# numericids = when set to 1, use numeric ids instead of user/group mappings on rsync
# compress = if set to 1, compress data on rsync (remote source only)
# bandwidthlimit = set a badnwidth limit in kbps (remote source only)
# remote_rsync = remove rsync program (remote source only)
#
#
# [services]
# [services]
# initscripts = absolute path where scripts are located
# initscripts = absolute path where scripts are located
# service = script name to be stoped at the begining of the backup and started at its end
# service = script name to be stoped at the begining of the backup and started at its end
#
#
# You can also specify some system comands:
#
# [system]
# rm = rm command
# cp = cp command
# touch = touch command
# mv = mv command
# fsck = fsck command
#
# You dont need to manually specify vservers using "include = /vservers".
# You dont need to manually specify vservers using "include = /vservers".
# They are automatically back
ed-
up if vserver is set to "yes" on you
r
backupninja.conf.
# They are automatically backup
ed
if vserver is set to "yes" on you backupninja.conf.
#
#
# config file evaluation
setsection system
getconf rm rm
getconf cp cp
getconf touch touch
getconf mv mv
getconf fsck fsck
setsection general
setsection general
getconf log /var/log/backupninja-rub.log
getconf log /var/log/backupninja-rub.log
getconf partition
getconf partition
...
@@ -45,82 +72,173 @@ getconf backupdir
...
@@ -45,82 +72,173 @@ getconf backupdir
getconf rotate
getconf rotate
getconf days
getconf days
getconf lockfile
getconf lockfile
getconf nicelevel 0
getconf enable_mv_timestamp_bug no
getconf tmp /tmp
setsection source
setsection source
getconf from local
getconf from local
getconf rsync "rsync -av --delete"
getconf testconnect no
getconf rsync $RSYNC
getconf rsync_options "-av --delete"
getconf ssh ssh
getconf ssh ssh
getconf user
getconf user
getconf host
getconf host
getconf include
getconf include
getconf exclude
getconf exclude
getconf exclude_vserver
getconf exclude_vserver
getconf numericids 0
getconf compress 0
getconf bandwidthlimit
getconf remote_rsync rsync
setsection services
setsection services
getconf initscripts
getconf initscripts
getconf service
getconf service
# function definitions
function rotate {
# TODO: force to an absolute path
if [[ "$2" < 4 ]]; then
error "Rotate: minimum of 4 rotations"
exit 1
fi
if [ -d $1.$2 ]; then
$nice $mv $1.$2 $1.tmp
fi
for ((n=`echo "$2 - 1" | bc`; n >= 0; n--)); do
if [ -d $1.$n ]; then
dest=`echo "$n + 1" | bc`
$nice $mv $1.$n $1.$dest
$touch $1.$dest
fi
done
if [ -d $1.tmp ]; then
$nice $mv $1.tmp $1.0
fi
if [ -d $1.1 ]; then
$nice $cp -alf $1.1/. $1.0
fi
}
function move_files {
ref=$tmp/makesnapshot-mymv-$$;
$touch -r $1 $ref;
$mv $1 $2;
$touch -r $ref $2;
$rm $ref;
}
backupdir="$mountpoint/$backupdir"
backupdir="$mountpoint/$backupdir"
# does $backupdir exists?
if [ ! -d "$backupdir" ]; then
if [ ! -d "$backupdir" ]; then
error "Backupdir $backupdir does not exist"
error "Backupdir $backupdir does not exist"
exit 1
exit 1
fi
fi
# setup number of increments
if [ -z "$days" ]; then
if [ -z "$days" ]; then
keep="4"
keep="4"
else
else
keep="`echo $days - 1 | bc -l`"
keep="`echo $days - 1 | bc -l`"
fi
fi
# lockfile setup
if [ ! -z "$lockfile" ]; then
if [ ! -z "$lockfile" ]; then
touch $lockfile || warning "Could not create lockfile $lockfile"
$
touch $lockfile || warning "Could not create lockfile $lockfile"
fi
fi
for path in $exclude; do
# nicelevel setup
EXCLUDES="$EXCLUDES --exclude=$path"
done
if [ ! -z "$service" ]; then
if [ ! -z "$nicelevel" ]; then
for daemon in $service; do
nice="nice -n $nicelevel"
info "Stopping service $daemon..."
else
$initscripts/$daemon stop
nice=""
done
fi
fi
function rotate {
# connection test
# please use an absolute path
if [[ "$2" < 4 ]]; then
if [ "$from" == "remote" ] && [ "$testconnect" == "yes" ]; then
error "Rotate: minimum of 4 rotations"
debug "$ssh -o PasswordAuthentication=no $user@$host 'echo -n 1'"
exit 1
result=`ssh -o PasswordAuthentication=no $user@$host 'echo -n 1'`
if [ "$result" != "1" ]; then
fatal "Can't connect to $host as $user."
else
debug "Connected to $srchost successfully"
fi
fi
fi
if [ -d $1.$2 ]; then
# rsync options for local sources
mv $1.$2 $1.tmp
if [ "$from" == "local" ]; then
rsync_local_options="$rsync_options"
if [ ! -z "$numericids" ]; then
rsync_local_options="$rsync_local_options --numeric-ids "
fi
fi
for ((n=`echo "$2 - 1" | bc`; n >= 0; n--)); do
fi
if [ -d $1.$n ]; then
dest=`echo "$n + 1" | bc`
mv $1.$n $1.$dest
touch $1.$dest
fi
done
if [ -d $1.tmp ]; then
# rsync options for remote sources
mv $1.tmp $1.0
if [ "$from" == "remote" ]; then
rsync_remote_options="$rsync_options --rsync-path=$remote_rsync"
if [ "$compress" == "1" ]; then
rsync_remote_options="$rsync_remote_options --compress"
fi
fi
if [ -d $1.1
]; then
fi [ ! -z "$bandwidthlimit"
]; then
cp -alf $1.1/. $1.0
rsync_remote_options="$rsync_remote_options --bwlimit=$bandwidthlimit"
fi
fi
}
if [ ! -z "$numericids" ]; then
rsync_remote_options="$rsync_remote_options --numeric-ids"
fi
fi
# set mv procedure
if [ $enable_mv_timestamp_bug == "yes" ]; then
mv=move_files
fi
# set excludes
for path in $exclude; do
EXCLUDES="$EXCLUDES --exclude=$path"
done
# stop services
if [ ! -z "$service" ]; then
for daemon in $service; do
info "Stopping service $daemon..."
$initscripts/$daemon stop
done
fi
echo "Starting backup at `date`" >> $log
echo "Starting backup at `date`" >> $log
# mount backup destination folder as read-write
if [ "$read_only" == "1" ] || [ "$read_only" == "yes" ]; then
if [ "$read_only" == "1" ] || [ "$read_only" == "yes" ]; then
if [ -d "$mountpoint" ]; then
if [ -d "$mountpoint" ]; then
mount -o remount,rw $mountpoint
mount -o remount,rw $mountpoint
...
@@ -131,6 +249,8 @@ if [ "$read_only" == "1" ] || [ "$read_only" == "yes" ]; then
...
@@ -131,6 +249,8 @@ if [ "$read_only" == "1" ] || [ "$read_only" == "yes" ]; then
fi
fi
fi
fi
# add vservers to included folders
if [ "$vservers_are_available" == "yes" ]; then
if [ "$vservers_are_available" == "yes" ]; then
# sane permission on backup
# sane permission on backup
...
@@ -153,6 +273,8 @@ if [ "$vservers_are_available" == "yes" ]; then
...
@@ -153,6 +273,8 @@ if [ "$vservers_are_available" == "yes" ]; then
done
done
fi
fi
# the backup procedure
for SECTION in $include; do
for SECTION in $include; do
section="`basename $SECTION`"
section="`basename $SECTION`"
...
@@ -167,8 +289,8 @@ for SECTION in $include; do
...
@@ -167,8 +289,8 @@ for SECTION in $include; do
info "Syncing $SECTION on $backupdir/$SECTION/$section.0..."
info "Syncing $SECTION on $backupdir/$SECTION/$section.0..."
if [ "$from" == "local" ]; then
if [ "$from" == "local" ]; then
debug $rsync $EXCLUDES /$SECTION/ $backupdir/$SECTION/$section.0/
debug $rsync
$rsync_local_options
$EXCLUDES /$SECTION/ $backupdir/$SECTION/$section.0/
$
rsync
$EXCLUDES /$SECTION/ $backupdir/$SECTION/$section.0/ >> $log
$
nice $rsync $rsync_local_options
$EXCLUDES /$SECTION/ $backupdir/$SECTION/$section.0/ >> $log
if [ "$?" != "0" ]; then
if [ "$?" != "0" ]; then
warning "Rsync error when trying to transfer $SECTION"
warning "Rsync error when trying to transfer $SECTION"
fi
fi
...
@@ -177,8 +299,8 @@ for SECTION in $include; do
...
@@ -177,8 +299,8 @@ for SECTION in $include; do
error "Config file error: either user or host was not specified"
error "Config file error: either user or host was not specified"
exit 1
exit 1
else
else
debug $
rsync
$EXCLUDES -e "$ssh" $user@$host:/$SECTION/ $backupdir/$SECTION/$section.0
debug $
nice $rsync $rsync_remote_options
$EXCLUDES -e "$ssh" $user@$host:/$SECTION/ $backupdir/$SECTION/$section.0
$
rsync
$EXCLUDES -e "$ssh" $user@$host:/$SECTION/ $backupdir/$SECTION/$section.0 >> $log
$
nice $rsync $rsync_remote_options
$EXCLUDES -e "$ssh" $user@$host:/$SECTION/ $backupdir/$SECTION/$section.0 >> $log
if [ "$?" != "0" ]; then
if [ "$?" != "0" ]; then
warning "Rsync error when trying to transfer $SECTION"
warning "Rsync error when trying to transfer $SECTION"
fi
fi
...
@@ -188,24 +310,30 @@ for SECTION in $include; do
...
@@ -188,24 +310,30 @@ for SECTION in $include; do
exit 1
exit 1
fi
fi
touch $backupdir/$SECTION/$section.0
$
touch $backupdir/$SECTION/$section.0
done
done
# remount backup destination as read-only
if [ "$read_only" == "1" ] || [ "$read_only" == "yes" ]; then
if [ "$read_only" == "1" ] || [ "$read_only" == "yes" ]; then
mount -o remount,ro $mountpoint
mount -o remount,ro $mountpoint
fi
fi
# check partition for errors
if [ "$fsck" == "1" ] || [ "$fsck" == "yes" ]; then
if [ "$fsck" == "1" ] || [ "$fsck" == "yes" ]; then
umount $mountpoint
umount $mountpoint
if (($?)); then
if (($?)); then
warning "Could not umount $mountpoint to run fsck"
warning "Could not umount $mountpoint to run fsck"
else
else
fsck -v -y $partition >> $log
$nice $
fsck -v -y $partition >> $log
mount $mountpoint
mount $mountpoint
fi
fi
fi
fi
# restart services
if [ ! -z "$service" ]; then
if [ ! -z "$service" ]; then
for daemon in $service; do
for daemon in $service; do
info "Starting service $daemon..."
info "Starting service $daemon..."
...
@@ -213,8 +341,10 @@ if [ ! -z "$service" ]; then
...
@@ -213,8 +341,10 @@ if [ ! -z "$service" ]; then
done
done
fi
fi
# removes the lockfile
if [ ! -z "$lockfile" ]; then
if [ ! -z "$lockfile" ]; then
rm $lockfile || warning "Could not remove lockfile $lockfile"
$
rm $lockfile || warning "Could not remove lockfile $lockfile"
fi
fi
echo "Finnishing backup at `date`" >> $log
echo "Finnishing backup at `date`" >> $log
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment