Назад | Перейти на главную страницу

Любимые советы и хитрости rsync

Чем больше я использую rsync тем более что я понимаю, что это швейцарский армейский нож для передачи файлов. Есть так много вариантов. Я недавно узнал что ты можешь идти --remove-source-files и он удалит файл из источника, когда он будет скопирован, что делает его больше похожим на ход, чем на копирование программы. :)

Какие у вас любимые маленькие советы и хитрости rsync?

Попробуйте использовать rsync версии 3, если вам нужно синхронизировать много файлов! V3 создает список файлов постепенно, работает намного быстрее и использует меньше памяти, чем версия 2.

В зависимости от вашей платформы это может иметь большое значение. В OSX версии 2.6.3 потребовалось бы более часа или сбой при попытке создать индекс из 5 миллионов файлов, в то время как версия 3.0.2, которую я скомпилировал, сразу начала копирование.

С помощью --link-dest для создания экономичных резервных копий на основе моментальных снимков, при которых создается впечатление, что у вас есть несколько полных копий данных резервного копирования (по одной для каждого запуска резервного копирования), но файлы, которые не изменяются между запусками, жестко связаны вместо создания новых копий, экономя место.

(на самом деле я все еще использую rysnc-с последующим-cp -al метод, который достигает того же, см. http://www.mikerubel.org/computers/rsync_snapshots/ для старого, но все еще очень хорошего изучения как техник, так и связанных с ними проблем)

Одним из основных недостатков этого метода является то, что если файл поврежден из-за ошибки диска, он также поврежден во всех снимках, связанных с этим файлом, но у меня также есть автономные резервные копии, которые в значительной степени защищают от этого. Другая вещь, на которую следует обратить внимание, - это то, что в вашей файловой системе достаточно inodes, иначе они закончатся до того, как у вас действительно закончится дисковое пространство (хотя у меня никогда не было проблем с настройками по умолчанию ext2 / 3).

Кроме того, никогда не забывайте очень полезные --dry-run для немного здоровой паранойи, особенно когда вы используете --delete* параметры.

Если вам нужно обновить веб-сайт с помощью огромных файлов по медленной ссылке, вы можете передать небольшие файлы следующим образом:

rsync -a --max-size = 100K / var / www / там: / var / www /

затем сделайте это для больших файлов:

rsync -a --min-size = 100K --bwlimit = 100 / var / www / там: / var / www /

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

Я использую опцию --existing, когда пытаюсь синхронизировать небольшое подмножество файлов из одного каталога с другим.

--rsh это мое.

Я использовал его, чтобы изменить шифр ssh на что-то более быстрое (--rsh="ssh -c arcfour") также для создания цепочки sshs (рекомендуется использовать с ssh-agent) для синхронизации файлов между хостами, которые не могут общаться напрямую. (rsync -av --rsh="ssh -TA userA@hostA ssh -TA -l userB" /tmp/foobar/ hostB:/tmp/foobar/).

--time-limit

При использовании этой опции rsync остановится через T минут и выйдет. Я думаю, что эта опция полезна, когда выполняется синхронизация большого количества данных в ночное время (в нерабочие часы), а затем останавливается, когда людям пора начать использовать сеть в дневное время (часы пик).

--stop-at=y-m-dTh:m

Эта опция позволяет вам указать, в какое время остановить rsync.

Batch Mode

Пакетный режим можно использовать для применения одного и того же набора обновлений ко многим идентичным системам.

Если вам интересно, как далеко продвинулся медленно работающий rsync и не использовал -v для вывода списка файлов по мере их передачи, вы можете узнать, какие файлы он открыл:

 ls -l /proc/$(pidof rsync)/fd/*

в системе с / proc

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

Он также сообщил мне немного более интересную информацию - другой конец, по-видимому, отказался, поскольку также была неработающая ссылка на сокет:

/proc/22954/fd/4: broken symbolic link to `socket:[2387837]'

--archive - стандартный выбор (хотя и не по умолчанию) для заданий, подобных резервному копированию, который обеспечивает копирование большей части метаданных из исходных файлов (разрешения, владение и т. д.).

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

Мой --inplace. Творит чудеса, когда сервер для резервного копирования работает под управлением ZFS или btrfs и вы делаете собственные снимки.

--backup-dir =date +%Y.%m.%d --delete Мы удаляем, но делаем копию ... на всякий случай

Тот, который я использую чаще всего, определенно --exclude-from который позволяет вам указать файл, содержащий вещи, которые нужно исключить.

Я также нахожу --chmod очень полезно, потому что это позволяет вам убедиться, что разрешения находятся в желаемом состоянии, даже если ваш источник испорчен.

Конечно, есть еще --delete который удаляет из цели то, что не может быть найдено в источнике.

--partial 

В случае перебоев

--bwlimit=100

Для ограничения пропускной способности - хорошо для копирования больших файлов, каталогов

cwrsync - Rsync для Windows http://www.itefix.no/i2/node/10650

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

Если у вас есть rsync, настроенный как демон на сервере, вы можете просто просматривать общие модули, как любой другой список каталогов. Тогда вы сможете увидеть, какие пути доступны, а какие нет.

когда я использую GlusterFs, у нас есть узкое место с T-файлами с нулевым размером, для синхронизации между разбитым кирпичом или репликой мы должны использовать --min-size=1 чтобы не синхронизировать пустой файл с разбитого сервера

Прочтите руководство

Прочтите список коротких вариантов https://linux.die.net/man/1/rsync чтобы почувствовать, что возможно. Это действительно впечатляет.

Поэкспериментируйте с основными вариантами использования

Ознакомьтесь с некоторыми основными способами использования. Использовать --dry-run (-n), чтобы получить обратную связь о том, что собирается делать rsync.

rsync -avn . /target/di

Атрибуты файлов архивов (-a), отображает прогресс (-v), делает пробный прогон (-n). В команде используется краткая форма --archive (-a), что переводится как (-rlptgoD).

  • -r - рекурсивная копия
  • -l - копировать символические ссылки как символические ссылки
  • -p - установить разрешения, такие же, как у источника
  • -t - установить mtime таким же, как у источника. Используйте это для поддержки быстрых инкрементных обновлений на основе mtime.
  • -g - установить группу таким же, как у источника
  • -o - установить владельца таким же, как у источника
  • -D - если удаленный пользователь является суперпользователем, это воссоздает устройства и другие специальные файлы

Подборка крутых вариантов

Шаг

--remove-source-files Это удалит скопированные файлы из источника.

Обновить

--update Это заставляет rsync пропускать любые файлы, которые существуют в месте назначения и имеют более новое время изменения, чем исходный файл.

Удалить

--delete Удалите файлы, которых нет в исходном дереве.

Резервное копирование

--backup Сделайте резервную копию измененных или удаленных файлов.

--backup-dir=date +%Y.%m.%d Укажите каталог резервной копии.

Что копировать?

--min-size=1 Не копируйте пустые файлы.

--max-size=100K Копируйте только небольшие файлы. Может использоваться для обработки маленьких и больших файлов по-разному.

--existing Переопределяет только файлы, которые уже существуют на целевом объекте. Не создавайте новые файлы на цели.

--ignore-existing Копируйте только те файлы, которых нет в целевом объекте.

--exclude-from Определите исключения в файле.

Планирование, пропускная способность и производительность

--time-limit Завершает rsync по истечении определенного времени.

--stop-at=y-m-dTh:m Завершает rsync в определенное время.

--partial Допускает частичные копии в случае прерывания.

--bwlimit=100 Ограничивает пропускную способность Укажите КБ / сек. Хороший вариант, если требуется передача больших файлов.

Вывод

  • -h выводить числа в удобочитаемом формате.
  • --progress отображать прогресс.
  • -i информация об изменении журнала.
  • --log-file= определить файл журнала.
  • --quiet нет выхода.