Введение
Rsync, что означает удаленная синхронизация, является инструментом для синхронизации файлов между удаленными и локальными системами. Он использует алгоритм для минимизации объема копируемых данных, перемещая только те части файлов, которые изменились.
В этом руководстве мы определим Rsync, рассмотрим синтаксис при использовании rsync
, объясним, как использовать Rsync для синхронизации с удаленной системой, а также другие доступные варианты.
Разверните ваши фронтенд-приложения из GitHub с помощью платформы приложений DigitalOcean. Позвольте DigitalOcean масштабировать ваше приложение.
Предварительные требования
Для практики использования rsync
для синхронизации файлов между локальной и удаленной системами вам понадобятся две машины, которые будут действовать как ваш компьютер и удаленная машина. Эти две машины могут быть виртуальными частными серверами, виртуальными машинами, контейнерами или персональными компьютерами, если они были правильно настроены.
Если вы планируете следовать этому руководству, используя серверы, было бы разумно настроить их с административными пользователями и настроить брандмауэр на каждом из них. Чтобы настроить эти серверы, следуйте нашему Руководству по начальной настройке сервера.
Независимо от того, какие типы машин вы используете для следования этому руководству, вам нужно будет создать SSH-ключи на обоих из них. Затем скопируйте открытый ключ каждого сервера в файл authorized_keys
другого сервера, как описано в Шаге 2 этого руководства.
Это руководство было протестировано на машинах с установленной Ubuntu 20.04, хотя в общем случае оно должно работать с любыми компьютерами, работающими под управлением операционной системы на базе Linux и имеющими установленный rsync
.
Определение Rsync
Rsync – это очень гибкий средство синхронизации, доступное через сеть. Благодаря его широкому распространению в Linux и подобных Unix-системах и его популярности как инструмента для системных скриптов, он включен по умолчанию в большинство дистрибутивов Linux.
Понимание синтаксиса Rsync
Синтаксис rsync
работает аналогично другим инструментам, таким как ssh
, scp
и cp
.
Сначала перейдите в ваш домашний каталог, запустив следующую команду:
Затем создайте тестовый каталог:
Создайте еще один тестовый каталог:
Теперь добавьте несколько тестовых файлов:
Теперь есть каталог с именем dir1
с 100 пустыми файлами в нем. Подтвердите, перечислив файлы:
Outputfile1 file18 file27 file36 file45 file54 file63 file72 file81 file90
file10 file19 file28 file37 file46 file55 file64 file73 file82 file91
file100 file2 file29 file38 file47 file56 file65 file74 file83 file92
file11 file20 file3 file39 file48 file57 file66 file75 file84 file93
file12 file21 file30 file4 file49 file58 file67 file76 file85 file94
file13 file22 file31 file40 file5 file59 file68 file77 file86 file95
file14 file23 file32 file41 file50 file6 file69 file78 file87 file96
file15 file24 file33 file42 file51 file60 file7 file79 file88 file97
file16 file25 file34 file43 file52 file61 file70 file8 file89 file98
file17 file26 file35 file44 file53 file62 file71 file80 file9 file99
У вас также есть пустой каталог с именем dir2
. Чтобы синхронизировать содержимое dir1
с dir2
на том же системе, выполните rsync
и используйте флаг -r
, который означает “рекурсивно” и необходим для синхронизации каталогов:
Другой вариант – использовать флаг -a
, который является комбинированным флагом и означает “архив”. Этот флаг синхронизирует рекурсивно и сохраняет символические ссылки, специальные и устройственные файлы, времена изменения, группы, владельцев и разрешения. Он используется чаще, чем -r
, и является рекомендуемым флагом для использования. Выполните ту же команду, что и в предыдущем примере, на этот раз с использованием флага -a
:
Обратите внимание, что в конце первого аргумента в синтаксисе предыдущих двух команд есть косая черта (/
) и выделена здесь:
Эта косая черта указывает на содержимое dir1
. Без косой черты dir1
, включая каталог, будет размещен внутри dir2
. Результатом будет иерархия, подобная следующей:
~/dir2/dir1/[files]
Еще одним советом является дважды проверить ваши аргументы перед выполнением команды rsync
. Rsync предоставляет метод для этого, передавая опции -n
или --dry-run
. Флаг -v
, что означает “подробно”, также необходим для получения соответствующего вывода. Вы будете комбинировать флаги a
, n
и v
в следующей команде:
Outputsending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .
Теперь сравните этот вывод с тем, который вы получите, когда уберете завершающий слэш, как в следующем:
Outputsending incremental file list
dir1/
dir1/file1
dir1/file10
dir1/file100
dir1/file11
dir1/file12
dir1/file13
dir1/file14
dir1/file15
dir1/file16
dir1/file17
dir1/file18
. . .
Этот вывод теперь демонстрирует, что передан сам каталог, а не только файлы внутри каталога.
Использование Rsync для синхронизации с удаленной системой
Для использования rsync
для синхронизации с удаленной системой вам нужен только настроенный доступ по SSH между вашим локальным и удаленным компьютерами, а также установленный rsync
на обоих системах. После проверки доступа по SSH между двумя компьютерами вы можете синхронизировать папку dir1
из предыдущего раздела с удаленной машиной, используя следующий синтаксис. Обратите внимание, что в этом случае вы хотите передать фактический каталог, поэтому вы опустите завершающий слэш:
Этот процесс называется операцией push, потому что он “переносит” каталог с локальной системы на удаленную систему. Противоположная операция – pull, используется для синхронизации удаленного каталога с локальной системой. Если каталог dir1
находился бы на удаленной системе вместо вашей локальной системы, синтаксис был бы следующим:
Как и в случае с командой cp
и аналогичными инструментами, исходный объект всегда является первым аргументом, а целевой объект – всегда вторым.
Использование других опций Rsync
Rsync предоставляет множество опций для изменения поведения утилиты по умолчанию, таких как флаговые опции, о которых вы узнали в предыдущем разделе.
Если вы передаете файлы, которые еще не были сжаты, как текстовые файлы, вы можете уменьшить сетевой трафик, добавив сжатие с помощью опции -z
:
Флаг -P
также полезен. Он объединяет флаги --progress
и --partial
. Первый флаг обеспечивает строку состояния для передач, а второй флаг позволяет возобновлять прерванные передачи:
Outputsending incremental file list
created directory destination
source/
source/file1
0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=99/101)
sourcefile10
0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=98/101)
source/file100
0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=97/101)
source/file11
0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=96/101)
source/file12
0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=95/101)
. . .
Если вы снова запустите команду, вы получите сокращенный вывод, поскольку изменения не были внесены. Это иллюстрирует способность Rsync использовать времена модификации для определения внесенных изменений:
Outputsending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00
Допустим, вы хотели бы обновить время модификации некоторых файлов с помощью команды, подобной следующей:
Затем, если вы снова запустите rsync
с -azP
, вы заметите в выводе, как Rsync интеллектуально перекопирует только измененные файлы:
Outputsending incremental file list
file1
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101)
file10
0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101)
file2
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=87/101)
file3
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=76/101)
. . .
Чтобы сохранить два каталога действительно синхронизированными, необходимо удалить файлы из каталога назначения, если они удалены из источника. По умолчанию rsync
ничего не удаляет из каталога назначения.
Вы можете изменить это поведение с помощью параметра --delete
. Прежде чем использовать этот параметр, вы можете использовать -n
, параметр --dry-run
, для выполнения теста и предотвращения нежелательной потери данных:
Если вы предпочитаете исключить определенные файлы или каталоги, находящиеся внутри синхронизируемого каталога, вы можете сделать это, указав их в списке, разделенном запятыми, после параметра --exclude=
:
Если у вас есть указанный шаблон для исключения, вы можете отменить это исключение для файлов, соответствующих другому шаблону, используя параметр --include=
:
Наконец, параметр --backup
Rsync можно использовать для создания резервных копий важных файлов. Он используется совместно с параметром --backup-dir
, который указывает каталог, где должны храниться файлы резервных копий:
Заключение
Rsync может оптимизировать передачу файлов по сетевым соединениям и добавить надежность синхронизации локальных каталогов. Гибкость Rsync делает его хорошим вариантом для множества операций на уровне файлов.
A mastery of Rsync allows you to design complex backup operations and obtain fine-grained control over how and what is transferred.