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


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

Я запускаю Windows 7 на MacBook (4 ГБ оперативной памяти, Intel (R) Core (TM) 2 Duo CPU P7450 @ 2.13GHz, 32-разрядная операционная система)

EDIT: NTFS - это файловая система, используемая на диске


9
2017-10-09 02:53


Источник




Ответы:


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

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

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

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

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


4
2017-10-09 04:35



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


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

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

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

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

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

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

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

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

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

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

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

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


25
2017-10-10 06:44





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

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

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

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

Аналогия:

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

  • яйцо грабина, похожее на 100 bytes пространства в корзине

в

  • Кракен-яйца, размер вокруг 2.7Gb,

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

Сэм - дурак.

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

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

Вкратце:

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


-1
2018-06-10 23:43





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


-2
2017-10-09 03:50



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