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

57

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

Какие твои любимые маленькие советы и рекомендации по rsync?

Рори
источник

Ответы:

19

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

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

robcast
источник
Следует отметить одну вещь: если вы используете некоторые параметры (например, --delete-beforeнапример), используется старое поведение «сначала создать список», поскольку это требуется для правильной работы этих параметров - поэтому, если вы не видите этого поведения, проверьте, Известно, что другие варианты, которые вы используете, предотвращают это. Это может быть полезно, если вы используете rsync в интерактивном режиме для большого дерева и хотите принудительно запустить начальное сканирование, чтобы вывод был --progressточным (т. Е. Число «сравниваемых объектов» никогда не увеличится, поскольку после начального сканирования новые объекты не будут найдены) ).
Дэвид Спиллетт
18

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

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

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

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

Дэвид Спиллетт
источник
6
+1 за - сухой
Дэвид З
1
Обратите внимание, что -n - это сокращение для --dry-run
ctennis
3
Я предпочитаю придерживаться длинных имен, особенно в сценариях, которые другие могут поддерживать. Это делает более понятным то, что предназначено, без ссылки на документы.
Дэвид Спиллетт
+1 Я реализовал решение для резервного копирования множества ТБ на многих машинах с помощью метода --link-dest для жестко связанных моментальных снимков, как описано выше - он работал отлично.
Мать
Если вам нравятся резервные копии --link-dest, посмотрите Dirvish, который использует rsync под капотом
hfs
14

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

rsync -a --max-size = 100K / var / www / there: / var / www /

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

rsync -a --min-size = 100K --bwlimit = 100 / var / www / there: / var / www /

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

боб
источник
10

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

TCampbell
источник
Спасибо! Это только спасло меня от некоторых неприятных правил написания фильтров.
Бензадо
8

--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/).

Стивен Пол Лесневски
источник
7
--time-limit

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

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

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

Batch Mode

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

jftuga
источник
Полезно! Я использовал команду «at» прежде, чем убить процесс
Лайонел
Исходные патчи: rsync.samba.org/ftp/rsync/rsync-patches-3.1.0.tar.gz ; Бинарный файл Win32 с включенным патчем: itefix.no/i2/cwrsync
jftuga
2
К сожалению, эти опции недоступны в rsync, распространяемом с дистрибутивами Redhat / Centos или Ubuntu.
Янв
@Lionel: Как вы используете, atчтобы убить процесс?
IMTheNachoMan
6

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

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

в системе, которая имеет / proc

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

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

/proc/22954/fd/4: broken symbolic link to `socket:[2387837]'
nealmcb
источник
5

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

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

Эндрю Ферье
источник
4

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

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

InnaM
источник
4

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


источник
4

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

Хьюберт Карио
источник
3

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

InnaM
источник
2

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

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

jftuga
источник
Я использую cwrsync, и это здорово. Я так рад, что кто-то принес эту удивительную возможность в Windows.
Эндрю Энсли
2
--partial 

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

--bwlimit=100

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

rebelbass
источник
Что такое единица измерения bwlimit? бит в секунду, байт в секунду?
Тимо Кяхконен
@Timo, bwlimit в килобайтах / секунду.
Эндрю Ферье
1

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

sybreon
источник
1

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

Вахид Чакоши
источник