Trochę się zastanawiałem jak i czym wykonywać backup mojego vpsa (bo w domu wykorzystuję inne narzędzia) i w sumie postawiłem na rzecz najprostszą. Spakowanie wszystkiego i pobranie. Opcji innych masa, mniej lub bardziej wydajnych i z ciekawymi funkcjami ale zważywszy na moje potrzeby (w zasadzie to zgrać sobie tylko pliki konfiguracyjne ku pamięci) wybrałem właśnie najprostszą metodę. Jedno polecenie pakowania i pobranie pliku w zasadzie załatwia sprawę ale co by troszkę sobie ułatwić życie w czeluściach internetu znalazłem fajny skrypt naszego rodaka który dodaje kilka bajerów.
Całość opiera się na pliku z podanym miejscem które chcemy zarchiwizować oraz co można pominąć:
/ --exclude=/backup/*.tgz* --exclude=/proc/* --exclude=/sys/* --exclude=/tmp/* --one-file-system
oraz samym skryptem:
#!/bin/bash # # Author: Martin Matusiak <numerodix@gmail.com> # Licensed under the GNU Public License, version 3. backup_dir=/backup num_backups=1 verbose="$@" lists=$backup_dir/*.lst ext=tgz date_params="%Y-%m-%d-%H%M" nice_val="nice -n20" # colors wh="e[1;37m" pl="e[m" ye="e[1;33m" cy="e[1;36m" re="e[1;31m" if [[ "$verbose" && "$verbose" != "-v" ]]; then echo "Usage: $0 [-v]" exit 1 fi if [ ! -d $backup_dir ]; then echo -e "${re}Backup dir $backup_dir does not exist.${pl}"; exit 1 fi for list in $(ls $lists); do name=$(basename $list .lst) file_root=$backup_dir/$name.$(date +$date_params) stdout="1> /dev/null" stderr="2> $file_root.$ext.err" if [ "$verbose" ]; then stdout="" fi cmd="cat $list | $nice_val xargs tar zlcfv $file_root.$ext $stderr | tee $file_root.$ext.log $stdout" trap 'echo -e "${re}Received exit signal${pl}"; exit 1' INT TERM echo " * Running `$name` job..." if [ "$verbose" ]; then echo -e ${ye}$cmd${pl}; fi echo -en $cy; bash -c "$cmd" ; echo -en $pl status_code=$? if [ $status_code -gt 0 ]; then # Dump error log echo -en $re ; cat $file_root.$ext.err echo -en $pl ; echo "Tar exit code: $status_code" else # Kill error file rm $file_root.$ext.err fi # Evict old backups we don't want to keep num=$num_backups for evict in $(ls -t $backup_dir/$name.*.$ext); do if [ $num -le 0 ]; then rm -f "$evict" else num=$(($num-1)) fi done # Report number of files in backup echo -n "$(wc -l < $file_root.$ext.log) files" echo ", $(ls -l $file_root.$ext | awk '{ print $5 }') bytes" done
i to tyle, prościej się chyba nie da a i objaśnienia raczej nie potrzebne, wystarczy sobie zmodyfikować wedle potrzeb 🙂
A w sumie nie łatwiej rsynca do tego użyć?
Ja robię backup raz na pół roku więc mi to wszystko jedno 🙂