Бесплатный «Облачный» бэкап 7z+Dropbox

Опубликовано:

В последнее время особую популярность обретают различные «облачные» сервисы, в том числе резервное копирование. В интернете можно найти десяток сайтов представляющих подобные услуги, в том числе на платной основе.

Рассмотрим настройку автоматического бекапа веб-сервера с помощью архиватора 7z и сервиса Dropbox в Debian/Ubuntu Linux.

Создадим непривилегированного пользователя из-под которого будет запущен клиент Dropbox.

root@localhost:~$ useradd backupus

Далее в соответсвии с официальной вики устанавливаем консольного клиента, для созданного ранее пользователя

backupus@localhost:~$ cd ~/
backupus@localhost:~$ wget -O dropbox.tar.gz http://www.dropbox.com/download/?plat=lnx.x86
backupus@localhost:~$ tar -zxof dropbox.tar.gz

Запускаем клиента

backupus@localhost:~$ ~/.dropbox-dist/dropboxd

Через несколько секунд в консоле появится ссылка для привязки данного компьютера к вашему аккаунту.

Изменяем каталог за которым следит демон Dropbox на «/backup»:

backupus@localhost:~$ cp ~/.dropbox/dropbox.db dropbox.db.backup
backupus@localhost:~$ wget http://dl.dropbox.com/u/119154/permalink/dropboxdir.py
backupus@localhost:~$ chmod +x dropboxdir.py
backupus@localhost:~$ mv ~/Dropbox /backup
backupus@localhost:~$ ./dropboxdir.py --setfolder=/backup

Добавим скрипт автозапуска /etc/init.d/dropbox

# dropbox service
DROPBOX_USERS="backupus"
 
DAEMON=.dropbox-dist/dropbox
 
start() {
    echo "Starting dropbox..."
    for dbuser in $DROPBOX_USERS; do
        HOMEDIR=`getent passwd $dbuser | cut -d: -f6`
        if [ -x $HOMEDIR/$DAEMON ]; then
            HOME="$HOMEDIR" start-stop-daemon -b -o -c $dbuser -S -u $dbuser -x $HOMEDIR/$DAEMON
        fi
    done
}
 
stop() {
    echo "Stopping dropbox..."
    for dbuser in $DROPBOX_USERS; do
        HOMEDIR=`getent passwd $dbuser | cut -d: -f6`
        if [ -x $HOMEDIR/$DAEMON ]; then
            start-stop-daemon -o -c $dbuser -K -u $dbuser -x $HOMEDIR/$DAEMON
        fi
    done
}
 
status() {
    for dbuser in $DROPBOX_USERS; do
        dbpid=`pgrep -u $dbuser dropbox`
        if [ -z $dbpid ] ; then
            echo "dropboxd for USER $dbuser: not running."
        else
            echo "dropboxd for USER $dbuser: running (pid $dbpid)"
        fi
    done
}
 
 
case "$1" in
  start)
    start
    ;;
 
  stop)
    stop
    ;;
 
  restart|reload|force-reload)
    stop
    start
    ;;
 
  status)
    status
    ;;
 
  *)
    echo "Usage: /etc/init.d/dropbox {start|stop|reload|force-reload|restart|status}"
    exit 1
 
esac
 
exit 0

Делаем исполняемым, разрешаем запуск при загрузке и запускаем:

root@localhost:~$ chmod +x /etc/init.d/dropbox
root@localhost:~$ update-rc.d dropbox defaults
root@localhost:~$ /etc/init.d/dropbox start

Синхронизация файлов с онлайн-хранилищем работает, перейдем непосредственно к бекапу:

#!/bin/sh
 
DATE=`/bin/date +%Y%m%d`
BACKUP_DIR="/backup/${DATE}"
 
SZ_CMD="/usr/bin/7za"
SZ_PSW="secret"
SZ_OPT="a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on -p${SZ_PSW}"
 
SITES="example.org site.com blog.me"
 
MYSQL_USR="backup"
MYSQL_PSW="secret"
MYSQL_DBS="mysql example_org site_com blog_me"
 
# Create Dirs
/bin/mkdir ${BACKUP_DIR}
/bin/mkdir ${BACKUP_DIR}/db
/bin/mkdir ${BACKUP_DIR}/www
 
# Installed packages
/usr/bin/dpkg --list | $SZ_CMD $SZ_OPT -si ${BACKUP_DIR}/dpkg.list.7z
 
# Configs
$SZ_CMD $SZ_OPT ${BACKUP_DIR}/etc.7z /etc/
 
# Crontabs
$SZ_CMD $SZ_OPT ${BACKUP_DIR}/crontabs.7z /var/spool/cron/crontabs/
 
# Sites
for SITE in $SITES; do
    $SZ_CMD $SZ_OPT ${BACKUP_DIR}/www/${SITE}.7z /srv/www/${SITE}/
done
 
# MySQL
for DB in $MYSQL_DBS; do
    /usr/bin/mysqldump --opt -u $MYSQL_USR -p${MYSQL_PSW} $DB | $SZ_CMD
    $SZ_OPT -si ${BACKUP_DIR}/db/${DB}.sql.7z
done

Итак, что делает это скрипт:

  • Слепок установленных пакетов
  • Резервную копию конфигов и кронтабов
  • Резервную копию сайтов example.org, site.com и blog.me
  • Резервную копию mysql баз mysql, example_org, site_com и blog_me

Архивы в данном скрипте шифруются с помощью пароля $SZ_PSW, так как доверять никому не стоит

Понравилась статья, расскажи о ней друзьям, нажми кнопку!