Домашняя » как » Руководство для начинающих по синхронизации данных с Rsync

    Руководство для начинающих по синхронизации данных с Rsync

    Протокол rsync может быть довольно простым в использовании для обычных заданий резервного копирования / синхронизации, но некоторые его более продвинутые функции могут вас удивить. В этой статье мы покажем, как даже самые большие хранилища данных и энтузиасты резервного копирования могут использовать rsync в качестве единого решения для всех своих потребностей в избыточности данных..

    Предупреждение: только продвинутые гики

    Если вы сидите и думаете: «Что за хрень rsync?» Или «Я использую rsync только для действительно простых задач», вы можете проверить нашу предыдущую статью о том, как использовать rsync для резервного копирования ваших данных в Linux, которая дает введение в rsync, проведет вас через установку и продемонстрирует его более основные функции. Как только вы хорошо разберетесь в том, как использовать rsync (если честно, это не так сложно) и освоитесь с терминалом Linux, вы готовы перейти к этому расширенному руководству..

    Запуск rsync в Windows

    Во-первых, давайте разместим наших читателей Windows на той же странице, что и наши гуру Linux. Хотя rsync предназначен для работы в Unix-подобных системах, нет никаких причин, по которым вы не сможете использовать его так же легко в Windows. Cygwin выпускает замечательный Linux API, который мы можем использовать для запуска rsync, поэтому зайдите на их сайт и загрузите 32-битную или 64-битную версию, в зависимости от вашего компьютера..

    Установка проста; вы можете оставить для всех параметров значения по умолчанию, пока не перейдете к экрану «Выбор пакетов»..

    Теперь вам нужно проделать те же шаги для Vim и SSH, но пакеты будут выглядеть немного иначе, когда вы выберите их, поэтому вот несколько скриншотов:

    Установка Vim:

    Установка SSH:

    После того, как вы выбрали эти три пакета, продолжайте нажимать далее, пока не закончите установку. Затем вы можете открыть Cygwin, нажав на значок, который установщик поместил на вашем рабочем столе.

    Команды rsync: от простого к сложному

    Теперь, когда пользователи Windows находятся на одной странице, давайте взглянем на простую команду rsync и покажем, как использование некоторых расширенных переключателей может быстро усложнить ее..

    Допустим, у вас есть куча файлов, для которых требуется резервное копирование, а у кого нет? Вы подключаете свой портативный жесткий диск, чтобы создать резервную копию файлов своего компьютера, и выполните следующую команду:

    rsync -a / home / geek / files / / mnt / usb / files /

    Или, как это будет выглядеть на компьютере Windows с Cygwin:

    rsync -a / cygdrive / c / files / / cygdrive / e / files /

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

    Резервное копирование файлов на внешний жесткий диск и последующее хранение жесткого диска в том же месте, где находится ваш компьютер, - очень плохая идея, поэтому давайте посмотрим, что потребуется для начала отправки файлов через Интернет на другой компьютер ( тот, который вы арендовали, член семьи и т. д.).

    rsync -av --delete -e 'ssh -p 12345' / home / geek / files / [email protected]: / home / geek2 / files /

    Приведенная выше команда отправит ваши файлы на другой компьютер с IP-адресом 10.1.1.1. Он удалит посторонние файлы из места назначения, которых больше нет в исходном каталоге, выведет имена передаваемых файлов, чтобы вы имели представление о том, что происходит, и туннель rsync через SSH на порт 12345.

    --v -e - удалить переключатели являются одними из самых основных и часто используемых; вы уже должны знать о них много, если читаете этот урок. Давайте рассмотрим некоторые другие параметры, которые иногда игнорируются, но невероятно полезны:

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

    Команда rsync с --прогресс переключение в процессе резервного копирования:

    --частичный - Это еще один переключатель, который особенно полезен при передаче больших файлов через Интернет. Если rsync по какой-либо причине прерывается в середине передачи файла, частично переданный файл сохраняется в целевом каталоге, и передача возобновляется с того места, на котором он был прерван, после повторного выполнения команды rsync. При передаче больших файлов через Интернет (скажем, в несколько гигабайт) нет ничего хуже, чем несколько секунд простоя интернета, синий экран или человеческая ошибка, которые могут ускорить передачу файлов и начать все заново..

    -п - этот переключатель объединяет --прогресс а также --частичный, так что используйте его вместо этого, и это сделает вашу команду rsync немного более аккуратной.

    -Z или же --компресс - Этот переключатель заставит rsync сжимать данные файла по мере их передачи, уменьшая объем данных, которые необходимо отправить в пункт назначения. На самом деле это довольно распространенный переключатель, но он далеко не обязателен, он действительно полезен только для передачи между медленными соединениями, и он ничего не делает для файлов следующих типов: 7z, avi, bz2, deb, g, z iso, jpeg, jpg, MOV, MP3, MP4, OGG, RPM, TBZ, TGZ, Z, Zip.

    -час или же --человек читаемый - Если вы используете --прогресс Вы наверняка захотите использовать и этот. То есть, если вы не хотите конвертировать байты в мегабайты на лету. -час switch преобразует все выведенные числа в понятный человеку формат, чтобы вы могли на самом деле понять объем передаваемых данных.

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

    или же --родственник - Этот переключатель должен использоваться, если каталог назначения еще не существует. Мы будем использовать эту опцию позже в этом руководстве, чтобы мы могли создавать каталоги на целевом компьютере с отметками времени в именах папок..

    --исключить из- - Этот переключатель используется для ссылки на список исключений, содержащий пути к каталогам, резервное копирование которых вы не хотите. Ему просто нужен простой текстовый файл с каталогом или путем к файлу в каждой строке..

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

    --статистика - На самом деле это не очень важный переключатель, но если вы системный администратор, вам может быть полезно узнать подробную статистику каждой резервной копии, просто чтобы вы могли отслеживать объем трафика, отправляемого по вашей сети, и тому подобное..

    --журнальный файл - Это позволяет отправлять вывод rsync в файл журнала. Мы определенно рекомендуем это для автоматических резервных копий, в которых вы не можете прочитать вывод самостоятельно. Всегда оставляйте файлы журналов в свободное время, чтобы убедиться, что все работает правильно. Кроме того, это важный параметр, который должен использовать системный администратор, так что вам не придется задумываться о том, как ваши резервные копии потерпели неудачу, когда вы оставили стажера ответственным..

    Давайте теперь посмотрим на нашу команду rsync, когда у нас есть еще несколько добавленных ключей:

    rsync -avzhP - удалить --stats --log-file = / home / geek / rsynclogs / backup.log --exclude-from '/home/geek/exclude.txt' -e 'ssh -p 12345' / home / geek / files / [email protected]: / home / geek2 / files /

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

    Резервные копии снимков

    Если вы случайно удалили файл, вирус повредил любой из ваших файлов или произошло что-то еще, из-за чего ваши файлы были нежелательно изменены, а затем вы запустили сценарий резервного копирования rsync, резервные копии данных были перезаписаны с нежелательными изменениями. Когда такое происходит (не если, а когда), ваше решение для резервного копирования не сделало ничего, чтобы защитить вас от потери данных.

    Создатель rsync понял это и добавил --резервное копирование а также --резервное копирование реж аргументы, чтобы пользователи могли запускать дифференциальные резервные копии. В самом первом примере на веб-сайте rsync показан скрипт, в котором полное резервное копирование выполняется каждые семь дней, а затем изменения этих файлов ежедневно копируются в отдельные каталоги. Проблема этого метода заключается в том, что для восстановления ваших файлов вы должны эффективно восстанавливать их семь раз. Более того, большинство вундеркиндов выполняют резервное копирование несколько раз в день, поэтому вы можете легко иметь более 20 различных каталогов резервных копий в любой момент времени. Мало того, что восстановление ваших файлов теперь является проблемой, но даже просмотр ваших резервных копий данных может занять очень много времени - вам нужно знать, когда в последний раз файл был изменен, чтобы найти его самую последнюю резервную копию. Вдобавок ко всему, неэффективно запускать только еженедельные (или даже реже в некоторых случаях) инкрементные резервные копии.

    Снимки резервных копий на помощь! Резервные копии моментальных снимков представляют собой не что иное, как инкрементные резервные копии, но они используют жесткие ссылки для сохранения файловой структуры исходного источника. Это может быть трудно сначала обернуть голову, поэтому давайте рассмотрим пример.

    Представьте, что у нас запущен скрипт резервного копирования, который автоматически создает резервные копии наших данных каждые два часа. Всякий раз, когда rsync делает это, он называет каждую резервную копию в формате: Backup-month-day-year-time.

    Итак, в конце обычного дня у нас будет список папок в нашем каталоге назначения, например:

    Обойдя любой из этих каталогов, вы увидите каждый файл из исходного каталога точно таким, каким он был в то время. Тем не менее, в любых двух каталогах не будет дубликатов. rsync выполняет это с помощью жестких ссылок через --ссылка-приемник = DIR аргумент.

    Конечно, чтобы иметь эти аккуратно и точно датированные имена каталогов, нам нужно немного улучшить наш скрипт rsync. Давайте посмотрим, что потребуется для создания такого решения для резервного копирования, а затем объясним сценарий более подробно:

    #! / Bin / Баш

    #copy old time.txt to time2.txt

    да | cp ~ / backup / time.txt ~ / backup / time2.txt

    #overwrite старый файл time.txt с новым временем

    echo 'date + ”% F-% I% p”'> ~ / backup / time.txt

    # сделать файл журнала

    echo “”> ~ / backup / rsync-'date + ”% F-% I% p” '. log

    команда #rsync

    rsync -avzhPR --chmod = Du = rwx, Dgo = rx, Fu = rw, Fgo = r - удалить --stats --log-файл = ~ / backup / rsync-'date + ”% F-% I% p ”'. log --exclude-from' ~ / exclude.txt '--link-dest = / home / geek2 / files /' cat ~ / backup / time2.txt '-e' ssh -p 12345 '/ home / geek / files / [email protected]: / home / geek2 / files / 'date + ”% F-% I% p”' /

    # не забудьте скопировать файл журнала и поместить его в резервную копию

    scp -P 12345 ~ / backup / rsync-'cat ~ / backup / time.txt'.log [email protected]: / home / geek2 / files / 'cat ~ / backup / time.txt' / rsync-'cat ~ / резервное копирование / time.txt'.log

    Это будет типичный снимок rsync-скрипта. В случае, если мы вас где-то потеряли, давайте разберем его по частям:

    Первая строка нашего скрипта копирует содержимое time.txt в time2.txt. Канал да должен подтвердить, что мы хотим перезаписать файл. Далее мы берем текущее время и помещаем его в time.txt. Эти файлы пригодятся позже.

    Следующая строка создает файл журнала rsync с именем rsync-date.log (где date - это фактические дата и время).

    Теперь сложная команда rsync, о которой мы вас предупреждали:

    -avzhPR, -e, --delete, --stats, --log-file, --exclude-from, --link-dest - Только переключатели, о которых мы говорили ранее; прокрутите вверх, если вам нужно освежить в памяти.

    --CHMOD = Д = RWX, Dgo = гй, фу = Rw, FGO = г - Это разрешения для каталога назначения. Поскольку мы создаем этот каталог в середине нашего скрипта rsync, нам нужно указать разрешения, чтобы наш пользователь мог записывать в него файлы.

    Использование команд date и cat

    Мы рассмотрим каждое использование команд date и cat внутри команды rsync в порядке их появления. Примечание: мы знаем, что есть и другие способы реализации этой функции, особенно с использованием объявления переменных, но для целей данного руководства мы решили использовать этот метод.

    Файл журнала указан как:

    ~ / backup / rsync-'date + ”% F-% I% p” '. log

    В качестве альтернативы, мы могли бы указать это как:

    ~ / backup / rsync-'cat ~ / backup / time.txt'.log

    В любом случае, --журнальный файл Команда должна быть в состоянии найти ранее созданный датированный файл журнала и записать в него.

    Файл назначения ссылки указан как:

    --link-dest = / home / geek2 / files / 'cat ~ / backup / time2.txt'

    Это означает, что --ссылка-Dest Команде дается каталог предыдущей резервной копии. Если мы выполняем резервное копирование каждые два часа, и в то время, когда мы запускаем этот сценарий, будет 16:00, то --ссылка-Dest Команда ищет каталог, созданный в 14:00, и передает только те данные, которые изменились с тех пор (если есть).

    Повторим, поэтому time.txt копируется в time2.txt в начале скрипта, поэтому --ссылка-Dest команда может ссылаться на это время позже.

    Каталог назначения указан как:

    [email protected]: / home / geek2 / files / 'date + ”% F-% I% p”'

    Эта команда просто помещает исходные файлы в каталог с названием текущей даты и времени..

    Наконец, мы гарантируем, что копия файла журнала находится внутри резервной копии.

    scp -P 12345 ~ / backup / rsync-'cat ~ / backup / time.txt'.log [email protected]: / home / geek2 / files / 'cat ~ / backup / time.txt' / rsync-'cat ~ / резервное копирование / time.txt'.log

    Мы используем безопасное копирование на порт 12345, чтобы взять журнал rsync и поместить его в соответствующий каталог. Чтобы выбрать правильный файл журнала и убедиться, что он оказался в нужном месте, на файл time.txt нужно ссылаться с помощью команды cat. Если вам интересно, почему мы решили использовать cat.txt, а не просто использовать команду date, это потому, что во время выполнения команды rsync могло пройти много времени, поэтому, чтобы убедиться, что у нас есть подходящее время, просто cat текстовый документ, который мы создали ранее.

    автоматизация

    Используйте Cron в Linux или Task Scheduler в Windows для автоматизации вашего скрипта rsync. Одна вещь, о которой вы должны быть осторожны, это убедиться, что вы завершили все запущенные в данный момент процессы rsync, прежде чем продолжить новый. Кажется, что планировщик задач автоматически закрывает все уже запущенные экземпляры, но для Linux вам нужно быть немного более креативным.

    Большинство дистрибутивов Linux могут использовать команду pkill, поэтому просто добавьте следующее в начало вашего скрипта rsync:

    pkill -9 rsync

    шифрование

    Нет, мы еще не закончили. Наконец-то у нас есть фантастическое (и бесплатное!) Решение для резервного копирования, но все наши файлы по-прежнему подвержены краже. Надеюсь, вы создаете резервные копии своих файлов в каком-то месте за сотни миль. Независимо от того, насколько безопасным является это далекое место, кража и взлом всегда могут быть проблемами.

    В наших примерах мы туннелировали весь наш rsync-трафик через SSH, что означает, что все наши файлы зашифровываются при передаче к месту назначения. Тем не менее, мы должны убедиться, что пункт назначения такой же безопасный. Имейте в виду, что rsync шифрует ваши данные только во время их передачи, но файлы открываются, как только они достигают места назначения.

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

    По этой причине лучше / проще всего использовать какой-либо тип шифрования диска, например BitLocker для Windows или dm-crypt для Linux. Таким образом, ваши данные защищены в случае кражи, но файлы могут быть переданы с помощью rsync, и ваше шифрование не повлияет на его производительность. Существуют и другие доступные опции, которые работают аналогично rsync или даже реализуют некоторые его формы, такие как Duplicity, но в них отсутствуют некоторые функции, которые rsync может предложить.

    После того, как вы создали резервные копии снимков в удаленном месте и зашифровали исходные и целевые жесткие диски, покройте себя спиной, чтобы освоить rsync и внедрить самое надежное из возможных решений для резервного копирования данных..