system:backup_с_помощью_rsync

Backup с помощью rsyncd

Решил настроить backup. Первая мысль была: ночью сжимать все в один большой архив и отправлять по сети с помощью scp, например.. Но этот вариант не устраивал меня как минимум по двум причинам:

- Копироваться будут абсолютно все файлы, даже которые не изменились - Для авторизации придется использовать ключи, что не есть хорошо для безопасности

Прогуглив этот вопрос нашел замечательную утилиту rsync ее и стал мучить. ))

Итак, работать все будет следующим образом: на компьютере, который мы будем бэкапить, ставим и настраиваем rsync сервер, на backup сервере настраиваем rsync клиент. После этого синхронизиркем данные на backup сервере с данными на других серверах. Для примера, имя бэкап сервера будет: backup, а имя машины с которой мы будем синхронизировать данные — mail:

  mail# uname -rsn
  FreeBSD mail.teachers 6.1-RELEASE
  mail#
  /root/> uname -rsn
  FreeBSD backup 6.1-RELEASE-p6
  /root/>

Сначала настроим rsync сервер. Идем в порты ставить:

# apt-get install rsync

nano rsyncd.conf

  # Файл приветствия
  motd file = /etc/new_motd
 
  # Лог файл
  log file = /var/log/rsyncd.log
 
  # Писать в лог о скачивание файлов
  transfer logging = true
 
  # Описание секции ETC
  [etc]
          # Путь к директории
          path = /etc/
 
          # Под каким uid'ом работать
          uid = root
 
          # Только чтение
          read only = yes
 
          # Разрешать просмотр файлов
          list = yes
 
          # Комментарий
          comment = ETC directory
 
          # Хосты, которым разрешен доступ
          hosts allow = 192.168.1.249
 
          # Разрешенные пользователи
          auth users = backup
 
          # Путь к файлу с паролями
          secrets file = /usr/local/etc/rsyncd.scrt
 
  # Далее может идти описание других секций(по аналогии с samba и шарами)
  Создаем необходимые файлы и директории
  mail# cat > /etc/new_motd
  HELLO FROM RSYNC
 
  mail# touch /var/log/rsyncd.log
  mail# chmod 0600 /var/log/rsyncd.log
  mail# chown root:wheel /var/log/rsyncd.log
  mail# cat > /usr/local/etc/rsyncd.scrt
  backup:123456
  mail# chown root:wheel /usr/local/etc/rsyncd.scrt
  mail# chmod 0600 /usr/local/etc/rsyncd.scrt
  mail# mv /usr/local/etc/rc.d/rsyncd /usr/local/etc/rc.d/rsyncd.sh
  mail# echo rsyncd_enable=\"YES\" >> /etc/rc.conf
  mail# /usr/local/etc/rc.d/rsyncd.sh start
  Starting rsyncd.
  mail# ps ax | grep rsyn
  97920  ??  Ss     0:00.00 /usr/local/bin/rsync --daemon
  97922  p0  S+     0:00.01 grep rsyn
  mail#

Теперь перейдем к настройке клинта, точнее настраивать там ничего не надо... Нужно просто проверить как все работает:

  /root/> cd /usr/ports/net/rsync/
  /usr/ports/net/rsync/> make install clean
  ... skipped ...
  /usr/ports/net/rsync/> rehash
  /usr/ports/net/rsync/>

Проверяем работу сервера:

  /root/> rsync mail::
  HELLO FROM RSYNC
 
 
  etc             ETC directory
  var             VAR directory
  /root/>

Теперь пробуем авторизоваться:

  /usr/ports/net/rsync/> rsync backup@mail::etc
  HELLO FROM RSYNC
 
 
  Password:
  @ERROR: auth failed on module etc
  rsync error: error starting client-server protocol (code 5)
   at main.c(1296) [receiver=2.6.8]
  /usr/ports/net/rsync/> rsync backup@mail::etc
  HELLO FROM RSYNC
 
 
  Password:
  drwxr-xr-x        2048 2006/10/05 21:27:03 .
  lrwxrwxrwx          12 2006/09/15 21:24:09 aliases
  -rw-r--r--       16384 2006/09/17 14:27:21 aliases.db
  -rw-r--r--         209 2006/05/07 08:00:23 amd.map
  -rw-r--r--        1234 2006/05/07 08:00:23 apmd.conf
  -rw-r--r--         231 2006/05/07 08:00:23 auth.conf
  -rw-r--r--         737 2006/05/07 08:00:23 crontab
  -rw-r--r--         108 2006/05/07 08:00:23 csh.cshrc
  -rw-r--r--         481 2006/05/07 08:00:23 csh.login
  -rw-r--r--         110 2006/05/07 08:00:23 csh.logout
  ... skipped ...
 
  /usr/ports/net/rsync/>

