It-e.RU
Цифровой двигатель вашего бизнеса.

Примеры использования rsync

Примеры использования rsync

Rsync - утилита, используемая для синхронизации директорий. Директории могут находиться как на локальной так и на удаленной машине.


Rsync - утилита, используемая для синхронизации директорий. Директории могут находиться как на локальной так и на удаленной машине.

Возможности rsync:

  • Скорость: первый раз скорость синхронизации ничем не отличается от других методов копирования данных, но в дальнейшем rsync будет передавать в место назначения только измененные данные, что существенно ускоряет проыесс синхронизации.
  • Безопасность: rsync поддерживает шифрование, используя ssh во время передачи данных.
  • Экономия: rsync использует компрессию для передачи данных
  • Права: rsync не требует повышенных прав для установки и запуска.
Синтаксис:
  • rsync options source destination
Перейдем к практике:
  • Синхронизация двух директорий на одной машине.
  • # rsync -zvr dir1 dir2
    sending incremental file list
    dir1/
    dir1/file1
    dir1/file2
    dir1/file3
    dir1/file4
    dir1/file5
    dir1/file6
    dir1/file7
    
    sent 348 bytes  received 149 bytes  994.00 bytes/sec
    total size is 0  speedup is 0.00

    • -z включим компрессию
    • -v подробный вывод
    • -r рекурсия
    Во время копирования атрибуты файлов не сохранились.
  • Синхронизация двух директорий на одной машине в сохранением атрибутов создания файлов
  • Для сохранения атрибутов используют опцию -a. Опция -a поддерживает рекурсию, сиволические ссылки, права, временные метки, владельца.
    # rsync -zvra dir1 dir2
    sending incremental file list
    dir1/
    dir1/file1
    dir1/file2
    dir1/file3
    dir1/file4
    dir1/file5
    dir1/file6
    dir1/file7
    
    sent 365 bytes  received 149 bytes  1028.00 bytes/sec
    total size is 0  speedup is 0.00
    As you see below, rsync preserved timestamps during sync.

    Теперь скопировались и атрибуты.
  • Сихронизируем один файл
  • Скопируем один определенный файл:
    # rsync -v dir1/file5 dir2/
    file5
    
    sent 65 bytes  received 31 bytes  192.00 bytes/sec
    total size is 0  speedup is 0.00
    
  • Синхронизируем локальную директорию и удаленную
  • # rsync -avz dir1 login@gw:
    Password:
    sending incremental file list
    dir1/
    dir1/file1
    dir1/file2
    dir1/file3
    dir1/file4
    dir1/file5
    dir1/file6
    dir1/file7
    
    sent 365 bytes  received 149 bytes  114.22 bytes/sec
    total size is 0  speedup is 0.00
    
    Мы синхронизировали локальную директорию и удаленную. Для удаленного севрера мы определили username@machinename:path. Понадобилось ввести пароль. Если не хотелось бы вводить пароль, то можно настроить беспарольную ssh аунтификацию.
  • Синхронизируем удаленную директорию и локальную
  • # rsync -avz makky@gw:dir1 dir1 
    Password:
    receiving incremental file list
    dir1/
    dir1/file1
    dir1/file2
    dir1/file3
    dir1/file4
    dir1/file5
    dir1/file6
    dir1/file7
    
    sent 148 bytes  received 370 bytes  115.11 bytes/sec
    total size is 0 speedup is 0.00


    Обратите на использование "/" и ".": $ rsync -avz sysop@192.168.12.254:dir .
    $ rsync -avz sysop@192.168.12.254:dir/ .

    В первом примере, удаленный объект будет скопирован в текущую директорию. Во втором случае, содержимое удаленного объекта будет синхронизировано с содержимым текущей директории. Этот приём можно использовать не только с rsync, но и с другими программами, которые работают с файлами в unix.

  • Синхронизация посредством удаленного шелла
  • Для синхронизации посредством удаленного шела необходимо использовать ключ -e. Например,
    # rsync -avz -e ssh sysop@192.168.12.254:/dir1/ /dir1
    или вот таккая конструкция:
    $ rsync -avz -e ssh sysop@192.168.12.254:/dir1/ /dir1
    $ rsync -avz -e "ssh -l sysop -P 12345" 192.168.12.254:/dir1/ /dir1

  • Синхронизация, не затрагивающая измененные файлы в удаленной директории
  • Иногда требуется синхронизировать директории, но при этом в удаленной директории могут быть более новые файлы. Для такого рода синхронизации используется ключ -u. Пример приводить не буду.

  • Синхронизация только дерева каталогов без файлов
  • Используется ключ -d

  • Вывод статистики текущей синхронизации
  • Во время синхронизации, содержащей большие файлы, часто хотелось бы знать "как там дела и ну что там у нас =)". Для этого задействуем ключ --progress

  • Дописывание файла
  • Во время синхронизации очень больших файлов возможны разрывы связи, после которых rsync будет начинать снова и снова. Можно использовать ключ --partial, тогда при восстановлении синхронизации большого файла, rsync начнет с места разрыва.

  • Удаление файлов в удаленной директории, которых нет в локальной
  • Для этого используется ключ --delete. При использовании этого ключа в удаленной директории rsync удалит файлы, которых нет в локальной директории.

  • Синхронизация только существующих файлов
  • --existing

  • Сихронизация с подробным выводом изменившихся свойств
  • Чтобы rsync выводил разницу между объектами используется ключ -i. Например так:
    >f.st.... Dir1
    .f....og. Dir2

    Разберем вывод:
    f изменение файла
    s изменение размера
    t изменение времени создания
    o смена владельца
    g смена группы

  • Синхронизация выборок
  • Rsync прекрасно работает в шаблонами включения и исключения. Например, нам необходимо синхронизировать только все объекты, имя которых начинается с "P":
    $ rsync -avz --include 'P*' --exclude '*' sysop@192.168.12.254:/dir1 /dir1

    В данной конструкции мы исключаем сихронизацию всех объектов, но включаем сихронизацию всех объектов "P*".

  • Не передавать файлы больше определенного размера
  • --max-size='1024K' M мегабайты G гигабайты

  • Синхронизация на определенной скорости
  • --bwlimit="1024K"

  • Тестирование сихронизации
  • Любые синхронизации особенно с удалением объектов стоит проверять. Почти всегда я симулирую сихронизацию, используя ключ -–dry-run или -n.

    В конце небольшой подарок читателям. Это скрипт, который позволяет автоматически возобновлять передачу данных, если сессия прервалась. Это удобно для резервирования данных или, например, в случаях очень медленного и нестабильного канала. Линстинг:
    #!/bin/sh
    I=0
    MAX_RESTARTS=10000 # количество возобновлений
    LAST_EXIT_CODE=1
    while [ $I -le $MAX_RESTARTS ]
    do
      I=$(( $I + 1 ))
      echo $I. start of rsync
      rsync -av -e "ssh -i /home/max/.ssh/host" --progress --partial --bwlimit=2048 /usr/local/www/my.tar max@a.b.c.d:my.tar
      LAST_EXIT_CODE=$?
      if [ $LAST_EXIT_CODE -eq 0 ]; then
        break
      fi
    done
    
    if [ $LAST_EXIT_CODE -ne 0 ]; then
      echo rsync failed for $I times.
    else
      echo rsync successful after $I times.
    fi
    
    Позднее я модифицирую скрипт для принятия параметров, но пока привожу его в таком виде. К слову, этот скрипт можно модифицировать для автостарта обработки чего-нибудь в какой-нибудь другой программе.

    Пожалуйста, уважайте труд автора, при копировании материалов сохраняйте ссылку на источник!

    Комментарии (0)



    Добавление комментариев закрыто.