10

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

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

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

4 ответа4

28

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

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

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

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

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

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

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

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

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

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

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

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

4

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

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

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

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

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

-1

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

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

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

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

Аналогия:

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

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

в

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

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

Сэм дурак.

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

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

Короче:

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

-2

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .