From a5c642355acee74d0f03e46630b82654ce7c8a22 Mon Sep 17 00:00:00 2001 From: gobo72 Date: Sat, 8 Sep 2012 01:56:28 +0000 Subject: [PATCH] =?utf8?q?Ajout=20de=20scripts=20pour=20g=C3=A9rer=20les?= =?utf8?q?=20tape=20backups.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- stage2/hv-utilities/tape-backup/tape-backup | 91 +++++++++++++++++++ .../hv-utilities/tape-backup/tape-backup-mult | 87 ++++++++++++++++++ stage2/hv-utilities/tape-backup/tape-list | 75 +++++++++++++++ stage2/hv-utilities/tape-backup/tape-restore | 36 ++++++++ 4 files changed, 289 insertions(+) create mode 100755 stage2/hv-utilities/tape-backup/tape-backup create mode 100755 stage2/hv-utilities/tape-backup/tape-backup-mult create mode 100755 stage2/hv-utilities/tape-backup/tape-list create mode 100755 stage2/hv-utilities/tape-backup/tape-restore diff --git a/stage2/hv-utilities/tape-backup/tape-backup b/stage2/hv-utilities/tape-backup/tape-backup new file mode 100755 index 0000000..1782eaf --- /dev/null +++ b/stage2/hv-utilities/tape-backup/tape-backup @@ -0,0 +1,91 @@ +#!/bin/sh + +# tape-backup +# +# Creates a single archive on tape. After the backup is finished, +# the tape is rewound. + +# Read configuration informations +source /etc/backup.conf + +# Exclude files list +EXC_LIST="/tmp/exclude-sockets" + +print_usage() +{ + echo "$(basename $0) - Backup directories/files, starting at the beginning of the tape." + echo " After the backup is finished, the tape is rewound." + echo "Usage: $(basename $0) [-h] [--label "label"] DIR1 DIR2 ..." +} + +if [ ${#} -gt 0 ]; then + if [ "x${1}" = "x-h" ]; then + print_usage + exit 0 + fi +fi + +if [ $# = 0 ]; then + echo "Missing arguments" + print_usage + exit 1 +fi + +if [ "x${1}" = "x--label" ]; then + if [ $# -lt 2 ]; then + echo "Missing arguments for --label option" + print_usage + exit 1 + fi + + TAPE_LABEL=${2} + shift + shift + + if [ $# = 0 ]; then + echo "No directory to backup specified" + print_usage + exit 1 + fi + +else + TAPE_LABEL="CVDS Linux Mail/Web Server Backup (`date '+%Y-%m-%d'`)." +fi + +DIRECTORIES=${@} + +echo "TAPE_LABEL=$TAPE_LABEL" + +if ${MT} status | grep "ONLINE"; then + # Rewinding the tape + ${MT} rewind || exit 1 + + # Finding sockets + find ${DIRECTORIES} -type s > ${EXC_LIST} || exit 1 + + # Setting compression on + ${MT} compression 1 || exit 1 + + # Archiving + tar -cf /dev/tape ${DIRECTORIES} --ignore-failed-read --label="${TAPE_LABEL}" \ + --exclude="*.sock" --exclude="*.lock" --exclude-from=${EXC_LIST} \ + --absolute-names --totals || exit 1 + + if ! ${MT} status | grep "ONLINE"; then + echo "***** tape-drive status is not ONLINE" + exit 1 + fi + + # Rewinding the tape + ${MT} rewind || exit 1 + + # Ejecting tape + ${MT} offline || exit 1 + + rm ${EXC_LIST} +else + echo "***** WARNING TAPE DRIVE IS OFFLINE, NO BACKUPS PERFORMED" + exit 1 +fi + +exit $? diff --git a/stage2/hv-utilities/tape-backup/tape-backup-mult b/stage2/hv-utilities/tape-backup/tape-backup-mult new file mode 100755 index 0000000..e07269f --- /dev/null +++ b/stage2/hv-utilities/tape-backup/tape-backup-mult @@ -0,0 +1,87 @@ +#!/bin/sh + +# tape-backup-mult +# +# Creates archive at current position of tape, thus enabling creation of +# multiple archives on a single tape. After the backup is finished, +# the tape is NOT rewound. + +# Read configuration informations +source /etc/backup.conf + +# Exclude files list +EXC_LIST="/tmp/exclude-sockets" + +print_usage() +{ + echo "$(basename $0) - Backup directories/files, starting at the current position of the tape." + echo " After the backup is finished, the tape is NOT rewound." + echo "Usage: $(basename $0) [-h] [--label "label"] DIR1 DIR2 ..." +} + +if [ ${#} -gt 0 ]; then + if [ "x${1}" = "x-h" ]; then + print_usage + exit 0 + fi +fi + +if [ $# = 0 ]; then + echo "Missing arguments" + print_usage + exit 1 +fi + +if [ "x${1}" = "x--label" ]; then + if [ $# -lt 2 ]; then + echo "Missing arguments for --label option" + print_usage + exit 1 + fi + + TAPE_LABEL=${2} + shift + shift + + if [ $# = 0 ]; then + echo "No directory to backup specified" + print_usage + exit 1 + fi + +else + TAPE_LABEL="Backup (`date '+%Y-%m-%d'`)" +fi + +DIRECTORIES=${@} + +echo "TAPE_LABEL=$TAPE_LABEL" + +if ${MT} status | grep "ONLINE"; then + + # We don't rewind the tape, we add a new archive at the current position of the tape. + + # Finding sockets + # Removed, because the find command returned: "find: /root/big-file.tar.bz2: Value too large for defined data type" + # (the file was 6G) + # find ${DIRECTORIES} -type s > ${EXC_LIST} || exit 1 + echo "" > ${EXC_LIST} + + # Setting compression on + ${MT} compression 1 || exit 1 + + # Archiving + tar -cf /dev/tape ${DIRECTORIES} --label="${TAPE_LABEL}" --exclude-from=${EXC_LIST} --absolute-names --totals || exit 1 + + if ! ${MT} status | grep "ONLINE"; then + echo "***** tape-drive status is not ONLINE" + exit 1 + fi + + rm ${EXC_LIST} +else + echo "***** WARNING TAPE DRIVE IS OFFLINE, NO BACKUPS PERFORMED" + exit 1 +fi + +exit $? diff --git a/stage2/hv-utilities/tape-backup/tape-list b/stage2/hv-utilities/tape-backup/tape-list new file mode 100755 index 0000000..d689cf6 --- /dev/null +++ b/stage2/hv-utilities/tape-backup/tape-list @@ -0,0 +1,75 @@ +#!/bin/sh + +# tape-list + +# Read configuration informations +source /etc/backup.conf + +print_usage() +{ + echo "$(basename $0) - List content of tape archive." + echo "Usage: $(basename $0) [-h] [--label]" +} + +if [ ${#} -gt 0 ]; then + if [ "x${1}" = "x-h" ]; then + print_usage + exit 0 + fi +fi + +if [ $# -gt 1 ]; then + print_usage + exit 1 +fi + +if [ $# = 1 ]; then + if [ "x${1}" != "x--label" ]; then + echo "Invalid argument" + print_usage + exit 1 + fi + + print_label="1" +fi + +if ${MT} status | grep "ONLINE" 1> /dev/null 2>&1; then + + # Rewinding the tape + ${MT} rewind || exit 1 + + file="0" + quit="0" + + while [ ${quit} = "0" ]; do + + file="$(( ${file} + 1 ))" + + if [ "x${print_label}" = "x1" ]; then + echo "Label for archive #$file:" + tar tvf /dev/tape | grep "V---------" + if [ $? -ne 0 ]; then + echo "No archive #$file:" + quit="1" + fi + else + echo "Content of archive #$file:" + tar tvf /dev/tape || exit 1 + fi + + if [ ${quit} = "0" ]; then + # Position tape on next file + ${MT} fsf 1 + if [ $? -ne 0 ]; then + quit="1" + fi + fi + + done + +else + echo "TAPE DRIVE IS OFFLINE, NO LISTING PERFORMED" + exit 1 +fi + +exit $? diff --git a/stage2/hv-utilities/tape-backup/tape-restore b/stage2/hv-utilities/tape-backup/tape-restore new file mode 100755 index 0000000..5c101af --- /dev/null +++ b/stage2/hv-utilities/tape-backup/tape-restore @@ -0,0 +1,36 @@ +#!/bin/sh + +# tape-restore + +# Read configuration informations +source /etc/backup.conf + +print_usage() +{ + echo "$(basename $0) - Restore file or directory from tape." + echo "Usage: $(basename $0) [-h] FILE" +} + +if [ ${#} -gt 0 ]; then + if [ "x${1}" = "x-h" ]; then + print_usage + exit 0 + fi +fi + +if [ $# != 1 ]; then + print_usage + exit 1 +fi + +if ${MT} status | grep "ONLINE"; then + # Rewinding the tape + ${MT} rewind || exit 1 + + # The tape is now positioned on the first archive + tar xvf /dev/tape ${@} || exit 1 +else + echo "TAPE DRIVE IS OFFLINE, NO RESTORE PERFORMED" +fi + +exit $? -- 2.20.1