Проект

Общее

Профиль

Ротация бэкапов Windows Image Backup

#!/usr/bin/env sh

_usage() {
    cat <<EOM
Usage: $0 [cmd] <min count> <days>
    min count               - minimum backups archives count
    days                    - maximum backups archives days count
EOM
}

if [ -z "${1}" ]; then
    _usage
    exit 1
fi

serverName=${1}
# default min 30 archives
backupCount=${2:-30}
# default 30 days
backupDays=${3:-30}

backupDir="/usr/local/samba/backup/${1}"
backupArchivesDir="/backups/win/${serverName}"
windowsImageBackupDir="WindowsImageBackup"
backupDate=$(date +%Y-%m-%d-%H-%M-%S)
backupName="${serverName}_${backupDate}"

if [ ! -d "${backupDir}" ]; then
    echo "directory not found ${backupDir}"
    exit 1
fi

echo "max count backups ${backupCount}"
echo "max days backups ${backupDays}"

if [ ${serverName}  == "test" ]; then
    echo "create test data"
    [ ! -d "${backupDir}" ] && mkdir "${backupDir}"
    cd "${backupDir}"
    test -d "WindowsImageBackup" && rm -rf "WindowsImageBackup"
    mkdir "WindowsImageBackup"
    echo "test date: ${backupDate}" > "WindowsImageBackup/file_for_test.txt"                                                  
fi

cd "${backupDir}"


if [ ! -d "${windowsImageBackupDir}" ]; then
    echo "directory not found ${windowsImageBackupDir}"
    exit 1
fi

echo "move ${windowsImageBackupDir} to ${backupName}"
mkdir "${backupName}"
mv "${windowsImageBackupDir}" "${backupName}"

echo "archive ${backupName}"
tar -cjvf "${backupName}.tgz" "${backupName}" > "${backupName}.log" 2>&1

[ ! -d "${backupArchivesDir}" ] && mkdir "${backupArchivesDir}"

echo "move archive ${backupName}.tgz ${backupArchivesDir}"
mv "${backupName}.tgz" "${backupArchivesDir}"
echo "link to \"share\" from ${backupName}.tgz"
ln -s "${backupArchivesDir}/${backupName}.tgz" "${backupName}.tgz"

echo "remove ${backupName}"
rm -rf "${backupName}"

archivesCount=$(find "${backupArchivesDir}" -maxdepth 1 -type f -name "*.tgz" | wc | awk '{print $1}')

if [ ${archivesCount} -ge ${backupCount} ]; then

    echo "remove old files"
    find "${backupArchivesDir}" -name "*.tgz" -mtime "+${backupDays}" -type f -print -delete 2> /dev/null

    echo "delete old logs"
    find "${backupDir}" -name "*.log" -mtime "+${backupDays}" -type f -print -delete 2> /dev/null

    echo "remove broken links to ${backupDir}:"
    find "${backupDir}" -type l ! -exec test -e {} \; -print -delete 2> /dev/null
fi

exit 0