Почему количество файлов меняется?
Видимо, вы сосредоточены исключительно на "копировать данные" аспект "копировать файл". Файл - это больше, чем просто данные; это сущность в файловой системе. Файл имеет имя, атрибуты и разрешения. Вся эта дополнительная информация о файле должна дублироваться вместе с данными, когда "файл копируется". Существует значительное количество дискового ввода-вывода для выполнения этой файловой системы.
Процедура копирования одного (1) файла в общую файловую систему будет выглядеть примерно так:
- Найдите исходный файл в файловой системе. (А)
- Считайте с диска запись каталога для исходного файла.
- Проверьте разрешения на чтение.
- Найдите целевой файл в файловой системе. (Б)
- Проверьте права на запись в целевом каталоге.
- Разверните каталог, если необходимо, чтобы разместить новый файл. (С)
- Обновите каталог на диске. (С1)
- Найдите свободные блоки, распределите их и обновите таблицу снова. (Д)
- Прочитайте данные файла и скопируйте в файл назначения (то есть скопируйте "файл").
- Обновите запись каталога для нового файла с помощью (размер и время). (Е)
- Обновите время доступа к исходной записи каталога. (Е)
(а) По крайней мере это означает поиск в текущем каталоге. Или путь может начинаться с корня файловой системы, и необходимо пройти несколько уровней каталогов.
(б) По крайней мере это означает поиск в текущем каталоге. Или путь может начинаться с корня файловой системы, и необходимо пройти несколько уровней каталогов. Если конечный файл уже существует, определите, как копирование должно продолжаться или прерываться. Если файл назначения не существует, то должна быть создана новая запись каталога, и, возможно, это включает в себя расширение каталога (то есть накладные расходы на выделение файлового блока (или кластера)).
(c) Если каталог должен быть расширен, выделите новый блок, найдя свободный блок, измените таблицу распределения новым распределением, а затем запишите блок (ы) на диск. Поскольку большинство файловых систем поддерживают несколько копий таблицы размещения, это означает, что несколько записей на диск.
(c1) Как только каталог назначения будет найден, прочитайте блок каталога с диска, измените его новой записью каталога для скопированного файла, а затем запишите блок на диск.
(d) Чтобы скопировать файл, распределите блоки, найдя свободные блоки, измените таблицу распределения новыми распределениями, а затем запишите блок (ы) на диск. Поскольку большинство файловых систем поддерживают несколько копий таблицы размещения, это означает, что несколько записей на диск. Чтобы сохранить целостность данных, файловая система может не пытаться объединять (записывать и задерживать) операции записи на диск для каталогов и таблиц размещения, а скорее выполнять операции записи сразу же после создания новых файлов и выделения блоков.
(e) Как только копия данных будет завершена, обновите новую запись каталога для скопированного файла, указав правильную длину файла и метки времени, а затем запишите блок каталога на диск.
(f) Обновите исходную запись каталога новой меткой времени доступа, а затем запишите блок каталога на диск.
Таким образом, вместо одного файла ваш вопрос спрашивает, может ли выполнение всего этого для тысячи файлов увеличить время, необходимое для копирования части данных в файлах? Если вы скопируете только один файл размером 24 МБ, то у вас будет что сравнить со временем копирования в тысячу файлов.
При резервном копировании файловой системы копирование отдельных файлов в другую файловую систему на диске или в разделе используется редко, поскольку, как вы обнаружили, это довольно медленный процесс. Более быстрый способ - создать и записать один архивный файл, содержащий записи исходного каталога и содержимое файла в специальном формате файла; программы резервного копирования и команда * nix 'tar' могут выводить такой архивный файл. (Обратите внимание, что tar просто обрабатывает архивные файлы и не использует сжатие, как утилиты архивирования + сжатия.) Самый быстрый способ резервного копирования - это запись на блочное устройство (а не в файловую систему на устройстве), так что исходная файловая система игнорируется (рассматривается как большее количество данных) и может быть получена блочная копия изображения исходного устройства. выполнила.