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

Оглавление:

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

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

Видео: Руководство для новичков по синхронизации данных с помощью Rsync
Видео: Как узнать IP адрес сайта | 3 способа определения IP сайта - YouTube 2024, Апрель
Anonim
Протокол rsync может быть довольно простым в использовании для обычных заданий резервного копирования / синхронизации, но некоторые из его более сложных функций могут вас удивить. В этой статье мы покажем, как даже самые большие накопители данных и энтузиасты резервного копирования могут использовать rsync в качестве единого решения для всех потребностей в избыточности данных.
Протокол rsync может быть довольно простым в использовании для обычных заданий резервного копирования / синхронизации, но некоторые из его более сложных функций могут вас удивить. В этой статье мы покажем, как даже самые большие накопители данных и энтузиасты резервного копирования могут использовать rsync в качестве единого решения для всех потребностей в избыточности данных.

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

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

Запуск rsync в Windows

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

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

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

Установка Vim:

Установка SSH:
Установка SSH:
После того, как вы выбрали эти три пакета, продолжайте нажимать до тех пор, пока вы не закончите установку. Затем вы можете открыть Cygwin, щелкнув значок, который установщик разместил на вашем рабочем столе.
После того, как вы выбрали эти три пакета, продолжайте нажимать до тех пор, пока вы не закончите установку. Затем вы можете открыть 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.

-a -v -e --delete

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

--progress

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

Команда rsync с

--progress

в качестве резервной копии:

Image
Image

--partial

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

-P

- этот переключатель сочетает

--progress

а также

--partial

поэтому используйте его вместо этого, и это сделает вашу команду rsync немного опрятной.

-z

или же

--compress

- Этот коммутатор сделает rsync сжимать данные файла по мере его переноса, уменьшая объем данных, которые должны быть отправлены адресату. Это на самом деле довольно распространенный коммутатор, но он далек от существенного, только очень выгодно для вас при переносе между медленными соединениями, и он ничего не делает для следующих типов файлов: 7z, avi, bz2, deb, g, z iso, jpeg, jpg, mov, mp3, mp4, ogg, rpm, tbz, tgz, z, zip.

-h

или же

--human-readable

- Если вы используете

--progress

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

-h

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

-n

или же

--dry-run

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

-R

или же

--relative

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

--exclude-from

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

--include-from

- Похожий на

--exclude-from

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

--stats

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

--log-file

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

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

rsync -avzhP --delete --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 понял это и добавил

--backup

а также

--backup-dir

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

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

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

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

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

--link-dest=DIR

аргумент.

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

#!/bin/bash

#copy old time.txt to time2.txt

yes | cp ~/backup/time.txt ~/backup/time2.txt

#overwrite old time.txt file with new time

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

#make the log file

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

#rsync command

rsync -avzhPR --chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r --delete --stats --log-file=~/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”`/

#don’t forget to scp the log file and put it with the backup

scp -P 12345 ~/backup/rsync-`cat ~/backup/time.txt`.log [email protected]:/home/geek2/files/`cat ~/backup/time.txt`/rsync-`cat ~/backup/time.txt`.log

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

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

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

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

-avzhPR, -e, --delete, --stats, --log-file, --exclude-from, --link-dest

- Просто переключатели, о которых мы говорили раньше; прокрутите вверх, если вам нужно обновить.

--chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r

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

Использование команд даты и кота

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

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

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

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

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

В любом случае,

--log-file

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

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

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

Это означает, что

--link-dest

команде присваивается каталог предыдущей резервной копии. Если мы выполняем резервное копирование каждые два часа, и это 4:00 вечера в то время, когда мы запускали этот скрипт,

--link-dest

команда ищет каталог, созданный в 2:00 PM, и только передает данные, которые были изменены с тех пор (если они есть).

Чтобы повторить, поэтому time.txt копируется в time2.txt в начале скрипта, поэтому

--link-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 ~/backup/time.txt`.log

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

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

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

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

pkill -9 rsync

шифрование

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

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

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

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

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

Рекомендуемые: