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

следующая команда работает, как ожидалось...

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

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

5 ответов


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


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

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

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

tar cf - . | tar xCf directory -

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

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


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

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

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

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

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

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

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

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 потому что он копирует только измененную часть файлов, не создает новых для небольших изменений между файлами inodes и т. д. См.этой.