Вступление
Цифровая революция во многом изменила нашу жизнь. В настоящее время наши фотоальбомы, музыкальные коллекции, книжные полки и т. Д. Являются цифровыми - двоичные файлы, записанные на диск . Наша жизнь и работа делятся между множеством устройств. У компаний есть зоны разработки, тестирования и тестирования, и к ним подключены десятки разработчиков.
Из-за этого сдвига в динамике нашей жизни возникли две проблемы: как сохранить целостность наших данных и как синхронизировать их на всех наших устройствах? Откройте для себя rsync - инструмент, который нацелен и действительно успешно решает эти проблемы.
Впервые выпущенный в 1996 году под лицензией GPLv3 , rsync - это инструмент для передачи и синхронизации файлов с открытым исходным кодом, написанный на C.Он работает, сравнивая размеры и время модификации (mtimes), чтобы решить, какие файлы необходимо синхронизировать, и использует эффективный алгоритм для минимизировать пропускную способность сети для передачи.
Следуя философии Unix , rsync очень легкий, легко настраиваемый и скриптовый . Он достиг большой популярности и повсеместного распространения. Практически каждый дистрибутив Linux поставляется с предустановленной программой rsync; вы даже можете найти его на MacOS прямо из коробки!
Конечно, его тоже можно собрать из исходников - архив можно найти здесь . Однако для пользователей Windows требуются некоторые дополнительные усилия. Его можно использовать со средой выполнения Cygwin или под WSL.
Основные операции rsync
$ rsync options source destination
Синтаксис довольно прост. Вы вызываете rsync
, перечисляете параметры
и выбираете источник и место назначения. Все опции могут быть найдены в
RSync игрового man
страницах. Давайте посмотрим на ключевые параметры,
которые мы будем использовать:
-
--archive
или-a
Эта опция является псевдонимом для-rlptgoD
который сводится к - выполнять рекурсивный вызов, пытаясь сохранить как можно больше . Это включает время , разрешения и владение, символические ссылки и т. Д. Этот параметр используется почти всегда. Жесткие ссылки не включены, поскольку их отслеживание может быть дорогостоящей операцией. Их можно явно запросить с помощью опции-H
-
--verbose
или-v
и--human-readable
илиh
.
Этот параметр, очень распространенный в программах командной строки, заставляет rsync регистрировать выполняемые операции в стандартном потоке вывода. Следует пропускать в сценариях, где--quiet
или-q
как он не дает вывода. -
--compress
или-z
Этот параметр использует сжатие во время передачи по сети для уменьшения пропускной способности. Очень желательно и почти всегда используется; то же, что и опция--archive
-
--dry-run
или-n
Это заставляет rsync моделировать процесс и сообщать нам, что будет обновлено или удалено без каких-либо действий. Полезно для двойной проверки наших аргументов и работы с конфиденциальными данными. -
--update
или-u
Этот параметр указывает rsync пропускать файлы, которые в месте назначения более новые, чем в источнике. Мы более подробно рассмотрим его эффекты в приведенных ниже примерах. -
--del
Этот параметр указывает rsync удалить все файлы в месте назначения, не включенном в аргумент источника. Полезно для очистки временных файлов, которые нам больше не нужны, но которые были сохранены во время предыдущей синхронизации. -
--inplace
По умолчанию rsync работает путем копирования новых файлов и последующего удаления данных, которые он заменяет. Этот параметр указывает , что для замены InPlace данных , который не займет много места в процессе передачи. Полезно в ситуациях, когда не хватает места для хранения, т.е. перенос на флешку и т. д.
Примеры rsync
$ rsync -avz src dest
Это наиболее распространенный способ вызова rsync
. Сохраняйте и
сжимайте все, регистрируя операции.
Для удаленных мест:
$ rsync -avz src [email protected] :location
Если у вас есть внешний жесткий диск, на котором вы хотите
синхронизировать файлы, но вы используете два устройства для их
редактирования (например, редактирование фотографий на ноутбуке и
настольном компьютере), -u
поскольку вы можете не захотеть, чтобы
rsync
заменить более позднюю работу над любым из них своими старыми
версиями:
$ rsync -avuz src /mnt/my_hdd
rsync с удаленными хостами
Еще одна особенность rsync заключается в том, что он отлично
справляется с удаленными передачами. Использование ssh
по умолчанию
(есть и другие протоколы, у него даже есть собственный), он полностью
интегрирован с связками ключей ssh. Единственное предостережение: rsync
необходимо устанавливать на обоих концах, но с такой повсеместностью,
это почти никогда не проблема.
Выполнение полного резервного копирования системы
Полное резервное копирование системы является обычным делом для многих
пользователей * nix, если они либо особенно обеспокоены своими данными,
либо просто хотят экспериментировать и иметь отказоустойчивые системы.
Мы будем использовать некоторые дополнительные параметры, такие как -A
и -X
которые сохраняют списки управления доступом и расширенные
атрибуты. Некоторые деревья файлов в нашей файловой системе не нужны,
поэтому мы исключим их с помощью параметра --exclude
Мы также удалим
все остаточные файлы, которые мы удалили локально между двумя резервными
копиями:
$ sudo rsync -aAXv --del --exclude={"/dev/*", "/proc/*", "/sys/*", "/tmp/*", "/run/*", "/mnt/*", "/media/*","/lost+found"} dest
Ежедневное резервное копирование с помощью rsync и crontab
Используя crontab
, мы
можем планировать ежедневное, еженедельное, ежемесячное или даже
переменное время резервного копирования. Давайте напишем cron
и
запланируем запуск нашей rsync
каждый день в 00:00
:
0 0 * * * root sudo rsync -aAXv --del --exclude={"/dev/*", "/proc/*", "/sys/*", "/tmp/*", "/run/*", "/mnt/*", "/media/*","/lost+found"} dest
В вашем каталоге /etc
вы можете найти несколько cron.*
, В
зависимости от того, как часто их содержимое должно проверяться и
запускаться. Чтобы создать ежедневную резервную копию всей нашей
системы, мы можем взять daily_backup.sh
выше команду, поместить ее в
файл с именем, скажем, daily_backup.sh и поместить в /etc/cron.daily/
.
Эта команда будет запускаться в определенное время, определенное вашим
crontab
. Убедитесь, что ваш скрипт исполняемый и начинается с
определяющего шебанга.
Заключение
Что не нравится? Минималистичный и легкий инструмент командной строки, который прост в использовании, способен делать много вещей, легко помещается в сценарии и делает то, что делает, довольно быстро. Неудивительно, что rsync стал настолько популярным и доступным. Он довольно хорошо справляется с той единственной задачей, которая действительно нужна каждому, независимо от того, осознает это или нет.