Чому кількість файлів відрізняється?
Мабуть, ви зосереджуєтесь виключно на аспекті "копіювати дані" "копіювати файл". Файл - це не просто дані; це сутність у файловій системі . Файл має ім'я, атрибути та дозволи. Вся ця додаткова інформація про файл повинна дублюватися разом із даними, коли "файл копіюється". Існує значна кількість вводу-виводу диска для виконання цієї файлової системи накладних витрат.
Процедура копіювання одного (1) файлу в загальну файлову систему буде приблизно такою:
- Знайдіть вихідний файл у файловій системі. (а)
- Прочитайте з диска запис каталогу для вихідного файлу.
- Перевірте дозволи на читання.
- Знайдіть файл призначення у файловій системі. (b)
- Перевірте дозволи на запис у каталозі призначення.
- Розгорніть каталог, якщо потрібно, щоб вмістити новий файл. (c)
- Оновіть каталог на диску. (c1)
- Знайдіть безкоштовні блоки, виділіть їх та оновіть таблицю ще раз. (г)
- Прочитайте дані файлу та скопіюйте у файл призначення (тобто скопіюйте "файл").
- Оновіть запис каталогу для нового файлу за допомогою (розмір та час). (е)
- Оновіть час доступу до запису вихідного каталогу. (f)
(а) Принаймні це означає пошук поточного каталогу. Або шлях може починатися в корені файлової системи, і потрібно пройти кілька рівнів каталогів.
(b) Принаймні, це означає пошук поточного каталогу. Або шлях може починатися в корені файлової системи, і потрібно пройти кілька рівнів каталогів. Якщо файл призначення вже існує, то визначте, як копія має тривати або скасовуватись. Якщо файлу призначення не існує, слід створити нову запис каталогу, і, можливо, це передбачає розширення накладних даних про розподіл блоку файлів (він же кластер ).
(c) Якщо каталог потрібно розширити, виділіть новий блок шляхом пошуку вільного блоку, змініть таблицю розподілу з новим виділенням, а потім запишіть блоки (и) на диск. Оскільки більшість файлових систем підтримують декілька копій таблиці розподілу, то це означає кілька записів на диск.
(c1) Після того, як каталог призначення буде прочитаний , прочитайте блок каталогів з диска, змініть його новим записом каталогу для скопійованого файлу, а потім запишіть блок на диск.
(d) Щоб скопіювати файл, виділіть блоки, знайшовши вільні блоки, змініть таблицю розподілу за допомогою нових виділень, а потім запишіть блоки (и) на диск. Оскільки більшість файлових систем підтримують декілька копій таблиці розподілу, то це означає кілька записів на диск. Щоб зберегти цілісність даних, файлова система може не намагатися об'єднати (затримати і об'єднати) операції запису на диск для каталогів і таблиць розподілу, а скоріше виконати операції запису негайно, коли нові файли створюються та виділяються блоки.
(e) Після того, як копія даних буде завершена, оновіть новий запис каталогу для скопійованого файлу відповідною довжиною файлу та часовими позначками, а потім запишіть блок каталогів на диск.
(f) Оновіть запис у вихідному каталозі новою часовою позначкою "доступу", а потім запишіть блок каталогів на диск.
Отже, замість лише одного файлу, ваше питання задає питання, чи можна зробити все це для тисячі файлів часу, необхідного для простого копіювання частини даних файлів? Якщо ви скопіюєте лише один файл розміром 24 Мб, то вам буде з чим порівняти час копіювання тисячі файлів.
Під час створення резервної копії файлової системи копіювання окремих файлів в іншу файлову систему на диску або розділі використовується рідко, оскільки це досить повільний процес, як ви виявили. Більш швидкий метод - створити та записати єдиний архівний файл, який містить записи в вихідний каталог та вміст файлу у спеціальному файловому форматі; програми резервного копіювання та команда * nix 'tar' можуть виводити такий архівний файл. (Зауважте, що 'tar' просто обробляє архівні файли і не використовує стиснення, як утиліти архівації + стиснення.) Найшвидший метод резервного копіювання - запис на блоковий пристрій (а не файлову систему на пристрої), щоб джерельна файлова система була ігнорується (трактується як більше даних) і може бути виконана поодинока копія зображення пристрою-джерела.