Я использую rsync для копирования файлов в течение некоторого времени. Насколько я понимаю, rsync работает быстрее, чем cp, когда некоторые файлы для передачи уже находятся в целевом каталоге, передавая только инкрементную разницу (т. Е. «Дельты»).
Если это правильно, будет ли какое-либо преимущество использования rsync для перемещения содержимого папки A , скажем, папки B , где B пусто?
Папка A содержит около 1 ТБ данных (и миллионы файлов в ней). Передача будет осуществляться по локальной сети ( A и B находятся в разных файловых системах, оба смонтированы на суперкомпьютере, например, A - NFS, а B - блеск ).
Кроме того, какие флаги я должен использовать, чтобы попросить rsync переместить (не копировать) файлы из A в B (т.е. удалить A, когда передача успешно завершится)?
rsync
может заменитьmv
. Я ожидалmv
бы быть быстрее на большинстве типов файловых систем, когда источник и место назначения находятся в одной и той же файловой системе, потомуrsync
что должен был бы сделать копию несмотря ни на что, и,mv
вероятно, мог бы избежать изменения нескольких записей каталога. Самая близкая вещь, которую я могу найти,rsync mv
- это--remove-source-files
команда, но она не удаляет каталоги.mv
быстрее?mv
не может работать через сеть - он должен полагаться на локальное монтирование (например, NFS). Если узкое место в сети,rsync
вероятно , будет быстрее , чемmv
из - заrsync
может сделать сжатие.cp
есть-u
возможность скопировать исходный файл, если он новее, чем целевой файл или если целевой файл отсутствуетОтветы:
Вы можете перейти
--remove-source-files
к rsync для перемещения файлов вместо их копирования.Но в вашем случае нет смысла использовать rsync, поскольку место назначения пустое. Равнина
mv
выполнит работу максимально быстро.В вашем случае, что может иметь значение для производительности, это выбор сетевого протокола, если у вас есть выбор между NFS, Samba, sshfs, sftp, rsync по ssh, tar по конвейеру в ssh и т. Д. Относительная скорость этих методов зависит по размерам файлов, пропускной способности сети и диска и другим факторам, поэтому нет никакого способа дать общий совет, вам нужно будет выполнить свои собственные тесты.
источник
--remove-source-files
удаляет только файлы в источнике. если вы хотите очистить наш источник, не нужно ли будет выполнять команду rm -rf (илиfind
все каталоги и проходы-delete
) для источника после успешной работы rsync?--checksum
чтобы сказать ей, чтобы проверить результаты первой синхронизации.Поскольку
--remove-source-files
каталоги не удаляются, я запускаю следующие команды для перемещения файлов по ssh:Мне лично нравится эта
--progress
функция, так как я делаю эту передачу вручную. Удалите его, если вы используете скрипт. Я ожидаю, что это замедлит переводы незначительно. Параметрfind
удаления команды удаляет только пустые каталоги - не используйтеrm -rf
, так как он может удалить непустые каталоги в случае, если файл не был передан. В-delete
опции включает-depth
опцию , так что пустые дерева каталогов будут удалены из «снизу» вверх.источник
-delete
намного лучше, чем-exec rmdir {} +
т. д.В целом, как сказал Жиль, нет никакого преимущества в использовании
rsync
для перемещения файлов, когдаmv
будет проще выполнить ту же работу, и нет никакого потенциального увеличения скорости между обычными файловыми системами.Есть, однако, несколько раз, когда есть преимущество. В частности, если у вас есть какие-либо сомнения относительно стабильности источника, места назначения или машины, выполняющей работу, использование
rsync
дает вам возможность возобновления. Это может быть заметным преимуществом, если вы переводите очень большой и, скажем, ваша энергосистема ненадежна. Использование rsync будет более стабильным способом избежать повреждения данных в случае сбоя и выбрать место, где вы остановились.источник
mv
что лучше, если цель и источник находятся в одном и том же разделе, так чтоmv
вместо копирования копируются только метаданные файла.rsync
а не mv, это когда я хочу сохранить структуру папок (если вы используете--relative
).Я оказался в ситуации, когда rsync работает быстрее, чем mv просто потому, что mv не может обработать количество файлов в каталоге. У меня 1,8 миллиона фотографий с камеры слежения, которая работала в течение 20 дней, и команда mv завершается с ошибкой, поскольку не может выделить ресурсы.
Однако rsync, похоже, обрабатывает все файлы без проблем.
источник
Если вы хотите рекурсивно объединять каталоги ... переместите один каталог в другой каталог с потенциально дублирующимися именами каталогов, тогда, пожалуйста, посмотрите мой ответ здесь на serverfault.com.
mv
выполняет плохую работу, когда существуют каталоги с одинаковыми именами, иrsync
копирует (читает + записывает полные данные) каждый файл, а не просто перемещает их (метаданные только для чтения и записи).источник
Нет способа переместить файлы с помощью rsync, как это сделала бы команда Linux mv. Используя --remove-source-files, вы по сути копируете файлы в место назначения, а затем удаляете файлы (кроме каталогов) из источника. Это может помочь вам переместить файлы, но вы НЕ сэкономите время и операции ввода-вывода.
источник