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