среда, 21 мая 2014 г.

rsync: синхронизация файлов

rsync: синхронизация файлов

rsync (англ. Remote Synchronization) — программа для UNIX-подобных систем, которая выполняет синхронизацию файлов и каталогов в двух местах с минимизированием трафика, используя кодировку данных при необходимости. rsync может копировать или отображать содержимое каталога и копировать файлы, опционально используя сжатие и рекурсию. wiki
Общий вид команды
rsync {OPTIONS} {FROM} {TO}
Копирование содержимого директории /local/folder/ с локальной машины на удаленный серверuser@server, в директорию /remote/folder/
rsync -e "ssh -p 22" --progress --partial --force -avz /local/folder/ user@server:/remote/folder/
Важно обратить внимание на последний слэш: если он есть то копируется содержимое папки, иначе - вся директория, вместе с названием.
  • --progress - отображение прогрессбара
  • --partial - сохранение частей файлов после копирования (см. детали алгоритма работы rsync), ускоряет последующие копирования
  • --force - удаление не пустых директорий
  • -e ssh - использование ssh для синхронизации, порт указывается так -e "ssh -p22", настройка подключений по ssh без ввода пароля описана тут
  • -a - алиас для группы ключей (-rlptgoD), сохраняет разные атрибуты файлов/директорий при копировании, включает рекурсию
  • -v - вывод в консоль подробных действий
  • -z - компрессия передаваемых файлов
Другие полезные опции
  • -h - удобный вывод размерностей;
  • --max-size='150k' - синхронизировать только файлы, размер которых меньше 150Kb;
  • --bwlimit=100k - ограничить скорость до 100Kb.
Копирование отдельного файла
rsync --progress --partial -avz /local/file.ext user@remote.server:/remote/folder/
Синхронизация двух локальных папок с удалением из {TO} всего чего нет в {FROM}
rsync -av --delete /local/from/ /local/to/
Тоже предназначение, как и у предыдущей команды, только физически ничего не меняется (симуляция процесса)
rsync -avn --delete /local/from/ /local/to/
Показать разницу между двумя каталогами
rsync -avi /local/folder1/ /local/folder2/
И то, из-за чего мне понадобился rsync: надо синхронизировать из периодически обновляемого хранилища группу файлов в другую директорию. В rsync есть опция --files-from=list.txt которая синхронизирует только файл из списка в list.txt, разделитель - новая строка.
rsync -avh --files-from=list.txt --progress /local/folder1/ /local/folder2/
Несколько других полезных опции rsync
  • --exclude='*.pyc' - исключить файлы совпадающие с маской *.pyc, regexp не поддерживается
  • --exclude-from='files.txt' - исключить файлы, которые упомянуты в files.txt, разделить имен - новая строка
  • -h - human-readable формат для размера файлов
  • -u - если файл в {TO} новее чем в {FROM}, то не заменять
  • --existing - обновление только уже существующих файлов, новые не копируются
  • --max-size='7MB' - не передавать файлы, больше 7 МБайт
Для rsync есть графический интерфейс - Grsync.
Под Ubuntu нужно установить пакет grsync
sudo apt-get install grsync
Синхронизация файлов от root
Если нужно синхронизировать файлы от root'a то понадобятся кое-какие манипуляции.
Способ 1. На удаленной машине разрешаем rsync от root без пароля
# sudo visudo
proft ALL= NOPASSWD:/usr/bin/rsync
Тут proft это пользователь под которым подключаемся.
На локальной машине добавим ключ --rsync-path
sudo rsync -e "ssh -p 22" --progress  --force -avh --rsync-path="sudo rsync" /home/mariadb proft@server:/home/
Способ 2. Подключимся с локальной машины на удаленную с сохранением, на некоторое время, прав на sudo
stty -echo; ssh -p 22 proft@server sudo -v; stty echo
На локальной машине добавим ключ --rsync-path
sudo rsync -e "ssh -p 22" --progress  --force -avh --rsync-path="sudo rsync" /home/mariadb proft@server:/home/

Комментариев нет:

Отправить комментарий