User:Az990tony/backup: Difference between revisions

From OLPC
Jump to navigation Jump to search
(New page: This is the /etc/rsnapshot.conf I used. ################################################# # rsnapshot.conf - rsnapshot configuration file # ############################################...)
 
No edit summary
Line 1: Line 1:
== Overview ==
In my test environment, I have two machines.

+------------+ +------------+ +-------------------+
| Internet |--------- | XF (squid) |--------| XS (schoolserver) |
| Modem | | | | LAMP+Moodle |
+------------+ +------------+ +-------------------+

In this backup scheme:

* XF will backup its own files and files from XS
* XS will backup its own files and files from XF

This backup scheme is based on rsnapshot. See http://rsnapshot.org for details.

Under /library/.snapshots/ there will be the following directories
* hourly.0 # most recent backup
* hourly.1 # previous backup
* hourly.2 # backup before that
* daily.0 # yesterday's hourly.0
* daily.1 # hourly.0 of the day before that
* daily.2
* daily.3
* daily.4
* weekly.0 # hourly.0 of last Monday's backup
* weekly.1 # hourly.0 of previous Monday
* weekly.2
* weekly.3
* monthly.0 # first backup of this month
* monthly.1 # first backup of last month
* monthly.2 # first backup of month before that

The backups use hard links, so if not much changes, the total amount of space is
actually quite small.

== XF (squid/filter/cache) ==

Here are the files and directories involved on XF

* /root/.ssh/xfkey # this is a key generated on XF with no passphrase
* /root/.ssh/xskey.pub # this is a key generated on XS with no passphrase
* /root/bin/remote-xs.sh # this script will invoke backup-xs.sh script on XS
* /root/bin/backup-xf.sh # XS remote-xf.sh will invoke this script
* /etc/rsnapshot.conf # rsnapshot performs rsync over ssh connection
* /library/.snapshots/ # all of the backups will be kept here
* /library/.snapshots/hourly.0/local-xf/ # backups of local XF taken here
* /library/.snapshots/hourly.0/remote-xs/ # backups of remote XS taken here over SSH

=== rsnapshot.conf ===

This is the /etc/rsnapshot.conf I used.
This is the /etc/rsnapshot.conf I used.


Line 13: Line 63:
# wrong: /home #
# wrong: /home #
# #
# #
# updated by Tony Pearson 02/26/2008 #
# updated by Tony Pearson 02/26/2008 xf #
#################################################
#################################################
Line 60: Line 110:
# Uncomment this to enable remote ssh backups over rsync.
# Uncomment this to enable remote ssh backups over rsync.
#
#
#cmd_ssh /usr/bin/ssh
cmd_ssh /usr/bin/ssh
# Comment this out to disable syslog support.
# Comment this out to disable syslog support.
Line 144: Line 194:
# ssh has no args passed by default, but you can specify some here.
# ssh has no args passed by default, but you can specify some here.
#
#
# xfkey must have been generated on this system with no passphrase
#ssh_args -p 22
ssh_args -i /root/.ssh/xfkey
# Default arguments for the "du" program (for disk space reporting).
# Default arguments for the "du" program (for disk space reporting).
Line 201: Line 252:
# LOCALHOST
# LOCALHOST
backup_script /root/bin/backup-xf.sh unused0
backup /home/ localhost-xf/
backup /root/ localhost-xf/
backup /home/ local-xf/
backup /etc/ localhost-xf/
backup /root/ local-xf/
#backup /usr/ localhost-xf/
backup /etc/ local-xf/
backup /var/log/ localhost-xf/
#backup /usr/ local-xf/
#backup /etc/passwd localhost/
backup /var/log/ local-xf/
#backup /home/foo/My Documents/ localhost/
#backup /foo/bar/ localhost/ one_fs=1, rsync_short_args=-urltvpog
#backup_script /usr/local/bin/backup_pgsql.sh localhost/postgres/
# SCHOOLSERVER
# EXAMPLE.COM
#backup_script /bin/date "+ backup of example.com started at %c" unused1
backup_script /bin/date "+ backup of schoolserver started at %c" unused1
backup_script /root/bin/remote-xs.sh unused2
#backup root@example.com:/home/ example.com/ +rsync_long_args=--bwlimit=16,exclude=core
#backup root@example.com:/etc/ example.com/ exclude=mtab,exclude=core
backup root@schoolserver:/home/ remote-xs/
backup root@schoolserver:/root/ remote-xs/
#backup_script ssh root@example.com "mysqldump -A > /var/db/dump/mysql.sql"
#backup root@example.com:/var/db/dump/ example.com/
backup root@schoolserver:/etc/ remote-xs/
backup root@schoolserver:/var/log remote-xs/
#backup_script /bin/date "+ backup of example.com ended at %c" unused2
backup_script /bin/date "+ backup of schoolserver ended at %c" unused3
Here is my remote-xs.sh script (MIT license)
#!/bin/sh
# CVS.SOURCEFORGE.NET
#
#backup_script /usr/local/bin/backup_rsnapshot_cvsroot.sh rsnapshot.cvs.sourceforge.net/
# Copyright (c) 2008 Tony Pearson.
#
# RSYNC.SAMBA.ORG
# Licensed under the MIT license for contribution to the
#backup rsync://rsync.samba.org/rsyncftp/ rsync.samba.org/rsyncftp/
# One Laptop per Child (OLPC) foundation.
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation
# files (the "Software"), to deal in the Software without
# restriction, including without limitation the rights to use,
# copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following
# conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.
#
# For more information see the Open Source Initiative:
# http://www.opensource.org/licenses/mit-license.php
#
KEY="/root/.ssh/xfkey"
DEST="root@schoolserver"
ssh -i $KEY $DEST "/root/bin/backup-xs.sh"

Revision as of 14:50, 28 February 2008

Overview

In my test environment, I have two machines.

+------------+          +------------+        +-------------------+
| Internet   |--------- | XF (squid) |--------| XS (schoolserver) |
| Modem      |          |            |        | LAMP+Moodle       |
+------------+          +------------+        +-------------------+          

In this backup scheme:

  • XF will backup its own files and files from XS
  • XS will backup its own files and files from XF

This backup scheme is based on rsnapshot. See http://rsnapshot.org for details.

Under /library/.snapshots/ there will be the following directories

  • hourly.0 # most recent backup
  • hourly.1 # previous backup
  • hourly.2 # backup before that
  • daily.0 # yesterday's hourly.0
  • daily.1 # hourly.0 of the day before that
  • daily.2
  • daily.3
  • daily.4
  • weekly.0 # hourly.0 of last Monday's backup
  • weekly.1 # hourly.0 of previous Monday
  • weekly.2
  • weekly.3
  • monthly.0 # first backup of this month
  • monthly.1 # first backup of last month
  • monthly.2 # first backup of month before that

The backups use hard links, so if not much changes, the total amount of space is actually quite small.

XF (squid/filter/cache)

Here are the files and directories involved on XF

  • /root/.ssh/xfkey # this is a key generated on XF with no passphrase
  • /root/.ssh/xskey.pub # this is a key generated on XS with no passphrase
  • /root/bin/remote-xs.sh # this script will invoke backup-xs.sh script on XS
  • /root/bin/backup-xf.sh # XS remote-xf.sh will invoke this script
  • /etc/rsnapshot.conf # rsnapshot performs rsync over ssh connection
  • /library/.snapshots/ # all of the backups will be kept here
  • /library/.snapshots/hourly.0/local-xf/ # backups of local XF taken here
  • /library/.snapshots/hourly.0/remote-xs/ # backups of remote XS taken here over SSH

rsnapshot.conf

This is the /etc/rsnapshot.conf I used.

#################################################
# rsnapshot.conf - rsnapshot configuration file #
#################################################
#                                               #
# PLEASE BE AWARE OF THE FOLLOWING RULES:       #
#                                               #
# This file requires tabs between elements      #
#                                               #
# Directories require a trailing slash:         #
#   right: /home/                               #
#   wrong: /home                                #
#                                               #
# updated by Tony Pearson 02/26/2008 xf         #
#################################################

#######################
# CONFIG FILE VERSION #
#######################

config_version	1.2

###########################
# SNAPSHOT ROOT DIRECTORY #
###########################

# All snapshots will be stored under this root directory.
#
# /library is LVM with most space 
#
snapshot_root	/library/.snapshots/

# If no_create_root is enabled, rsnapshot will not automatically create the
# snapshot_root directory. This is particularly useful if you are backing
# up to removable media, such as a FireWire or USB drive.
#
#no_create_root	1

#################################
# EXTERNAL PROGRAM DEPENDENCIES #
#################################

# LINUX USERS:   Be sure to uncomment "cmd_cp". This gives you extra features.
# EVERYONE ELSE: Leave "cmd_cp" commented out for compatibility.
#
# See the README file or the man page for more details.
#
cmd_cp		/bin/cp

# uncomment this to use the rm program instead of the built-in perl routine.
#
cmd_rm		/bin/rm

# rsync must be enabled for anything to work. This is the only command that
# must be enabled.
#
cmd_rsync	/usr/bin/rsync

# Uncomment this to enable remote ssh backups over rsync.
#
cmd_ssh		/usr/bin/ssh

# Comment this out to disable syslog support.
#
cmd_logger	/usr/bin/logger

# Uncomment this to specify the path to "du" for disk usage checks.
# If you have an older version of "du", you may also want to check the
# "du_args" parameter below.
#
cmd_du		/usr/bin/du

# Uncomment this to specify the path to rsnapshot-diff.
#
# yum install rsnapshot put everything under /usr/bin
#
cmd_rsnapshot_diff	/usr/bin/rsnapshot-diff

# Specify the path to a script (and any optional arguments) to run right
# before rsnapshot syncs files
#
#cmd_preexec	/path/to/preexec/script

# Specify the path to a script (and any optional arguments) to run right
# after rsnapshot syncs files
#
#cmd_postexec	/path/to/postexec/script

#########################################
#           BACKUP INTERVALS            #
# Must be unique and in ascending order #
# i.e. hourly, daily, weekly, etc.      #
#########################################

interval	hourly	3
interval	daily	5
interval	weekly	4
interval	monthly	3

############################################
#              GLOBAL OPTIONS              #
# All are optional, with sensible defaults #
############################################

# Verbose level, 1 through 5.
# 1     Quiet           Print fatal errors only
# 2     Default         Print errors and warnings only
# 3     Verbose         Show equivalent shell commands being executed
# 4     Extra Verbose   Show extra verbose information
# 5     Debug mode      Everything
#
verbose		2

# Same as "verbose" above, but controls the amount of data sent to the
# logfile, if one is being used. The default is 3.
#
loglevel	3

# If you enable this, data will be written to the file you specify. The
# amount of data written is controlled by the "loglevel" parameter.
#
logfile	/var/log/rsnapshot

# If enabled, rsnapshot will write a lockfile to prevent two instances
# from running simultaneously (and messing up the snapshot_root).
# If you enable this, make sure the lockfile directory is not world
# writable. Otherwise anyone can prevent the program from running.
#
lockfile	/var/run/rsnapshot.pid

# Default rsync args. All rsync commands have at least these options set.
#
# -a 		archive mode
# -r 		recursive
# -x 		do not span LVM boundaries
# --delete      delete files that don't exist on source
# --relative    relative directory names
# --numeric-ids don't map uid/gid from user/group names
#
rsync_short_args	-arx
rsync_long_args	--delete --numeric-ids --relative 

# ssh has no args passed by default, but you can specify some here.
#
# xfkey must have been generated on this system with no passphrase
ssh_args	-i /root/.ssh/xfkey

# Default arguments for the "du" program (for disk space reporting).
# The GNU version of "du" is preferred. See the man page for more details.
# If your version of "du" doesn't support the -h flag, try -k flag instead.
#
#du_args	-csh

# If this is enabled, rsync won't span filesystem partitions within a
# backup point. This essentially passes the -x option to rsync.
# The default is 0 (off).
#
#one_fs		0

# The include and exclude parameters, if enabled, simply get passed directly
# to rsync. If you have multiple include/exclude patterns, put each one on a
# separate line. Please look up the --include and --exclude options in the
# rsync man page for more details on how to specify file name patterns. 
# 
#include	???
#include	???
#exclude	???
#exclude	???

# The include_file and exclude_file parameters, if enabled, simply get
# passed directly to rsync. Please look up the --include-from and
# --exclude-from options in the rsync man page for more details.
#
#include_file	/path/to/include/file
#exclude_file	/path/to/exclude/file

# If your version of rsync supports --link-dest, consider enable this.
# This is the best way to support special files (FIFOs, etc) cross-platform.
# The default is 0 (off).
#
link_dest	1	

# When sync_first is enabled, it changes the default behaviour of rsnapshot.
# Normally, when rsnapshot is called with its lowest interval
# (i.e.: "rsnapshot hourly"), it will sync files AND rotate the lowest
# intervals. With sync_first enabled, "rsnapshot sync" handles the file sync,
# and all interval calls simply rotate files. See the man page for more
# details. The default is 0 (off).
#
#sync_first	0

# If enabled, rsnapshot will move the oldest directory for each interval
# to [interval_name].delete, then it will remove the lockfile and delete
# that directory just before it exits. The default is 0 (off).
#
#use_lazy_deletes	0

###############################
### BACKUP POINTS / SCRIPTS ###
###############################

# LOCALHOST
backup_script		/root/bin/backup-xf.sh	unused0
backup	/home/		local-xf/
backup	/root/		local-xf/
backup	/etc/		local-xf/
#backup	/usr/		local-xf/
backup	/var/log/	local-xf/

# SCHOOLSERVER
backup_script	/bin/date "+ backup of schoolserver started at %c"	unused1
backup_script	/root/bin/remote-xs.sh		unused2
backup	root@schoolserver:/home/	remote-xs/
backup	root@schoolserver:/root/	remote-xs/
backup	root@schoolserver:/etc/		remote-xs/
backup	root@schoolserver:/var/log	remote-xs/
backup_script	/bin/date "+ backup of schoolserver ended  at %c"	unused3
	

Here is my remote-xs.sh script (MIT license)

#!/bin/sh
#
# Copyright (c) 2008 Tony Pearson.
#
# Licensed under the MIT license for contribution to the 
# One Laptop per Child (OLPC) foundation.
# 
# Permission is hereby granted, free of charge, to any person 
# obtaining a copy of this software and associated documentation 
# files (the "Software"), to deal in the Software without 
# restriction, including without limitation the rights to use, 
# copy, modify, merge, publish, distribute, sublicense, and/or sell 
# copies of the Software, and to permit persons to whom the 
# Software is furnished to do so, subject to the following 
# conditions: 
# 
# The above copyright notice and this permission notice shall be 
# included in all copies or substantial portions of the Software. 
# 
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
# OTHER DEALINGS IN THE SOFTWARE. 
# 
# For more information see the Open Source Initiative:
# http://www.opensource.org/licenses/mit-license.php
#
KEY="/root/.ssh/xfkey"
DEST="root@schoolserver"
ssh -i $KEY $DEST "/root/bin/backup-xs.sh"