Добавить в корзинуПозвонить
Найти в Дзене
Linux Pages

Копирование файлов между системами с помощью команды rsync

Команда rsync — лучший инструмент резервного копирования по сети, поскольку не имеет перечисленных недостатков команды scp. Используйте команду rsync, чтобы выполнить то же действие, какое выполнялось командой scp, но с несколькими дополнительными параметрами: $ rm -rf /tmp/man1/ $ rsync -avl Fedor@10.140.67.23:/usr/share/man/man1/ /tmp/ Fedor@10.140.67.23's password: *************** sending incremental file list man1/ man1/HEAD.1.gz man1/Mail.1.gz -> mailx.1.gz ... $ rsync -avl Fedor@10.140.67.23:/usr/share/man/man1/ /tmp/ Fedor@10.140.67.23's password: *************** sending incremental file list sent 42362 bytes received 13 bytes 9416.67 bytes/sec total size is 7322223 speedup is 172.80 $ ls -l /usr/share/man/man1/batch* /tmp/man1/batch* lrwxrwxrwx.1 Fedor Fedor 7 Feb 14 17:49 /tmp/man1/batch.1.gz -> at.1.gz lrwxrwxrwx.1 root root 7 Feb 14 17:49 /usr/share/man/man1/batch.1.gz -> at.1.gz После удаления каталога /tmp/man1 запустите команду rsync, чтобы скопировать все файлы в каталог

Команда rsync — лучший инструмент резервного копирования по сети, поскольку не имеет перечисленных недостатков команды scp. Используйте команду rsync, чтобы выполнить то же действие, какое выполнялось командой scp, но с несколькими дополнительными параметрами:

$ rm -rf /tmp/man1/

$ rsync -avl Fedor@10.140.67.23:/usr/share/man/man1/ /tmp/

Fedor@10.140.67.23's password: ***************

sending incremental file list

man1/

man1/HEAD.1.gz

man1/Mail.1.gz -> mailx.1.gz

...

$ rsync -avl Fedor@10.140.67.23:/usr/share/man/man1/ /tmp/

Fedor@10.140.67.23's password: ***************

sending incremental file list

sent 42362 bytes received 13 bytes 9416.67 bytes/sec

total size is 7322223 speedup is 172.80

$ ls -l /usr/share/man/man1/batch* /tmp/man1/batch*

lrwxrwxrwx.1 Fedor Fedor 7 Feb 14 17:49 /tmp/man1/batch.1.gz

-> at.1.gz

lrwxrwxrwx.1 root root 7 Feb 14 17:49 /usr/share/man/man1/batch.1.gz

-> at.1.gz

После удаления каталога /tmp/man1 запустите команду rsync, чтобы скопировать все файлы в каталог /tmp/man1 с помощью параметров -а (рекурсивно архивировать), -v (подробно) и -l (копировать символические ссылки). Затем сразу же выполните команду еще раз и обратите внимание — ничего не скопируется.

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

Обратите также внимание на выходные данные команды ls -l, где символические ссылки были сохранены в файле batch.1.gz и поэтому на файле появилась метка даты/времени. Если понадобится восстановить эти файлы позже, их можно вернуть к первоначальному состоянию.

В таком варианте команда rsync хорошо подходит для резервного копирования.

Но что, если вы хотите зеркально отразить два каталога, сделав содержимое двух структур каталогов абсолютно одинаковым на двух компьютерах? Команды, приведенные далее, иллюстрируют, как создать точное зеркало структуры каталогов на обоих компьютерах, используя каталоги, показанные с предыдущими командами rsync.

Сначала в удаленной системе скопируйте новый файл в копируемый каталог:

# cp /etc/services /usr/share/man/man1

Затем в локальной системе запустите rsync, чтобы скопировать все новые файлы (в данном случае только каталог и новый файл services):

$ rsync -avl Fedor@10.140.67.23:/usr/share/man/man1 /tmp

Fedor@10.140.67.23's password:

***************

sending incremental file list

man1/

man1/services

После этого вернитесь в удаленную систему и удалите новый файл:

$ sudo rm /usr/share/man/man1/services

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

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

$ rsync -avl /usr/share/man/man1 localhost:/tmp

Fedor@10.140.67.23's password: ***************

sending incremental file list

man1/

$ rsync -avl --delete Fedor@10.140.67.23:/usr/share/man/man1 /tmp

Fedor@10.140.67.23's password: ***************

sending incremental file list

deleting man1/services

*SecurityLinux*