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

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

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

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

Ответ 1

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

Ответ 2

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

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

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

tar cf - . | tar xCf directory -

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

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

Ответ 3

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

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

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

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

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

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

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

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

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

Ответ 4

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

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

alias cp="rsync -ah --inplace --no-whole-file --info=progress2"

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

Ответ 5

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

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

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

Ответ 6

Это не совсем вопрос того, что более эффективно.

Команды 'rsync' и 'cp' не эквивалентны и достигают разных целей.

1- rsync может сохранить время создания существующих файлов. (используя опцию -a)
2- rsync запустит многопроцессорность и передачу с использованием локальных сокетов или сетевых сокетов. (т.е. разделить себя на несколько процессов)
3- Многопроцессорность и многопоточность увеличат вашу пропускную способность при копировании большого количества маленьких файлов и даже с несколькими большими файлами.

Таким образом, нижняя строка rsync предназначена для больших данных, а cp для локального копирования меньшего размера. (МБ в диапазоне малых ГБ). Когда вы начнете получать несколько ГБ или в диапазоне TB, используйте rsync. И, конечно, сетевые копии, rsync полностью.

Ответ 7

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

Передача в пределах одной машины

Case 1: With -z flag:
    TAR took: 9.48345208168
    Encryption took: 2.79352903366
    CP took = 5.07273387909
    Rsync took = 30.5113282204

Case 2: Without the -z flag:
    TAR took: 10.7535531521
    Encryption took: 3.0386879921
    CP took = 4.85565590858
    Rsync took = 4.94515299797

Ответ 8

если вы используете cp не сохраняет существующие файлы при копировании папок с тем же именем. Допустим, у вас есть следующие папки:

/myFolder
  someTextFile.txt

/someOtherFolder
  /myFolder
    wellHelloThere.txt

Затем вы копируете одно поверх другого:

cp /someOtherFolder/myFolder /myFolder

результат:

/myFolder
  wellHelloThere.txt

Это как минимум то, что происходит в macOS, и я хотел сохранить файлы diff, поэтому я использовал rsync.