Rsync
rsync -a <что копировать> <куда копировать>
-a— archive mode — это набор сразу несколькких параметров , включающих в себя рекурсивность, сохранение прав, групп, времени, копирование симлинков и специальных файлов.
При копировании каталогов (а не файлов) следует обратить внимание на знак / замыкающий имя каталога-источника, т.к. rsync будет интерпретировать результат по-разному:
rsync -a каталог-источник каталог-назначения/ rsync -a каталог-источник/ каталог-назначения/
Наличие завершающих слешей / обязательно, иначе результат копирования будет содержать корневую папку каталог-источник внутри каталога-назначения.
Копирование файла а из dir1 в dir2:
rsync -a ~/dir1/a ~/dir2/
Копирование всех файлов из dir1 в dir2:
rsync -a ~/dir1/ ~/dir2/
Копирование самой директории dir1 (со всем содержимым) в dir2:
rsync -a ~/dir1 ~/dir2/
Параметр -z или --compress:
rsync -az <что копировать> <куда копировать>
Работает лучше, чем обычное архивирование, потому что интеллектуально сжимает только те блоки, которые будут копироваться.
-v,--verbose— отображдение большего количества информации-h,--human-readable— отображение чисел в человекопонятном формате--progress— прогресс копирования
Соответственно, более информативный вид команды:
rsync -avh --progress <что копировать> <куда копировать>
По умолчанию rsync копирует только:
- новые файлы, которых еще нету на месте назначения,
- измененные файлы, отличающиеся от тех, что есть на месте назначения.
Т.е. уже по умолчанию он хорошо работает и корректно синхронизирует место назначения с источником, не гоняя по сети ненужные файлы.
В ситуации, когда на месте назначения могут быть файлы более новые, чем на источнике, и их нужно сохранить, следует добавить параметр -u (--update).
Также в этой ситуации может помочь двусторонняя синхронизация (объединить содержимое dir1 и dir2):
rsync -a ~/dir1/ ~/dir2/ && rsync -a ~/dir2/ ~/dir1/
По умолчанию rsync не удаляет на месте назначения файлы, которые были удалены на источнике. Это поведение можно изменить с помощью параметра --delete.
Точная копия каталогов (с удалением всех файлов из dir2, которых нет в dir1):
rsync -a --delete ~/dir1/ ~/dir2/
Исключить каталоги, синхронизация которых не требуется (например, каталог dir3, находящийся в dir1, при копировании последнего в dir2 будет пропущен):
rsync -a ~/dir1/ --exclude="./~dir3/" ~/dir2/
Исключение нескольких каталогов делается повторением парметра --exclude. Примеры исключений из реальной жизни:
--exclude="- mod-tmp/" --exclude="- munin/" --exclude="- nginx-logs/" --exclude="- httpd-logs/" --exclude="- mysql_db_error.log"
По умолчанию в rsync в случае разрыва соединения частично переданные файлы удаляются. Чтобы изменить это, необходимо добавить параметр --partial.
Есть короткий параметр -P, который включает в себя два других параметра:
--partial— сохранять частично скопированные файлы.--progress— отображать прогресс передачи файлов.
Учитывайте, что в результате у вас могут образовываться в месте назначения файлы, скопированные лишь частично.
Можно использовать параметр --partial-dir=DIR (например --partial-dir=.rsync-partial), чтобы в место назначения попадали только полностью скопированные файлы, а частично скопированные хранились в отдельной папке.
Параметр --append-verify сравнивает файлы на обоих концах передачи по контрольным суммам. Этот параметр позволяет сделать полноценную и безопасную синхронизацию даже в случае, если был обрыв передачи при предыдущем копировании.
При использовании --append-verify rsync будет вести себя так же, как и всегда, для всех файлов одинакового размера. Если файлы отличаются модификацией или датой, он перезапишет цель файлом источника без дальнейшего изучения этих файлов.
Параметр --checksum сравнивает содержимое (контрольные суммы) каждой пары файлов с одинаковым именем и размером, т.е. это более долгий вариант сравнения.
Итого: для копирования больших файлов с возможностью докачки нужно использовать ключи --partial (или -P, или --partial-dir=.rsync-partial) и --append-verify. Параметр --partial говорит о том, что нужно оставлять даже не полностью скопированные файлы, а --append-verify говорит о том, что если файл уже есть нужно проверить, возможно он не полностью синхронизирован, и синхронизировать остаток.
Для использования SSH не нужно никаких дополнительных параметров типа -e ssh. Если цель указывается в виде user@host:/path/to/files, то и так по умолчанию будет использован SSH.
Параметр -e ssh может потребоваться, если нужно указать какие-то специфические особенности использования SSH:
- указать нестандартный порт SSH:
-e 'ssh -p 2222' - указать нестандартное расположение приватного ключа:
-e 'ssh -i /path/to/private/key/file.pem'
rsync -avzh --delete --progress /var/www/observer.test/html/ zinamuseum@zinahost.com:www/observer.megalit.org/
Для доступа к NAS снаружи нужно в роутере прописать перенаправление TCP порта 873.
Указывать наш NAS rsync-у будем в виде
rsync@134.249.168.79::NetBackup/
Копируем директорию на удаленную систему
rsync -av /tmp/photos rsync@134.249.168.79::NetBackup/
rsync -av --progress /var/www/ rsync@134.249.168.79::NetBackup/91.197.131.59/2014-11-07 &
rsync -zauvP --exclude="- cache/**" /var/www/s_techlguagmailc/ root@77.120.120.73:/var/www/s_techlguagmailc/
rsync -zauvP --exclude="- cache/" --exclude="- mod-tmp/" /var/www/s_techlguagmailc/ root@77.120.120.73:/var/www/s_techlguagmailc/
rsync -zauvP --exclude="- cache/" /var/www/ rsync@134.249.168.79::NetBackup/91.197.131.59/2014-11-07
Находимся на новом сервере, копируем файлы сайта со старого сервера host.com в папку old:
rsync --recursive --perms --times --partial --progress --verbose USER@HOST.COM:/var/www/USER/data/www old
rsync -rptPv USER@HOST.COM:www old
-z— compress file data during the transfer-a— archive mode; equals-rlptgoD(no-H,-A,-X)-r,--recursive— recurse into directories-l— copy symlinks as symlinks-p,--perms— preserve permissions-t,--times— preserve modification times-g— preserve group-o— preserve owner (super-user only)-D— preserve device files (super-user only) and preserve special files
-u,--update— skip files that are newer on the receiver-v,--verbose— increase verbosity--partial— keep partially transferred files--progress— show progress during transfer-P— same as--partial --progress— keep partially transferred files, show progress during transfer
rsync -avP --exclude="- cache/" --exclude="- default/files/" --exclude="- ckfinder" /var/www/obzor/data/www/obzor.com.ua/ /var/www/obzor/data/www/beta.obzor.lg.ua/
или, если мы находимся внутри папки www:
rsync -avP --exclude="- cache/" --exclude="- default/files/" --exclude="- ckfinder" obzor.com.ua/ beta.obzor.lg.ua/
screen команда ctrl-a d
Вернуть из фона:
screen -list (видим имя_процесса) screen -r имя_процесса
#!/bin/sh
LOCAL="/var/www/example.test/html/" # site directory on the local machine
USER=username
HOST=zinahost.com
DIR="www/example.com/" # the directory on hosting server where your web site files should go
rsync -azv --delete --progress ${LOCAL} ${USER}@${HOST}:${DIR}
exit 0
Чтобы rsync не спрашивал пароль, нужно настроить авторизацию SSH по ключу.