Last active
October 7, 2015 12:17
-
-
Save lo48576/3163282 to your computer and use it in GitHub Desktop.
動作中のLinuxシステムの/が含まれるパーティションのバックアップ。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# 動作中のLinuxシステムの/が含まれるパーティションのバックアップ。/data1/はシステムとは別のパーティション(可能なら別の物理メディア)にあるべき。 | |
mnt_root="/mnt/root" | |
hostname="`hostname`" | |
get_mnt_backup() { | |
echo "/data1/backup/${1}/root" | |
} | |
usage() { | |
echo "usage:`basename "$0"` backup" | |
echo " back up / to `get_mnt_backup "${hostname}"`/backup0" | |
echo " `basename "$0"` restore <hostname> <dst_path>" | |
echo " restore most recent backup to <dst_path>" | |
echo " `basename "$0"` archive <date> <backup_num>" | |
echo " make archive of backup <backup_num>" | |
} | |
complete_func() { | |
# beep -f 784 -n -f 1000 -n -f 1568 | |
echo "done." | |
} | |
backup_exec() { | |
mnt_backup="`get_mnt_backup "${hostname}"`" | |
echo "backup mode" | |
echo "hostname: ${hostname}" | |
echo "dest: ${mnt_backup}/backup0" | |
mount -o bind / "$mnt_root" | |
rm -rf "${mnt_backup}/backup4" | |
echo "rm done." | |
mv "${mnt_backup}/backup3" "${mnt_backup}/backup4" | |
mv "${mnt_backup}/backup2" "${mnt_backup}/backup3" | |
mv "${mnt_backup}/backup1" "${mnt_backup}/backup2" | |
mv "${mnt_backup}/backup0" "${mnt_backup}/backup1" | |
echo "mv done." | |
# rsync -a --delete --exclude='/tmp/**' --exclude='/var/tmp/portage/**' --exclude='/usr/portage/packages/**' --exclude="/var/backups" --exclude="/user_tmp" --link-dest="${mnt_backup}/backup1" "${mnt_root}/" "${mnt_backup}/backup0/" | |
rsync -a --delete --link-dest="${mnt_backup}/backup1" --exclude='/var/tmp/portage/**' --exclude='/usr/portage/packages/**' --exclude="/var/backups" "/bin" "/boot" "${mnt_root}/dev" "/etc" "${mnt_root}/home" "/lib" "/lib32" "/lib64" "${mnt_root}/media" "${mnt_root}/mnt" "/opt" "${mnt_root}/proc" "/root" "${mnt_root}/run" "/sbin" "${mnt_root}/sys" "/usr" "/var" "${mnt_backup}/backup0/" | |
echo "rsync done." | |
umount -l "$mnt_root" | |
complete_func | |
} | |
backup_restore() { | |
hostname="$1" | |
src_backup="`get_mnt_backup "${hostname}"`/backup0" | |
dst_root="$2" | |
echo "restore mode" | |
echo "hostname: ${hostname}" | |
echo "source: ${src_backup}" | |
echo "dest: ${dst_root}" | |
countdown_5s | |
sudo rsync -a --delete "${src_backup}/" "${dst_root}/" | |
complete_func | |
} | |
make_archive() { | |
DATE="$1" | |
NUM="${2:-0}" | |
mnt_backup="`get_mnt_backup "${hostname}"`" | |
ARCHIVE_BASENAME="backup_${hostname}_root_${DATE}" | |
ARCHIVE_DIR="/mars/backup/kaputnik-gentoo/${DATE}" | |
SRC_DIR="${mnt_backup}/backup${NUM}/" | |
cd "${SRC_DIR}" | |
mkdir "${ARCHIVE_DIR}" | |
echo "start..." | |
tar --use-compress-program=pbzip2 --exclude-from ../tar_backup_exclude -cvpf "${ARCHIVE_DIR}/${ARCHIVE_BASENAME}.tar.bz2" . | tee "${ARCHIVE_DIR}/${ARCHIVE_BASENAME}_filelist" | pbzip2 --stdout -9 >"${ARCHIVE_DIR}/${ARCHIVE_BASENAME}.bz2" | |
echo "done." | |
} | |
countdown_5s() { | |
echo -n "countdown: 5..." >&2 | |
sleep 1 | |
echo -n " 4..." >&2 | |
sleep 1 | |
echo -n " 3..." >&2 | |
sleep 1 | |
echo -n " 2..." >&2 | |
sleep 1 | |
echo -n " 1..." >&2 | |
sleep 1 | |
echo -n " start." >&2 | |
} | |
echo "cmdline: $0 $@" | |
case ${1} in | |
backup|restore|archive) | |
;; | |
*) | |
usage | |
exit 0 | |
;; | |
esac | |
UID_="`id -u`" | |
case ${UID_} in | |
0|999) | |
# super user | |
# 999: ubuntu live cd user | |
case ${1} in | |
backup) | |
backup_exec | |
;; | |
restore) | |
backup_restore "$2" "$3" | |
;; | |
archive) | |
make_archive "$2" "$3" | |
;; | |
esac | |
;; | |
*) | |
# not super user | |
# change to super user | |
echo "UID: ${UID_}" | |
exec sudo $0 "$@" | |
;; | |
esac | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# 動作中のLinuxシステムの/が含まれるパーティションのバックアップ。/saturnはシステムとは別の物理メディアのZFSファイルシステム。 | |
mnt_root="/mnt/root" | |
hostname="`hostname`" | |
datetime="`date '+%Y%m%d-%H%M%S'`" | |
backup_subdir="root" | |
# rate_limit: [Kbps] | |
# 1250Kbps == 10MB/s | |
#rate_limit="--bwlimit=600" | |
rate_limit="" | |
get_backup_dest() { | |
echo "/saturn/backups/backup_${1}" | |
} | |
get_backup_dest_zfs() { | |
echo "saturn/backups/backup_${1}" | |
} | |
iecho() { | |
echo "$@" | |
} >&2 | |
usage() { | |
echo "usage:`basename "$0"` backup [--snapshot]" | |
echo " back up / to `get_backup_dest "${hostname}"`/root ." | |
echo " `basename "$0"` restore <hostname> <dst_path>" | |
echo " restore most recent backup to <dst_path>." | |
#echo " `basename "$0"` archive <datetime> <backup_dir>" | |
echo " `basename "$0"` archive <datetime>" | |
echo " make archive of backup which was made on <datetime>." | |
} | |
complete_func() { | |
# beep -f 784 -n -f 1000 -n -f 1568 | |
iecho "done." | |
} | |
backup_exec() { | |
option_snapshot="$1" | |
backup_dest="`get_backup_dest "${hostname}"`" | |
backup_dest_zfs="`get_backup_dest_zfs "${hostname}"`" | |
iecho "backup mode" | |
iecho "hostname: ${hostname}" | |
iecho "dest: ${backup_dest}/${backup_subdir}/" | |
iecho "snapshot: ${backup_dest_zfs}@${datetime}" | |
mount -o bind / "$mnt_root" | |
# change this line for your environment. | |
# #rsync -av --delete --exclude='/tmp/**' --exclude='/var/tmp/portage/**' --exclude='/usr/portage/packages/**' --exclude="/var/backups" --exclude="/user_tmp" --link-dest="${mnt_backup}/backup1" "${mnt_root}/" "${mnt_backup}/backup0/" | |
rsync -av --delete --inplace ${rate_limit} --exclude='/var/tmp/portage/**' --exclude='/usr/portage/packages/**' --exclude="/var/backups" --exclude="/var/cache/squid/**" "/bin" "/boot" "${mnt_root}/dev" "/etc" "${mnt_root}/home" "/lib" "/lib32" "/lib64" "${mnt_root}/media" "${mnt_root}/mnt" "/opt" "${mnt_root}/proc" "/root" "${mnt_root}/run" "/sbin" "${mnt_root}/sys" "/usr" "/var" "${backup_dest}/${backup_subdir}/" | |
iecho "rsync done." | |
# take a snapshot | |
if [ "x${option_snapshot}" == "x--snapshot" ] ; then | |
zfs snapshot "${backup_dest_zfs}@${datetime}" | |
iecho "zfs snapshot done." | |
fi | |
umount -l "$mnt_root" | |
complete_func | |
} | |
backup_restore() { | |
hostname="$1" | |
src_backup="`get_mnt_backup "${hostname}"`" | |
dst_root="$2" | |
iecho "restore mode" | |
iecho "hostname: ${hostname}" | |
iecho "source: ${src_backup}" | |
iecho "dest: ${dst_root}" | |
countdown_5s | |
sudo rsync -av ${rate_limit} --numeric-ids --delete "${src_backup}/" "${dst_root}/" | |
complete_func | |
} | |
make_archive() { | |
# FIXME | |
DATETIME_SPECIFIED="$1" | |
#NUM="${2:-0}" | |
mnt_backup="`get_mnt_backup "${hostname}"`" | |
ARCHIVE_BASENAME="backup_${hostname}_root_${DATETIME_SPECIFIED}" | |
ARCHIVE_DIR="/mars/backup/kaputnik-gentoo/${DATETIME_SPECIFIED}" | |
SRC_DIR="${mnt_backup}/backup${NUM}/" | |
cd "${SRC_DIR}" | |
mkdir "${ARCHIVE_DIR}" | |
iecho "start..." | |
tar --use-compress-program=pbzip2 --exclude-from ../tar_backup_exclude -cvpf "${ARCHIVE_DIR}/${ARCHIVE_BASENAME}.tar.bz2" . | tee "${ARCHIVE_DIR}/${ARCHIVE_BASENAME}_filelist" | pbzip2 --stdout -9 >"${ARCHIVE_DIR}/${ARCHIVE_BASENAME}.bz2" | |
iecho "done." | |
} | |
countdown_5s() { | |
echo -n "countdown: 5..." | |
sleep 1 | |
echo -n " 4..." | |
sleep 1 | |
echo -n " 3..." | |
sleep 1 | |
echo -n " 2..." | |
sleep 1 | |
echo -n " 1..." | |
sleep 1 | |
echo " start." | |
} >&2 | |
echo "cmdline: $0 $@" | |
case ${1} in | |
backup|restore|archive) | |
;; | |
*) | |
usage | |
exit 0 | |
;; | |
esac | |
UID_="`id -u`" | |
case ${UID_} in | |
0|999) | |
# super user | |
# 999: ubuntu live cd user | |
case ${1} in | |
backup) | |
backup_exec "$2" | |
;; | |
restore) | |
backup_restore "$2" "$3" | |
;; | |
archive) | |
make_archive "$2" "$3" | |
;; | |
esac | |
;; | |
*) | |
# not super user | |
# change to super user | |
iecho "UID: ${UID_}" | |
exec sudo $0 "$@" | |
;; | |
esac | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment