Я заметил, что копирование данных объемом 24 МБ из одной папки в другую заняло около 30 секунд, потому что (я предполагаю, что это причина) это было более 1000 отдельных файлов. Копирование 24Mb не должно занимать так много времени. Почему количество файлов меняется?
Я использую Windows 7 на MacBook (4 ГБ оперативной памяти, процессор Intel® Core ™ 2 Duo P7450 @ 2,13 ГГц, 32-разрядная операционная система)
РЕДАКТИРОВАТЬ: NTFS является файловой системой, используемой на диске
источник
Видимо, вы сосредоточены исключительно на «копировать данные» аспект «копировать файл». Файл - это больше, чем просто данные; это сущность в файловой системе . Файл имеет имя, атрибуты и разрешения. Вся эта дополнительная информация о файле должна дублироваться вместе с данными, когда «файл копируется». Существует значительный объем дискового ввода-вывода для выполнения этой файловой системы.
Процедура копирования одного (1) файла в общей файловой системе будет выглядеть примерно так:
(а) По крайней мере это означает поиск в текущем каталоге. Или путь может начинаться с корня файловой системы, и необходимо пройти несколько уровней каталогов.
(б) По крайней мере это означает поиск в текущем каталоге. Или путь может начинаться с корня файловой системы, и необходимо пройти несколько уровней каталогов. Если конечный файл уже существует, определите, как копирование должно продолжаться или прерываться. Если файл назначения не существует, то должна быть создана новая запись каталога, и, возможно, это включает в себя расширение каталога (т. Е. Накладные расходы на выделение файлового блока (или кластера) ).
(c) Если каталог необходимо расширить, выделите новый блок, найдя свободный блок, измените таблицу распределения новым распределением, а затем запишите блок (ы) на диск. Поскольку большинство файловых систем поддерживают несколько копий таблицы размещения, это означает, что несколько записей на диск.
(c1) Как только каталог назначения будет найден, прочитайте блок каталога с диска, измените его , добавив новую запись каталога для скопированного файла, а затем запишите блок на диск.
(d) Чтобы скопировать файл, распределите блоки, найдя свободные блоки, измените таблицу размещения новыми распределениями, а затем запишите блок (ы) на диск. Поскольку большинство файловых систем поддерживают несколько копий таблицы размещения, это означает, что несколько записей на диск. Чтобы сохранить целостность данных, файловая система может не пытаться объединять ( записывать и задерживать) операции записи на диск для каталогов и таблиц размещения, а скорее выполнять операции записи сразу же после создания новых файлов и выделения блоков.
(e) После завершения копирования данных обновите новую запись каталога для скопированного файла, указав правильную длину и временные метки, а затем запишите блок каталога на диск.
(f) Обновите запись каталога источника с новой меткой времени доступа, а затем запишите блок каталога на диск.
Таким образом, вместо одного файла ваш вопрос спрашивает, может ли выполнение всего этого для тысячи файлов увеличить время, необходимое для копирования части данных в файлах? Если вы скопируете только один файл размером 24 МБ, вам будет что сравнить с временем копирования в тысячу файлов.
При резервном копировании файловой системы копирование отдельных файлов в другую файловую систему на диске или в разделе используется редко, поскольку, как вы обнаружили, это довольно медленный процесс. Более быстрый способ - создать и записать один архивный файл, содержащий записи исходного каталога и содержимое файла в специальном формате файла; программы резервного копирования и команда * nix 'tar' могут выводить такой архивный файл. (Обратите внимание, что tar просто обрабатывает архивные файлы и не использует сжатие, как утилиты архивирования + сжатия.) Самый быстрый метод резервного копирования - это запись на блочное устройство (а не в файловую систему на устройстве), так что исходная файловая система игнорируется (обрабатывается как большее количество данных) и может выполняться поблочная копия изображения исходного устройства.
источник
Вот концептуальная аналогия:
(пожалуйста, помните дорогой интернет, что аналогии ошибочны. Не стесняйтесь указывать, как в комментариях.)
Предположения:
==
какой-то ребенок, назовем его Сэм, перемещает яйца из одной корзины в другую.==
воздуху, я думаю. Не очень важно здесь.==
яйцо-объем. Подумайте, яйцо Робина против яйца дракона.Аналогия:
Поэтому Сэму приходится перекладывать яйца из одной корзины в другую, потому что он работает на ферме, а тот, кто ему даёт задания, подлый. На этой ферме живут различные яйцекладки, в том числе драконы и мифические морские звери; Сэм думает, что это круто по нескольким причинам. (не очень важно, но это моя аналогия)
Сэм чиллин у реки со своими 2 корзинами, одна из корзин с яйцами внутри. Размер яиц в корзине от
100 bytes
место в корзинев
2.7Gb
.Сэм должен начать двигать яйца, поэтому он просто начинает хватать яйца и перемещать их. Допустим, он решает сначала переместить драконье яйцо. Теперь яйцо очень массивное и плотное, поэтому ему нужно время, чтобы положить вещь в другую корзину.
Сэм забирает яйцо дракона в другую корзину, и он зол. Это было трудно, потому что вещь занимала так много места; движение его заняло слишком много времени для одного единственного яйца.
Сэм дурак.
Сэм возвращается к своей первой корзине, чтобы взять еще одно яйцо. Он понимает, что у него был только один большой. Однако осталось 100 000 000 000 яиц робина.
Как видите, день Сэма разрушен. Его естественная склонность заключалась в том, что яйцо динозавра должно быть намного хуже для него, чтобы двигаться. Это имеет смысл, когда мы говорим о яйцах и корзинах, но компьютеры насчитывают около 100 000 000 000.
Короче говоря:
Ответ о том, почему для перемещения нескольких небольших файлов требуется гораздо больше времени, чем нескольких больших, связан со стоимостью, связанной с их перемещением. Чем больше у вас маленьких файлов, тем больше нужно будет выполнить это действие. Еще один способ взглянуть на это - поговорить о плотности информации.
источник
Чтение FAT, перемещение головок, открытие файла при смене файла - все это требует времени
источник