Почему копирование одного и того же объема данных занимает больше времени, если оно распространяется на несколько отдельных файлов?

12

Я заметил, что копирование данных объемом 24 МБ из одной папки в другую заняло около 30 секунд, потому что (я предполагаю, что это причина) это было более 1000 отдельных файлов. Копирование 24Mb не должно занимать так много времени. Почему количество файлов меняется?

Я использую Windows 7 на MacBook (4 ГБ оперативной памяти, процессор Intel® Core ™ 2 Duo P7450 @ 2,13 ГГц, 32-разрядная операционная система)

РЕДАКТИРОВАТЬ: NTFS является файловой системой, используемой на диске

Trindaz
источник

Ответы:

5

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

Если HDD - это SATA 2 и это тот же раздел, это только скорость передачи данных.

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

Но для каждого скопированного файла система должна сохранять свой индекс в MFT (Master File Table) жесткого диска, что замедляет процесс копирования, если вы копируете много файлов. И если у вас есть какой-либо антивирус, он будет сканировать каждый скопированный файл. И если вы включили индексацию файлов поиска Microsoft (или любую другую службу индексации файлов), результат будет хуже.

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

Realcool
источник
Отключение антивирусной программы сделало экстракт в 10 раз быстрее. После этого сканируются файлы на наличие вирусов.
fat_mike
30

Почему количество файлов меняется?

Видимо, вы сосредоточены исключительно на «копировать данные» аспект «копировать файл». Файл - это больше, чем просто данные; это сущность в файловой системе . Файл имеет имя, атрибуты и разрешения. Вся эта дополнительная информация о файле должна дублироваться вместе с данными, когда «файл копируется». Существует значительный объем дискового ввода-вывода для выполнения этой файловой системы.

Процедура копирования одного (1) файла в общей файловой системе будет выглядеть примерно так:

  • Найдите исходный файл в файловой системе. (А)
  • Считайте с диска запись каталога для исходного файла.
  • Проверьте разрешения на чтение.
  • Найдите файл назначения в файловой системе. (Б)
  • Проверьте права на запись в целевой каталог.
  • Разверните каталог, если необходимо, чтобы разместить новый файл. (С)
  • Обновите каталог на диске. (С1)
  • Найдите свободные блоки, распределите их и обновите таблицу снова. (Д)
  • Считайте данные файла и скопируйте в файл назначения (т.е. скопируйте «файл»).
  • Обновите запись каталога для нового файла с помощью (размер и время). (Е)
  • Обновите время доступа к исходной записи каталога. (Е)

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

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

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

(d) Чтобы скопировать файл, распределите блоки, найдя свободные блоки, измените таблицу размещения новыми распределениями, а затем запишите блок (ы) на диск. Поскольку большинство файловых систем поддерживают несколько копий таблицы размещения, это означает, что несколько записей на диск. Чтобы сохранить целостность данных, файловая система может не пытаться объединять ( записывать и задерживать) операции записи на диск для каталогов и таблиц размещения, а скорее выполнять операции записи сразу же после создания новых файлов и выделения блоков.

(e) После завершения копирования данных обновите новую запись каталога для скопированного файла, указав правильную длину и временные метки, а затем запишите блок каталога на диск.

(f) Обновите запись каталога источника с новой меткой времени доступа, а затем запишите блок каталога на диск.

Таким образом, вместо одного файла ваш вопрос спрашивает, может ли выполнение всего этого для тысячи файлов увеличить время, необходимое для копирования части данных в файлах? Если вы скопируете только один файл размером 24 МБ, вам будет что сравнить с временем копирования в тысячу файлов.

При резервном копировании файловой системы копирование отдельных файлов в другую файловую систему на диске или в разделе используется редко, поскольку, как вы обнаружили, это довольно медленный процесс. Более быстрый способ - создать и записать один архивный файл, содержащий записи исходного каталога и содержимое файла в специальном формате файла; программы резервного копирования и команда * nix 'tar' могут выводить такой архивный файл. (Обратите внимание, что tar просто обрабатывает архивные файлы и не использует сжатие, как утилиты архивирования + сжатия.) Самый быстрый метод резервного копирования - это запись на блочное устройство (а не в файловую систему на устройстве), так что исходная файловая система игнорируется (обрабатывается как большее количество данных) и может выполняться поблочная копия изображения исходного устройства.

опилки
источник
-1

Вот концептуальная аналогия:

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

Предположения:

  • Агент передачи информации == какой-то ребенок, назовем его Сэм, перемещает яйца из одной корзины в другую.
  • Средство передачи информации по == воздуху, я думаю. Не очень важно здесь.
  • Яйца происходят из разных видов, в том числе, как ... динозавры ... и мифические подводные морские побережья и драконы. (яйца могут быть очень большими)
  • Размер файла == яйцо-объем. Подумайте, яйцо Робина против яйца дракона.

Аналогия:

Поэтому Сэму приходится перекладывать яйца из одной корзины в другую, потому что он работает на ферме, а тот, кто ему даёт задания, подлый. На этой ферме живут различные яйцекладки, в том числе драконы и мифические морские звери; Сэм думает, что это круто по нескольким причинам. (не очень важно, но это моя аналогия)
Сэм чиллин у реки со своими 2 корзинами, одна из корзин с яйцами внутри. Размер яиц в корзине от

  • яйцо робина занимает 100 bytesместо в корзине

в

  • Кракен-яйца, размером около 2.7Gb.

Сэм должен начать двигать яйца, поэтому он просто начинает хватать яйца и перемещать их. Допустим, он решает сначала переместить драконье яйцо. Теперь яйцо очень массивное и плотное, поэтому ему нужно время, чтобы положить вещь в другую корзину.
Сэм забирает яйцо дракона в другую корзину, и он зол. Это было трудно, потому что вещь занимала так много места; движение его заняло слишком много времени для одного единственного яйца.

Сэм дурак.

Сэм возвращается к своей первой корзине, чтобы взять еще одно яйцо. Он понимает, что у него был только один большой. Однако осталось 100 000 000 000 яиц робина.

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

Короче говоря:

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

Роб Труксал
источник
-2

Чтение FAT, перемещение головок, открытие файла при смене файла - все это требует времени

Ленивый Барсук
источник
Это диск NTFS
Trindaz
В NTFS все данные файла - имя файла, дата создания, права доступа и содержимое - хранятся в виде метаданных в таблице основных файлов. Основная таблица файлов (MFT) содержит метаданные о каждом файле, каталоге и метафайле на томе NTFS. Он включает в себя имена файлов, расположение, размер и разрешения. Запись каталога состоит из имени файла и «идентификатора файла», который представляет собой номер записи, представляющий файл в основной таблице файлов. Идентификатор файла также содержит счетчик повторного использования для обнаружения устаревших ссылок.
Ленивый барсук
Итак, ваш ответ на этот вопрос основан на том факте, что ему пришлось проделать так много дополнительной работы, создавая записи для имени файла, местоположения, размера, разрешений и т. Д.? Вот откуда вся дополнительная работа.
Trindaz
Создание нового и чтение существующего
Lazy Badger