Почему tar | tar намного быстрее, чем cp?


10

Для рекурсивного копирования каталога использование tarдля упаковки каталога с последующей передачей вывода в другой каталог tarдля распаковки представляется намного быстрее, чем при использовании cp -r(или cp -a).

Почему это? И почему нельзя cpсделать быстрее, если сделать то же самое под капотом?

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


Это один интересный вопрос. Вы можете найти ответы на некоторые вопросы здесь: stackoverflow.com/questions/316078 и здесь: unix.stackexchange.com/questions/66647
Teresa e Junior

Ответы:


6

Cpделает цикл открытия-чтения-закрытия-открытия-записи-закрытия по всем файлам. Таким образом, чтение из одного места и запись в другое происходят полностью чередующимися. Tar|tarвыполняет чтение и запись в отдельных процессах, а также tarиспользует несколько потоков для чтения (и записи) нескольких файлов «одновременно», эффективно позволяя контроллеру диска извлекать, буферизовать и хранить много блоков данных одновременно. В целом, tarпозволяет каждому компоненту работать эффективно, в то же время cpрешая проблему разрозненными, неэффективно небольшими порциями.


Можем ли мы сказать, что это верно для всех cpреализаций? Откуда мы знаем, что это правда? И почему бы так cpписать неэффективно? Любая реализация учебника для копии файла считывает буфер из n байтов за раз и записывает их на диск перед чтением других n байтов. Но вы говорите, cpвсегда читает весь файл, прежде чем писать всю копию?
LarsH
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.