The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Полезные рецепты при работе с rsync
1. Если копируемая директория заканчивается слэшем, то файлы будут скопированы 
в каталог назначения относительно корня изначально заданной директории. Пример:
   rsync -a /dir1/dir2 /dir3 - будет создана иерархия /dir3/dir2/файлы
   rsync -a /dir1/dir2/ /dir3 - будет создана иерархия /dir3/файлы


2. При транзитном переносе файлов через дополнительную машину не нужно забывать, 
что опция "-a" подразумевает трансляцию имен пользователей и групп в локальные uid/gid, 
т.е. скопировав данные с первой машины на вторую,  а потом со второй на локально подключенный 
жесткий диск, предназначенный для третьей машины, получим на третьей машины совершенно иных 
владельцев каталогов и файлов. Не тех которые были в /etc/password первой машины, 
а тех, которые в данным момент в /etc/password второй машины (изменятся типовые пользователи, 
например, web, ftp, dhcp, номера uid/gid  которых отличаются на двух машинах). 
Чтобы этого не произошло нужно использовать опцию "--numeric-ids".

3. Особенности задания файлов исключений ("--exclude-from=файл" или " --exclude
маска1  --exclude маска2").


Для того чтобы исключить из бэкапа содержимое директории, но саму директорию оставить, 
нужно указать в "exclude" файле "/dir/*", а не  "/dir/" 
(под "/dir" подпадет и /dir123, и файл /dir.txt, для директорий указание "/" в конце обязательно).

Звездочка ("*") в шаблоне действует только на имя файла/каталога, чтобы маской охватывалась 
часть пути, включая "/", нужно писать "**".

Шаблон не начинающийся с '/' проверяется с конца строки. Например "/dir/test" будет 
проверен c начала пути, а "dir/test.txt" или "*.log" с конца.
  
Если необходимо исключить все поддиректории в /dir, кроме /dir/best, в список
исключений нужно поместить:
   + /dir/best/
   - /dir/*
При переборе содержимого "exclude" файла, срабатывает первое правило под
которое подпадает текущий путь,
не важно исключающие или нет. В качестве корня выступает директория назначения, 
т.е. "/" в "exclude" файле = "/dir3/dir2" или "/dir3" из первого совета.


4. Запрещение двойного сжатия при передаче данных по SSH.
rsync при задании опции "-z" более оптимально сжимает передаваемые данные, 
поэтому сжатие средствами ssh можно отключить:

   export RSYNC_RSH="ssh -c arcfour -o Compression=no -x"
   rsync -a -z -v --bwlimit=16 /dir1 /dir2 user@test.ru:/dir3/

где, --bwlimit=16 ограничивает пропускную способность при копировании бэкапа в 16 Кбайт в сек.

5. Изменение уровня точности при сравнении локального и удаленного времени модификации файлов. 
Например, для того чтобы считать идентичными файлы время модификации которых отличается 
на 1 секунду необходимо указать: "--modify-window=1".

6. Пример сохранения истории изменения данных. При этом старые измененные или удаленные 
файлы не теряются а перемещаются в директорию /snapshot/дата.

   #!/bin/sh
   snapshot_dir="/snapshot/`date \\+\\%Y_\\%m_\\%d`"
   mkdir $snapshot_dir 
   rsync -a -v --delete --max-delete=1000 --hard-links \\
     --delete-excluded --exclude-from=/etc/rsync_backup.exclude \\
     --backup --backup-dir=$snapshot_dir \\
     / /backup

    RETCODE=$?
    if [ $RETCODE -ne 0 ]; then
        echo "Err code=$RETCODE"| mail -s "FATAL RSYNC BACKUP" admin@test.ru
    fi
    echo RET: $RETCODE
    /bin/chmod 0700 /backup
    /bin/chmod 0700 /snapshot

7. Некоторые полезные опции.

   -v - говорливость, выводит имена обрабатываемых файлов;

   -a - работа в режиме архивирования, сохраняются права доступа и информация о владельцах;

   -H - сохранять жесткие ссылки, оставляя их на другом конце бэкапа;

   -x - не выходить за пределы текущей точки монтирования;

   --progress - показывать сколько процентов осталось до завершения и скорость передачи;

   --delete - удалять из бэкапа файлы, которых уже нет на стороне источника.
      --delete отличается от --delete-after тем, что удаление производится вначале, 
      а не на завершающей стадии процесса бэкапа. --delete-after работает быстрее, 
      так как не требует лишней стадии обхода списка файлов, но требует использования опции --force 
      для обработки таких ситуаций как удаление файла и появление диретории с тем же именем;

   --delete-excluded - удалять части которые уже есть на стороне бэкапа, но появились в списке исключения;

   -n - режим тестирования, реально никаких действий по копированию не производится, только эмуляция;

   -c - использование сверки по контрольным суммам, а не по времени изменения и размеру;

   --compare-dest=DIR - сохранять новые и измененные файлы в отдельной директории, 
      не трогая на время копирования основную директорию назначения, в конце - разом, 
      путем переименования, обновить содержимое бэкапа;

   --link-dest=DIR - использовать жесткие ссылки на файлы в DIR, например, для создания подобия снапшотов;

   --ignore-errors - продолжать копирование и удаление после появления ошибок;

   --max-delete - ограничение максимально числа удаляемых за один раз файлов и каталогов;

   -A - сохранять не только права доступа, но и ACL;

   --files-from=FILE - задать список директорий и файлов для бэкапа в файле;
 
16.09.2008
Ключи: rsync, backup / Лицензия: CC-BY
Раздел:    Корень / Администратору / Система / Диски и файлы / Резервное копирование

Обсуждение [ RSS ]
  • 1.1, PavelR (??), 20:52, 17/09/2008 [ответить]  
  • +/
    полезный рецепт, спасибо
     
  • 1.4, dm2003 (ok), 19:17, 30/08/2012 [ответить]  
  • +/
    После недавнего моего краха (http://softhelp.org.ua/?p=1665) стоит сильно призадуматься о использовании автоматического бекапинга. Плохо что доходит это только с годами.
     
  • 1.5, Андрей (??), 22:59, 26/07/2013 [ответить]  
  • +/
    Спасибо, очень познавательно.
    Вот только вопрос, у Вас написано что можно исключить из директории все кроме:
    + /dir/best/
    - /dir/*
    А можно ли такое провернуть с файлами?
    +/private\ folders.pst
    -*.pst
    ?
    У меня не получилось, может где ошибся, но данный вариант исключил все pst-файлы, а вариант:
    --include-from=include.txt --delete --exclude-from=exclude.txt
    include.txt:
    /private\ folders.pst
    exclude.txt:
    *.pst
    Слил все файлы pst.
    Логики не понимаю, может объясните?
    Сам я не смог найти примера шаблона с использованием файла-списка (

    Заранее благодарен.

     
  • 1.6, Андрей (??), 15:16, 27/07/2013 [ответить]  
  • +/
    Нашел, может кому пригодится )

    + /**/private\ folders.pst
    - *.pst

     
  • 1.7, Классный (?), 16:52, 09/08/2018 [ответить]  
  • +/
    Привет! Спасибо за интересную статью. Уважаемый автор,

    Как скопировать только mp3 файлы из папки с вложеннными папками и большим числом разных файлов, которые в данном случае, не нужны?
    Нужно вытащить только mp3 файлы из всех папок этого дерева папок в новый источник.

    Пробовал разные варианты с --include --exclude:

    rsync -avzh --delete --include '*.mp3' --exclude '*' /pathsource /pathreceiver
    rsync -avzh --delete --include '*mp3' --exclude '*' /pathsource /pathreceiver

    и тд

    Вот такой вывод в терминале:

    sending incremental file list

    sent 18 bytes  received 12 bytes  60.00 bytes/sec
    total size is 0  speedup is 0.00

    Не копирует
    Интересная задача.
    Подскажи как сделать

     
  • 1.8, eliko (?), 00:44, 02/09/2019 [ответить]  
  • +/
    привет, я хотел синхронизировать уже скопированную папку (через cp -r) с помощью команды rsync -rvh dir1 /root/dir2. после синхронизации папка dir2 получилось намного большего размера чем dir1. я хочу чтобы они были одинакового размера. вопрос: как мне это сделать?
     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру