Резервное копирование файловой системы Linux-сервера с помощью rsync

Существует много хороших и зачастую дорогих решений для организации резервного копирования. Однако, в ряде случаев можно обойтись штатными средствами, например rsync. Как? Читайте в данной статье.

[Sergey Chvaluk (ant@unity.net)]

Обозначения:

A - сервер с которого будем делать backup.
B - сервер на который будем делать backup.

Примечание: rsync работает только при установке его на обоих серверах - A и B.

  1. Для начала нужно определитья что будем backup'ить, т.е. какие каталоги (и их подкаталоги) файловой системы. Внимательно просмотрев файловую систему сервера A, создадим список таких каталогов в файле backup.lst.
    	backup.lst:
    	/etc/
    	/var/local/billing/data/
    	/usr/local/etc/
    	.....
    
    (обратите внимание на завершающий "/" в конце каждой строки)

  2. Теперь нужно определиться с местом куда будем делать резервное копирование. Для этого создадим не привилегированного пользователя на сервере B.
    	root@B:~$ mkdir /var/backup
    	root@B:~$ adduser --home /var/backup backup
    
  3. Теперь нужно разрешить пользователю root (сервер A) доступ по ssh на сервер B (пользователь backup) без пароля т.е. по ключу.

    Для этого нужно сгенерировать публичный ключ на сервере А.

    	root@A:~$ ssh-keygen -t rsa
    
    и добавить полученный ключ A:/root/.ssh/id_rsa.pub в конец файла B:/var/backup/.ssh/authorized_keys2 на сервер B.

  4. На сервере B в домашнем каталоге пользователя backup нужно продублировать те каталоги которые мы собираемся backup'ить (т.е. список каталогов из файла backup.lst)
    	backup@B:~$ mkdir -p etc/
    	backup@B:~$ mkdir -p var/local/biiling/data/
    	backup@B:~$ mkdir -p usr/local/etc/
    	.....
    
    что означает -p можно глянуть man mkdir :)
  5. Осталось добавить в крон вызов скрипта backup.sh на сервере А, запуск должен выполняться из под root'а.
    backup.sh:
    #!/bin/bash
    
    # полный путь к вашему списку каталогов
    BACKUP_LST=/etc/backup/backup.lst
    
    cat ${BACKUP_LST} | while read Res; do
        rsync -e ssh -acq --delete --force $Res backup@B:/var/backup$Res
    done
    
Вот собственно и все, у меня так backup'ятся 5 серверов друг на дружку :)

Статья взята с сайта OpenNET.

[ опубликовано 18/02/2004 ]

Sergey Chvaluk (ant@unity.net) - Резервное копирование файловой системы Linux-сервера с помощью rsync   Версия для печати