Ротация бэкапов 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