rsync – przyrostowy backup v.1.1

Łukasz Piotrowski Komentarzy 0

    Witajcie.

    Jakiś czas temu publikowałem prosty skrypt do robienia backupu przyrostowego za pomocą rsycn.
    Dziś z potrzeby i nudy postanowiłem udoskonalić trochę poprzednią wersję.


    Changelog

    v.1.1
    – Wyszukiwanie najnowszego backupu do różnicowej kopii
    – Zmiana sposobu usuwania starych kopii

    v.1.0
    – Pierwsza wersja

    Opis

    Skrypt ma za zadanie tworzenie kopii przyrostowej za pomocą rsync z dowolnego miejsca (zdalnie, lokalnie oraz inne które obsługuje rsync)
    Dodatkowo mamy możliwość określania Źródła, Celu, Ilość przechowywanych kopii.

    Do poprawnego działania wymagany jest system Linux/Mac oraz program sudo

    Kod źródłowy

    #!/bin/sh
     
    # Katalog Docelowy (bez ostatniego /)
    BACKUP_DIR=/mnt/backup_vpslpiot
     
    # Katalog źródłowy
    SOURCE_DIR=root@piotrows.pl:/
     
    # Ilość przechowywanych kopii (1 kopia dziennie)
    NUM_BACKUP=4
     
     
    # Jeżeli nie ma katalogu dla kopii to go tworzymy
    if [ ! -d $BACKUP_DIR ]
    then
            mkdir -p $BACKUP_DIR
    fi
     
    # Wywalamy najstarszy backup
    COUNT=0
    for i in $(find "$BACKUP_DIR" -maxdepth 1 -type d | sort -Vr); 
    do
        if [ "$i" != "$BACKUP_DIR" ]
        then
            COUNT=`expr $COUNT + 1`
            
            if [ $COUNT -gt $NUM_BACKUP ]
            then
                echo "Deleting: $i"
                sudo rm -rf "$i"
            fi
        fi
    done
     
    # Pobieramy ostatni katalog backupu
    i=1
    while [ $i -le 30 ];
    do
        #statements
        LAST_BACKUP=$(date -I -d "$i day ago")
        
        if [ -d $BACKUP_DIR/$LAST_BACKUP ]
        then
            echo "Found newst backup: $LAST_BACKUP"
            break
        fi
        i=`expr $i + 1`
    done
    
    # echo "$LAST_BACKUP"
    
    CURRENT_BACKUP=$(date -I)
    IGNORE_DIR='--exclude=/dev --exclude=/proc --exclude=/tmp --exclude=/sys' 
    
    echo "sudo rsync -avh --progress $IGNORE_DIR --link-dest=$BACKUP_DIR/$LAST_BACKUP $SOURCE_DIR $BACKUP_DIR/$CURRENT_BACKUP"
    notify-send 'Start make Backup'
    
    sudo rsync -ah $IGNORE_DIR --link-dest=$BACKUP_DIR/$LAST_BACKUP $SOURCE_DIR $BACKUP_DIR/$CURRENT_BACKUP
    
    notify-send 'End make Backup'
    Top