Я должен скопировать большое дерево каталогов, около 1,8 ТБ. Это все локально. По привычке я бы использовал rsync
, однако мне интересно, есть ли смысл, и лучше ли мне использовать cp
.
Я беспокоюсь о разрешениях и uid / gid, так как они должны быть сохранены в копии (я знаю, что rsync делает это). А также такие вещи, как символические ссылки.
Место назначения пустое, поэтому мне не нужно беспокоиться об условном обновлении некоторых файлов. Это все локальный диск, поэтому мне не нужно беспокоиться о ssh или сети.
Причина, по которой я бы соблазнился отказаться от rsync, заключается в том, что rsync может делать больше, чем мне нужно. rsync контрольные суммы файлов. Мне это не нужно, и я обеспокоен тем, что это может занять больше времени, чем cp.
Так что ты считаешь, rsync
или cp
?
Ответы:
Я бы использовал rsync, так как это означает, что если он прерван по какой-либо причине, вы можете легко перезапустить его с минимальными затратами. И, будучи rsync, он может даже частично перезапустить большой файл. Как упоминают другие, он может легко исключать файлы. Самый простой способ сохранить большинство вещей - это использовать
-a
флаг - «архив». Так:Хотя UID / GID и символические ссылки сохраняются
-a
(см.-lpgo
), Ваш вопрос подразумевает, что вам может потребоваться полная копия информации файловой системы; и-a
не включает в себя жесткие ссылки, расширенные атрибуты или списки ACL (в Linux) или выше, ни ветвления ресурсов (в OS X). Таким образом, для надежной копии файловой системы вам необходимо будет включить эти флаги:Стандартный cp запустится снова, хотя
-u
флаг будет «копировать, только если файл SOURCE новее файла назначения или когда файл назначения отсутствует» . А-a
флаг (архив) будет рекурсивным, а не переписывает файлы, если вам придется перезапускать и сохранять разрешения. Так:источник
При копировании в локальную файловую систему я всегда использую следующие параметры rsync:
Вот мои рассуждения:
Я видел на 17% более быстрые передачи с использованием вышеуказанных настроек rsync по сравнению со следующей командой tar, как было предложено в другом ответе:
источник
rsync: --no-compress: unknown option
появляется следующая ошибка: @Ellis Percival.rm -rf /src/
.Когда мне приходится копировать большой объем данных, я обычно использую комбинацию tar и rsync. Первый шаг - смолить, что-то вроде этого:
Обычно с большим количеством файлов будут некоторые, которые tar не сможет обработать по какой-либо причине. Или, возможно, процесс будет прерван, или, если это миграция файловой системы, вы можете сделать первоначальную копию до фактического шага миграции. В любом случае, после первоначальной копии я делаю шаг rsync, чтобы синхронизировать все это:
Обратите внимание, что косая черта
/src/
важна.источник
pv
в середину, чтобы иметь возможность наблюдать за прогрессом, оценивая размер всех данных, используемыхdf
. Я также использовал--numeric-owner
, так как исходный диск был из другой системы, и я не хотелtar
связываться с владельцами:tar -C /old-path --numeric-owner -S -c . | pv -tpeba -s 100G | tar -C /new-path --numeric-owner -S -xp
Rsync
Вот rsync, который я использую, я предпочитаю cp для простых команд, а не это.
CPIO
Вот способ, который еще безопаснее, cpio. Это примерно так же быстро, как смола, может быть, немного быстрее.
деготь
Это также хорошо, и продолжается при сбое чтения.
Обратите внимание, что все это только для локальных копий.
источник
Что вы предпочитаете. Просто не забудьте
-a
выключатель, когда вы решите использоватьcp
.Если вам действительно нужен ответ: я бы использовал rsync, потому что он гораздо более гибкий. Необходимо завершить работу до завершения копирования? Просто Ctrl-C и возобновить, как только вы вернулись. Нужно исключить некоторые файлы? Просто используйте
--exclude-from
. Нужно изменить владельца или разрешения? rsync сделает это за вас.источник
Команда
rsync
всегда вычисляет контрольные суммы для каждого передаваемого байта.Параметр командной строки
--checksum
относится только к тому, используются ли контрольные суммы файлов для определения, какие файлы передавать или нет, то есть:Manpage также говорит это:
Так
rsync
же, всегда, вычисляется контрольная сумма всего файла на принимающей стороне, даже если-c/ --checksum
опция выключена.источник
rsync -aPhW --protocol=28
помогает ускорить эти большие копии с RSYNC. Я всегда rsync, потому что мысль о том, чтобы быть на полпути через 90GiB, и это ломает меня пугает от CPисточник
rsync великолепен, но имеет проблемы с действительно большими деревьями каталогов, потому что он хранит деревья в памяти. Я просто искал, решат ли они эту проблему, когда я нашел эту ветку.
Я также нашел:
http://matthew.mceachen.us/geek/gigasync/
Вы также можете вручную разбить дерево и запустить несколько rsyncs.
источник
Эта ветка была очень полезна, и поскольку было так много вариантов для достижения результата, я решил сравнить несколько из них. Я полагаю, что мои результаты могут быть полезны для других, которые чувствуют, что работает быстрее.
Чтобы переместить 532 ГБ данных, распределенных среди 1753,200 файлов, у нас было то время:
rsync
заняло 232 минутыtar
заняло 206 минутcpio
заняло 225 минутrsync + parallel
заняло 209 минутВ моем случае я предпочел использовать
rsync + parallel
. Я надеюсь, что эта информация поможет большему количеству людей выбирать среди этих альтернатив.Полный тест опубликован здесь
источник
cp
? Это название вопроса!cp
это небезопасно, то есть: когда перерывы, вы должны начать все сначала, поэтому я предпочитаю варианты, которые могут возобновиться, поэтомуrsync
мой любимыйПри локальном копировании локального каталога мой опыт показывает, что cp -van src dest на 20% быстрее, чем rsync. Что касается перезапуска, это то, что делает "-n". Вам просто нужно восстановить частично скопированный файл. Не больно, если это не ISO или что-то подобное.
источник
ARJ ТАК СТАРШАЯ ШКОЛА !! Я действительно сомневаюсь, что ARJ и / или Rsync даст производительность.
Определенно, я всегда использую cpio:
Это почти быстро, чем CP, определенно быстрее, чем tar, и ничего не передается.
источник
cpio
страница FreeBSD .cpio
к сожалению, верхний предел для файлов составляет 8 ГБ.find
команды, как вы ее перечислили, в ней есть труба:find . -print | cpio -pdm /target/folder
Вы определенно хотите попробовать rclone . Эта вещь сумасшедшая быстро:
Это локальная копия с и на твердотельный накопитель LITEONIT LCS-256 (256GB).
Вы можете добавить
--ignore-checksum
при первом запуске, чтобы сделать его еще быстрее.источник
Оба будут работать нормально.
источник
tar
также сделает работу, но не прекратит прерываться, как это сделает rsync.источник
Что делать, если вы используете ARJ?
где
-jm -m1
уровни сжатия и-je
делает его исполняемым. Теперь у вас есть инкапсулированный пакет файлов.Затем для извлечения на целевую карту
где будет создана исходная карта (где
-y
всегда принимать, перезаписывать, пропускать и т. д.)Затем можно скопировать ftp файл-пакета в целевую область и выполнить его, если это возможно.
источник
Есть несколько ускорений, которые можно применить к
rsync
:избежать
-z
/--compress
: сжатие будет загружать только процессор, так как передача происходит не по сети, а по ОЗУ.--append-verify
: возобновить прерванную передачу. Это звучит как хорошая идея, но имеет опасный случай сбоя: любой файл назначения того же размера (или больше), что и источник, будет игнорироваться. Кроме того, он проверяет суммы всего файла в конце, что означает отсутствие значительного ускорения--no-whole-file
при добавлении опасного случая сбоя.использование
-S
/--sparse
: превратить последовательности нулей в разреженные блоки--partial
или-P
что--partial --progress
: сохранить любые частично переданные файлы для последующего возобновления. Примечание: файлы не будут иметь временного имени, поэтому убедитесь, что больше никто не ожидает использовать место назначения, пока не будет завершена полная копия.--no-whole-file
так что все, что нужно отправить, использует дельта-передачу. Чтение половины частично переданного файла часто происходит намного быстрее, чем повторная запись.--inplace
чтобы избежать копирования файла (но только если ничто не читает место назначения, пока не завершится вся передача)источник