Rsync синхронизация и backup

Rsync backupКогда-то совсем давно, когда у меня не было умения настроить backuppc я нашел скрипт синхронизации каталогов через программу rsync. Я подумал, что синхронизация, что backup это одно и тоже, только называется по разному :)
Программа rsync входит в состав всех дистрибутивов и достаточно популярна, так что вы без труда найдете её в каждом дистрибутиве.
Сразу перейдем к примерам rsync синхронизации.
Мы хотим иметь копию каталога /home/user/foto, а дубликат папки будем хранить в /mnt/backup Выполним (не забывая проверить права папки куда копируем, или выполняем от root-sudo)


rsync -av  /home/user/foto /mnt/backup

ключи

  • -a архивный перенос (вместе с папками, вложенными папками, файлами, скрытыми файлами и т.д)
  • -v вывод на экран данных о выполнении команды

Вот так вот просто! Наши фото лежат уже в двух местах. Конечно они не заархивированы и занимают столько же места сколько и первая папка, но придется чем-то жертвовать. А жертвовать придется своим дисковым пространством. К слову сказать для фотографий архивирование неэффективно, очень уж малый коэффициент сжатия. Естественно надо копировать на другой физический диск! Т.к. если умрет один винчестер, то умрут и все остальные разделы на этом диске со всеми бэкапами будь они там.
Продолжим, что-то я отвлекся..
В вышеприведенной команде есть небольшой подвох. К примеру вы переименовали или отсортировали в другие папки фотографии, а старые каталоги изменили название или вообще удалили. Что же получится? Скрипт честно перенесет новые появившиеся файлы и каталоги, а старые которые вы удалили в папке /home/user/foto так и останутся лежать в папке бэкапа. Фактически в часто изменяемых директориях выполнение такого скрипта будет приводить к помойке в папке бэкапа. Чтобы этого избежать команду надо выполнять с ключем --delete


rsync -av  --delete /home/user/foto /mnt/backup

И обе папки всегда будут идентичными
Теперь надо выбрать ваши самые важные директории и написать в файл простенький перечень команд для бэкапа. У меня он когда-то выглядел примерно так.


rsync -av --delete /home/mik/mail /mnt/backup/home/mik/
rsync -av --delete /home/mik/.mozilla /mnt/backup/home/mik/
rsync -av --delete /home/mik/.claws-mail /mnt/backup/home/mik/
rsync -av --delete /bin /mnt/backup/system
rsync -av --delete /boot /mnt/backup/system
rsync -av --delete /dev /mnt/backup/system
rsync -av --delete /etc /mnt/backup/system
rsync -av --delete /lib /mnt/backup/system
rsync -av --delete /netup /mnt/backup/system
rsync -av --delete /opt /mnt/backup/system
rsync -av --delete /root /mnt/backup/system
rsync -av --delete /sbin /mnt/backup/system
rsync -av --delete /var /mnt/backup/system

Обращаю особое внимание не надо бэкапить все подряд. Если, к примеру, выбрать для бэкапа весь ваш домашний каталог, то там могут находиться коллекция ваших фильмов, дистрибутивы open source и т.д. Все это занимает слишком много места, и как по моему мнению, это бэкапить не стОит.
Вернемся к нашему файлу с перечнем каталогов для бэкапа и сделаем его исполняемым


chmod +x ./имя_файла

Скрипт можно прописать в crontab для ежедневных выполнений, а в большинстве дистрибутивах таких как ubuntu или debian просто положите его в каталог /etc/cron.daily. Но возможно все равно придется внести изменения в файл /etc/crontab. У большинства компьютер не работает ночью, так что измените выполнения задач /etc/cron.daily на то время, когда у вас компьютер обычно включен.

А теперь примеры команд rsync, которые надо просто иметь ввиду. А то мало ли с какими задачами вы можете столкнуться в будущем.

1 пример.


rsync -av --delete --exclude="*.avi" --exclude="*.mpg" /home/user /mnt/backup

Команда синхронизирует весь ваш домашний каталог, но не копирует файлы с расширениями avi и mpg. Если вам не надо еще что-то, то просто дописываете подряд --exclude="_что_исключаем_"

2 пример.


rsync -avz -e "ssh -l ssh_user -p5623" --delete /home/user/foto 192.168.0.1:"./temp"

А вот это уже команда синхронизации между вашим и удаленным компьютером через ssh соединение.

  • -z дополнительно сжимаем данные
  • -e используем удаленный shell
  • ssh -l ssh_user -p5623 - команда на соединение с удаленным компьютером. ssh_user пользователь, а -p5623 это если порт ssh нестандартный, в примере 5623
  • 192.168.0.1:"./temp" - ip адрес компьютера, (можно и по имени). Также указываем директорию куда будем переносить данные. Обратите внимание, что директория задана через ./, мы уже отталкиваемся от пути домашней директории ssh_user куда мы попадаем при соединении через ssh

После ввода этой команды мы должны авторизоваться по паролю ssh_user и только тогда начнется синхронизация каталогов. Аналогичным образом можно синхронизировать удаленный каталог и локальный. Достаточно просто поменять местами папки, откуда и куда синхронизируем.
Если вы хотите автоматизировать процесс и не вводить каждый раз пароль, то читайте мою статью SSH авторизация без пароля или по ключу.

Статья просмотрена 28 568 раз
Запись опубликована в рубрике Backup с метками , , , . Добавьте в закладки постоянную ссылку.

4 комментария: Rsync синхронизация и backup

  1. Mixa говорит:

    Чудесная инструкция! Только по ней разобрался как работать с rsync, спасибо!

    Но вот еще такой вопрос. А что если я бекаплю внешний винчестер подключенный к сети и один из юзеров случайно грохнул файл/папку, а тут я запускаю синхронизацию и… все! В бекапе файла больше нет!

    Можно как-то добиться чтобы программа выводила инфу о файлах которые собирается удалить из бекапа и спрашивала потверждения его удаления?

    • mik говорит:

      Да, вы правы, если использовать опцию –delete то можно потерять важные данные при очередном бекапе. Поэтому в мануалах предупреждают использовать эту опцию очень осторожно.
      Можно перед полной синхронизацие запустить rsync с опцией –dry-run, которая покажет какие файлы будут удалены.
      Насчет подтверждения перед удалением не знаю :) Почитайте man rsync возможно эта функция есть. Но rsync не предназначена для полноценного бэкапа – посмотрите мои статьи про бэкап с помощью программы backuppc.

  2. Андрей говорит:

    Напишите, пожалуйста, пример использования команды –exclude-from=FILE. Мне надо указать перечень каталогов, которые не надо синхронизировать в файле и почему-то не получается.
    Спасибо

  3. Дмитрий говорит:

    Удалённые на источнике файлы можно сохранить в отдельную папку, если использовать ключик –backup-dir=”ПУТЬ КУДА СОХРАНЯТЬ УДАЛЁННЫЕ ФАЙЛЫ”.
    А вообще, бэкапить лучше с ключиком -b.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>