Содержание
Rsync - синхронизация с удаленным сервером
Готовая строка:
rsync -azP username@remote_host:/home/user/site /home/sites/
Подробнее:
Синхронизация с удаленной системой проста, если есть SSH-доступ к удаленному компьютеру и на обеих системах установлена Rsync. Если вам нужно настроить ключи SSH, нажмите здесь.
Установив и проверив доступ SSH между двумя машинами, можно синхронизировать папку dir1 с удаленным компьютером при помощи следующего синтаксиса (обратите внимание, что в данном случае нужно передать непосредственно саму папку, поэтому косую черту следует опустить):
rsync -a ~/dir1 username@remote_host:destination_directory
Данная процедура называется «push», так как она «толкает» каталог из локальной системы на удаленную.
Противоположная ей операция зовется «извлечением» («pull»). Она используется для синхронизации удаленного каталога с локальной системой. Если бы dir1 находился не на локальной, а на удаленной системе, синтаксис выглядел бы так:
rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
Как в «ср» и подобных инструментах, первый аргумент всегда указывает на источник, а второй – на назначение.
Полезные опции Rsync
Если надо использовать не стандартный порт ssh (отличный от 22)
Добавляем параметр -e «ssh -p 1234» примерно так:
rsync -a -e "ssh -p 1234" username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
Rsync предоставляет множество команд для изменения стандартного поведения утилиты. Некоторые из наиболее необходимых флагов уже рассматривались.
При передаче еще не сжатых файлов, таких как текстовые файлы, можно уменьшить сетевой трафик, сжимая файлы при помощи параметра -z:
rsync -az source destination
Флаг «-P» также очень полезен. Он совмещает флаги «—progress» и «—partial». Первый выводит индикатор выполнения передачи, а второй позволяет возобновить прерванную передачу:
rsync -azP source destination sending 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) file100 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=97/101) file11 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=96/101) . . .
Если запустить команду снова, будет выведен более короткий результат, потому что никакие изменения не были внесены.
Это иллюстрирует способность rsync использовать время последнего изменения, чтобы определить, были ли внесены изменения в файлы.
rsync -azP source destination sending incremental file list sent 818 bytes received 12 bytes 1660.00 bytes/sec total size is 0 speedup is 0.00
Если обновить время последнего изменения некоторых файлов, можно увидеть, что rsync повторно копирует только измененные файлы:
touch dir1/file{1..10} rsync -azP source destination sending 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». Прежде чем применять данный флаг, используйте команду «—dry-run» и проведите тестирование, чтобы предотвратить потерю данных.
rsync -a --delete source destination
При необходимости исключить некоторые файлы или каталоги, расположенные в синхронизируемом каталоге, можно внести их в разделенный запятыми список при помощи команды «—exclude=»:
rsync -a --exclude=pattern_to_exclude source destination
Если шаблон исключений был определен, при помощи команды «—include=» исключение можно снять, установив другой шаблон:
rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
Выводы
Rsync может упростить передачу файлов по сетевым соединениям и повысить устойчивость локальной синхронизации каталогов. Гибкость данной утилиты делает ее хорошим инструментом для выполнения различных операций на уровне файлов.
Владение Rsync позволяет проектировать сложные операции резервного копирования, а также получить многоуровневый контроль над тем, что и как передается.
Обсуждение