В первый раз я ввел неверный пароль. Все конечно хорошо, но если запускать бэкап по крону, то как вводить пароль? Для этого можно указать password-file:

  /usr/ports/net/rsync/> cat > /usr/local/etc/rsyncd.scrt
  123456
  /usr/ports/net/rsync/> chown root:wheel /usr/local/etc/rsyncd.scrt
  /usr/ports/net/rsync/> chmod 0600 /usr/local/etc/rsyncd.scrt
  /usr/ports/net/rsync/> rsync --password-file=/usr/local/etc/rsyncd.scrt \
  ? backup@mail::etc
  HELLO FROM RSYNC
 
  drwxr-xr-x        2048 2006/10/05 21:27:03 .
  lrwxrwxrwx          12 2006/09/15 21:24:09 aliases
  -rw-r--r--       16384 2006/09/17 14:27:21 aliases.db
  -rw-r--r--         209 2006/05/07 08:00:23 amd.map
  -rw-r--r--        1234 2006/05/07 08:00:23 apmd.conf
  -rw-r--r--         231 2006/05/07 08:00:23 auth.conf
  -rw-r--r--         737 2006/05/07 08:00:23 crontab
  -rw-r--r--         108 2006/05/07 08:00:23 csh.cshrc
  -rw-r--r--         481 2006/05/07 08:00:23 csh.login
  -rw-r--r--         110 2006/05/07 08:00:23 csh.logout
  ... skipped ...
  /usr/ports/net/rsync/>

На сервере, в логах будет примерно следующее:

  mail# tail -3 /var/log/rsyncd.log
  2006/10/05 21:53:21 [98220] connect from backup.teachers (192.168.1.249)
  2006/10/05 21:53:21 [98220] rsync on etc from backup@backup.teachers (192.168.1.249)
  2006/10/05 21:53:21 [98220] sent 1807 bytes  received 99 bytes  total size 411665
  mail#

На backup сервере создадим директорию, где будут храниться забэкаппенные файлы и начинаем backup:

  /root/> df -alh | grep backup
  /dev/ad1s1d    144G    2.0K    133G     0%    /backup
  /root/> mkdir -p /backup/mail.teachers/etc/
  /root/> chmod -R 0700 /backup/mail.teachers/
  /root/> ls -la /backup/mail.teachers/
  total 6
  drwx------  3 root  wheel  512 Oct  5 22:01 .
  drwxr-xr-x  3 root  wheel  512 Oct  5 22:01 ..
  drwx------  2 root  wheel  512 Oct  5 22:01 etc
  /root/> rsync --update --recursive \
  ? --password-file=/usr/local/etc/rsyncd.scrt backup@mail::etc \
  ? /backup/mail.teachers/etc/
  HELLO FROM RSYNC
 
 
  skipping non-regular file "aliases"
  skipping non-regular file "namedb"
  skipping non-regular file "rmt"
  skipping non-regular file "termcap"
  /root/>

Ссылочки rsync качать не стал. ;). Смотрим, что у нас получилось:

  /root/> ls -la /backup/mail.teachers/etc/
  total 528
  drwx------  18 root  wheel   2048 Oct  5 22:03 .
  drwx------   3 root  wheel    512 Oct  5 22:01 ..
  drwxr-xr-x   2 root  wheel    512 Oct  5 22:03 X11
  -rw-r--r--   1 root  wheel  16384 Oct  5 22:03 aliases.db
  -rw-r--r--   1 root  wheel    209 Oct  5 22:03 amd.map
  -rw-r--r--   1 root  wheel   1234 Oct  5 22:03 apmd.conf
  -rw-r--r--   1 root  wheel    231 Oct  5 22:03 auth.conf
  drwxr-xr-x   2 root  wheel    512 Oct  5 22:03 bluetooth
  -rw-r--r--   1 root  wheel    737 Oct  5 22:03 crontab
  -rw-r--r--   1 root  wheel    108 Oct  5 22:03 csh.cshrc
  -rw-r--r--   1 root  wheel    481 Oct  5 22:03 csh.login
  -rw-r--r--   1 root  wheel    110 Oct  5 22:03 csh.logout
  ... skipped ...
  /root/>

На сервере:

  mail# tail -3 /var/log/rsyncd.log
  2006/10/05 22:00:05 [98379] send backup.teachers 
  [192.168.1.249] etc (backup) ssh/sshd_config 3042
  2006/10/05 22:00:05 [98379] send backup.teachers 
  [192.168.1.249] etc (backup) ssl/openssl.cnf 7869
  2006/10/05 22:00:05 [98379] sent 1286010 bytes  
  received 7581 bytes  total size 1264419
  mail#

Как видите, у нас передалась вся директория etc и все поддиректории. Давайте добавим в файл /etc/hosts пробел и попробуем сделать бэкап:

mail# echo "" >> /etc/hosts
mail#

Теперь бэкапим:

  /root/> rsync --update --verbose --recursive \ 
  ? --password-file=/usr/local/etc/rsyncd.scrt \
  ? backup@mail::etc /backup/mail.teachers/etc/
  HELLO FROM RSYNC
 
 
  receiving file list ... done
  skipping non-regular file "aliases"
  skipping non-regular file "namedb"
  skipping non-regular file "rmt"
  skipping non-regular file "termcap"
  hosts
 
  sent 126 bytes  received 6567 bytes  4462.00 bytes/sec
  total size is 1264421  speedup is 188.92
  /root/>

Как видите, у нас передался только файл hosts, потому что изменился только он.

  • system/backup_с_помощью_rsync.txt
  • Последнее изменение: 2018/10/04 13:33
  • mirocow