Чем больше я использую 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/ о старом, но все еще очень хорошем сбое обе техники и связанные с этим вопросы)
Одним из основных недостатков этого метода является то, что если файл поврежден из-за ошибки диска, он также поврежден во всех снимках, которые ссылаются на этот файл, но у меня также есть автономные резервные копии, которые в достаточной степени защитят от этого. Еще одна вещь, на которую стоит обратить внимание, это то, что в вашей файловой системе достаточно инодов, или вы исчерпаете их до того, как на самом деле закончится место на диске (хотя у меня никогда не было проблем со значениями по умолчанию ext2/3).
Кроме того, никогда не забывайте, что очень очень полезно --dry-run
для небольшой здоровой паранойи, особенно когда вы используете --delete*
опции.
Если вам нужно обновить веб-сайт несколькими огромными файлами по медленной ссылке, вы можете перенести небольшие файлы следующим образом:
rsync -a --max-size = 100K/var/www/there:/var/www /
затем сделайте это для больших файлов:
rsync -a --min-size = 100K --bwlimit = 100/var/www/there:/var/www /
в rsync есть много опций, которые удобны для веб-сайтов. К сожалению, у него нет встроенного способа обнаружения одновременных обновлений, поэтому вы должны добавить логику в сценарии cron, чтобы избежать наложения записей огромных файлов.
Я использую опцию --existing при попытке синхронизировать небольшое подмножество файлов из одного каталога в другое место.
--rsh
это мое.
Я использовал его, чтобы изменить шифр на SSH на что-то быстрее (--rsh="ssh -c arcfour"
) также для создания цепочки ssh
s (рекомендуем использовать ее с ssh-agent
) для синхронизации файлов между хостами, которые не могут общаться напрямую. (rsync -av --rsh="ssh -TA [email protected] ssh -TA -l userB" /tmp/foobar/ hostB:/tmp/foobar/
).
--time-limit
Когда эта опция используется, rsync остановится через T минут и завершится. Я думаю, что эта опция полезна, когда rsyncing большое количество данных в ночное время (часы не заняты), а затем останавливается, когда пришло время для людей, чтобы начать использовать сеть, в течение дня (часы заняты).
--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, и вы делаете собственные снимки.
Тот, который я использую больше всего, определенно --exclude-from
, который позволяет вам указать файл, содержащий вещи, которые будут исключены.
Я также нахожу --chmod
очень полезно, поскольку позволяет вам убедиться, что права доступа находятся в желаемом состоянии, даже если ваш источник испорчен.
--backup-Dir = date +%Y.%m.%d
--delete Мы удаляем, но делаем копию ... на всякий случай
Конечно, есть также --delete
, который удаляет материал из цели, который не может быть найден в источнике.
cwrsync - Rsync для Windows http://www.itefix.no/i2/node/1065
Эта версия включает в себя OpenSSH, поэтому вы можете передавать файлы по защищенному каналу.
--partial
В случае перебоев
--bwlimit=100
Для ограничения пропускной способности - хорошо для копирования больших файлов, каталогов
Если у вас есть rsync, настроенный как демон на сервере, вы можете просто просмотреть общие модули, как и любой другой каталог. Затем вы можете увидеть, какие пути доступны, а какие нет.
когда я использую GlusterFs, мы имеем узкое место с T файлами нулевого размера, для синхронизации между разбитым кирпичом или репликой мы должны использовать --min-size=1
чтобы не синхронизировать пустой файл с поврежденного сервера