Как использовать команду Rsync в Unix

Введение Цифровая революция во многом изменила нашу жизнь. В настоящее время наши фотоальбомы, музыкальные коллекции, книжные полки и т. Д. Являются цифровыми - двоичные файлы, записанные на диск. Наша жизнь и работа делятся между множеством устройств. У компаний есть зоны разработки, тестирования и тестирования, и к ним подключены десятки разработчиков. Из-за этого сдвига в динамике нашей жизни возникли две проблемы: как сохранить целостность наших данных и как синхронизировать их на всех наших устройствах?

Вступление

Цифровая революция во многом изменила нашу жизнь. В настоящее время наши фотоальбомы, музыкальные коллекции, книжные полки и т. Д. Являются цифровыми - двоичные файлы, записанные на диск . Наша жизнь и работа делятся между множеством устройств. У компаний есть зоны разработки, тестирования и тестирования, и к ним подключены десятки разработчиков.

Из-за этого сдвига в динамике нашей жизни возникли две проблемы: как сохранить целостность наших данных и как синхронизировать их на всех наших устройствах? Откройте для себя 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 стал настолько популярным и доступным. Он довольно хорошо справляется с той единственной задачей, которая действительно нужна каждому, независимо от того, осознает это или нет.

comments powered by Disqus