вторник, 28 июня 2011 г.

Скрипт для отчистки каталога бакулы и файловой системы

#!/bin/bash
# Удаляем файлы если том в пуле Scratch
# Удаляем тома из каталога если нет этих файлов
# Удаляем файлы если про них нет информации в каталоге
# СДЕЛАТЬ БЕКАП КАТАЛОГА! :) Чтобы потом не было мучительно больно.
DEVDIR=/bacula/devices # Тут лежат все "ленточки"
POOLS='Scratch Default fullbackup-pool diffbackup-pool incbackup-pool full-pool diff-pool inc-pool' #
MYSQL_CMD="mysql --skip-column-names -u bacula -plna bacula" #
BCONSOLE="/usr/bin/bconsole -s -c /etc/bacula/bconsole.conf" #


for POOL in $POOLS
do
    POOLID=`$MYSQL_CMD -e "select PoolId FROM Pool WHERE Name=\"$POOL\""`
    VOLLIST=`$MYSQL_CMD -e "select VolumeName FROM Media WHERE PoolId=\"$POOLID\";"`
    for VOL in $VOLLIST
    do
        # echo $POOLID " " $POOL " " $VOL
        # echo "Ищем $VOL"
        FILE=`find -P $DEVDIR -name "$VOL"`
        if [ "$FILE" = "" ]
        then
            echo "Файл $VOL не найден удаляем из каталога "
$BCONSOLE <<EOD_1
delete volume=$VOL yes
quit
EOD_1
        else
            if [ $POOL = "Scratch" ]
            then
                echo "Удаляем том $VOL пула $POOL"
                rm -fv `find -P $DEVDIR -name $VOL`
            else
                echo "Том $VOL в пуле $POOL"
            fi
        fi
    done
for FILE in $DEVDIR/*/*
do
    MEDIA=`echo "$FILE" | cut -d'/' -f5`
    VOL=`$MYSQL_CMD -e  "select VolumeName FROM Media WHERE VolumeName=\"$MEDIA\";"`
    if [ "$VOL" = "" ]
    then
        rm -fv  $FILE
        echo $FILE have no correspondig volume $VOL removed
#    else
#       echo $FILE have corresponfig volume $VOL in catalog
    fi
done

Комментариев нет:

Отправить комментарий