Този е вариантът ми за FreeBSD и ползва gtar (GNU tar-а както в линукс) има леки разлики в параметрите които приема в сравнение с BSD tar командата, пъврото нещо е да си го инсталираш.
Основния скрипт го държа в /root/bin но той няма значение къде се намира правиш си файл примерно /root/bin/backup-files и слагаш това
#!/bin/sh
LEVEL=""
for i; do
case "$i" in --level*)
LEVEL=${i#*=}
;;
esac
done
if [ $LEVEL -gt 3 ]; then
echo "Level greater than 3" && exit 6
fi
test -z "$LEVEL" && echo "No level selected. Level must be between 0 and 3" && exit 1
test -f /usr/local/etc/backup/options-files && . /usr/local/etc/backup/options-files
test -z "$DESTINATION_PATH" && echo "Destination path missing" && exit 2
test -z "$BACKUP_LIST" && echo "Backup list missing" && exit 3
test -z "$DONT_BACKUP" && echo "Ignore list missing" && exit 4
NOW=$(date +%Y-%m-%d-%H-%M)
ARCHIVE_FILE="${DESTINATION_PATH}/${HOST}-files-level${LEVEL}-${NOW}.tar.gz"
LIST_FILE="${DESTINATION_PATH}/${HOST}-files-level${LEVEL}-${NOW}.list"
if [ $LEVEL -gt 0 ]; then
LOW_LEVEL=$((LEVEL-1))
LAST_LIST_FILE=$(ls "${DESTINATION_PATH}/${HOST}-files-level${LOW_LEVEL}"*list 2>/dev/null | tail -1)
test -z "$LAST_LIST_FILE" && echo "List file not found" && exit 5
cp "$LAST_LIST_FILE" "$LIST_FILE"
fi
/usr/local/bin/gtar --create --listed-incremental="$LIST_FILE" --file="$ARCHIVE_FILE" --directory=/ --files-from="$BACKUP_LIST" --exclude-from="$DONT_BACKUP" --gzip
if [ $LEVEL -lt 3 ]; then
HIGH_LEVEL=$((LEVEL+1))
rm "${DESTINATION_PATH}/${HOST}-files-level${HIGH_LEVEL}-"*
fi
В FreeBSD bash е опционален компонент и е добре скриптовете за са за /bin/sh. Понеже обичам да оувъренджинийрвам на някои места работите си настройките съм ги изнесъл в отделни файлове. и не само заради това, тоя скрипт първоначално го писах за линукс, после за втори линукс след това и за фрибсд. Да да не ровя като кокошка всеки път като го преправям съм си направил следните допълнителни файлове:
/usr/local/etc/backup/options-files който има следното съдържание:
DESTINATION_PATH=/mnt/net
BACKUP_LIST=/usr/local/etc/backup/stufftobackup-files
DONT_BACKUP=/usr/local/etc/backup/ignorelist-files
Нещата са ясни предполагам - първото къде да се архивира второ е файл какво да се архивира, а третото ми е игнор лист.
Моят файл /usr/local/etc/backup/stufftobackup-files съдържа:
/share
/var/db/firebird
Само това папките които искам да архивирам на нов ред всяка от тях
Другото е игнор листата ми /usr/local/etc/backup/ignorelist-files:
/share/.zfs
/share/.recycle
/var/db/firebird/firebird.log
Примерно това е при мен.
ползвам го като пиша backup-files --level=0 за архив първо ниво - веднъж годишно --level=1 за второ ниво и т.н.
Някои неща които може да промениш примерно самият ред за архивиране мачкам с --gzip ако искаш да ползваш xz сложи накрая опцията --xz и смени съответно променливата
ARCHIVE_FILE="${DESTINATION_PATH}/${HOST}-files-level${LEVEL}-${NOW}.tar.gz"
на
ARCHIVE_FILE="${DESTINATION_PATH}/${HOST}-files-level${LEVEL}-${NOW}.tar.xz"
Чудих се да ти давам ли последните редове от скрипта:
if [ $LEVEL -lt 3 ]; then
HIGH_LEVEL=$((LEVEL+1))
rm "${DESTINATION_PATH}/${HOST}-files-level${HIGH_LEVEL}-"*
fi
Това нещо ТРИЕ автоматично старите архиви от по-горно ниво. Примерно като прави левъл 0 бекъп трие левъл 1 бекъпите но не левъл 2 и 3. Просто като ги пускам всеки ден и много се натрупват. Може да го изтриеш от твоя код.
п.п. Мисля, че е безсмислено да казвам, че яко някой има идеи може да предлага подобрения. Това нещо си работи при мен вече 10 и повече години. Мисля, че в предния пост цитирах от къде съм го взел.
п.п.п. Ето такива файлове създава скрипта
server-files-level0-2015-07-21-14-57.list server-files-level1-2017-01-01-05-00.tar.gz server-files-level2-2017-03-12-21-00.list server-files-level3-2017-03-21-03-00.tar.gz
server-files-level0-2015-07-21-14-57.tar.gz server-files-level1-2017-02-01-05-00.list server-files-level2-2017-03-12-21-00.tar.gz server-files-level3-2017-03-22-03-00.list
server-files-level0-2016-01-01-01-00.list server-files-level1-2017-02-01-05-00.tar.gz server-files-level2-2017-03-19-21-00.list server-files-level3-2017-03-22-03-00.tar.gz
server-files-level0-2016-01-01-01-00.tar.gz server-files-level1-2017-03-01-05-00.list server-files-level2-2017-03-19-21-00.tar.gz
server-files-level0-2017-01-01-01-00.list server-files-level1-2017-03-01-05-00.tar.gz server-files-level3-2017-03-20-03-00.list
server-files-level0-2017-01-01-01-00.tar.gz server-files-level2-2017-03-05-21-00.list server-files-level3-2017-03-20-03-00.tar.gz
server-files-level1-2017-01-01-05-00.list server-files-level2-2017-03-05-21-00.tar.gz server-files-level3-2017-03-21-03-00.list