Копировать или команда rsync


следующая команда работает должным образом...

cp -ur /home/abc/* /mnt/windowsabc/

rsync имеет ли какое-либо преимущество над ним? Есть ли лучший способ сохранить папку резервного копирования в синхронизации каждые 24 часа?

5 51

5 ответов:

Rsync лучше, так как он будет копировать только обновленные части обновленного файла, а не весь файл. Он также использует сжатие и шифрование, если вы хотите. Проверьте это учебник.

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

в очень большой файловой системе (скажем, многие тысячи или миллионы файлов), где файлы, как правило, добавляются, но не обновляются, "cp-u", вероятно, будет более эффективным. cp принимает решение копировать исключительно на метаданные и может просто добраться до дело в копировании.

обратите внимание, что вам может потребоваться некоторая буферизация, например, используя tar, а не прямой cp, в зависимости от размера файлов, производительности сети, другой активности диска и т. д. Я нахожу следующую идею очень полезной:

tar cf - . | tar xCf directory -

метаданные сами по себе могут стать существенными накладными расходами на очень большие (кластерные) файловые системы, но rsync и cp будут разделять эту проблему.

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

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

cp -pur /home/abc/* /mnt/windowsabc/

- p сохранит права собственности, временные метки и режим файла. Это может быть очень важно в зависимости от того, что вы резервное копирование.

В альтернативная команда с rsync будет

rsync -avh /home/abc/* /mnt/windowsabc

С rsync,- a указывает "архив", который сохраняет все эти атрибуты, упомянутые выше. -v указывает "подробный", который просто перечисляет, что он делает с каждым файлом, когда он работает. - z оставлен здесь для локальных копий, но предназначен для сжатия, что поможет при резервном копировании по сети. Наконец,- h говорит rsync сообщать размеры в удобочитаемых форматах,таких как MB,GB и т. д.

из любопытства, я побежал один экземпляр запустите систему и избегайте смещения против первого запуска, затем я приурочил следующее к тестовому запуску 1GB файлов с внутреннего SSD-диска на жесткий диск, подключенный к USB. Они просто копируются в пустые целевые каталоги.

cp -pur    : 19.5 seconds
rsync -ah  : 19.6 seconds
rsync -azh : 61.5 seconds

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

для локальной копии единственным преимуществом rsync является то, что он избегает копирования, если файл уже существует в целевом каталоге. Определение "уже существует" - это (a) то же имя файла (b) тот же размер (c) та же метка времени. (Может быть, тот же владелец/группа; я не уверен...)

"алгоритм rsync" отлично подходит для инкрементных обновлений файла по медленной сетевой ссылке, но он не купит вам много для локальной копии, так как ему нужно прочитать существующий (частичный) файл, чтобы запустить его вычисление "diff".

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

особенно если вы используете файловую систему копирования на запись, такую как BTRFS или ZFS, rsync намного лучше.

Я использую BTRFS, и у меня это в моем ~/.bashrc:

alias cp="rsync -ah --partial --inplace --info=progress2"

важным флагом здесь для коровы FSs, как BTRFS является --inplace потому что он копирует только измененную часть файлов, не создает новых для небольших изменений между индексами файлов и т. д. Смотрите этой.