Почему копирование файлов в одном разделе значительно быстрее, чем в другом?
3 ответа
Я не думаю, что копирование на тот же раздел происходит быстрее. Если вы имеете в виду "движение", то посмотрите на ответ Даниэля Шварца, он прекрасно объясняет, что происходит.
Однако, если вы имеете в виду настоящую операцию копирования, я не ожидал бы больших различий в производительности, если операция происходит на том же диске. Могут быть некоторые различия из-за времени, которое будет занимать операция размещения головок для жестких дисков (очевидно, не для твердотельных накопителей), но я не ожидаю, что влияние этого будет очень большим. Возможно, есть и некоторые различия из-за разных стратегий кэширования ОС, но и этот эффект, я не ожидаю, будет очень большим.
Что имеет большое значение, так это копирование с одного диска на другой. Если контроллер работает быстро, это намного быстрее, чем копирование на тот же диск, потому что любой диск должен только читать или записывать, а не выполнять обе операции вместе (Исключением из этого правила могут быть небольшие данные, поскольку hdd- и кеш контроллера).
Обратите внимание, что ОС может делать ссылки на файлы. В этом случае данные не будут скопированы, а будет создана только новая ссылка на данные (файл также не будет занимать удвоенное пространство). Это очень быстро. Но если вы копируете свои файлы с помощью проводника или стандартных команд оболочки, файлы будут скопированы и не будут связаны.
Эта проблема возникает только при копировании данных на и с одного жесткого диска. Данные считываются, кэшируются и записываются обратно, но прежде чем они смогут начать запись, головка чтения / записи должна быть перемещена в пустое пространство. Наличие источника и места назначения в отдельных разделах обеспечит физическое разделение соответствующих секторов диска. Головка чтения / записи будет постоянно двигаться вперед и назад. Часто вы можете услышать это.
Пока голова движется, данные не могут быть переданы. Наличие источника и места назначения в одном разделе обычно означает меньше времени, затрачиваемого на перемещение головы, и, следовательно, более эффективную передачу файлов.
Давайте сравним с двумя операциями. Сначала копируем файл из одного раздела в другой:
Источник открыт.
Пункт назначения открыт / создан.
Пространство выделено для пункта назначения.
Каждый байт данных файла считывается из источника и записывается в место назначения.
Файл назначения закрыт.
Дескриптор исходного файла отключен при закрытии.
Дескриптор исходного файла закрыт, отменяя связь с файлом.
Поскольку это (как правило) последняя ссылка на данные исходного файла, данные исходного файла должны быть свободными.
Теперь скопируйте файл из одной папки в другую на том же разделе.
Источник открыт.
Новая жесткая ссылка создается на исходный файл в каталоге назначения.
Дескриптор исходного файла отключен при закрытии.
Дескриптор источника закрыт, не связывая его. Исходный файл по-прежнему связан с целевым каталогом, поэтому не нужно менять свободное место.
Обратите внимание, что шагов меньше, а также ни один из них не требует касания каких-либо данных файла или даже отображения свободного пространства.