
При резервном копировании набора папок, содержащих исходный код (позже я понял, что могу исключить некоторые папки, содержащие файлы библиотек, например node_modules
), я заметил, что скорость передачи файлов резко упала (несколько кбит/с по сравнению с обычными 60 Мбит/с, которые позволяет резервный диск).
Я хотел бы понять, где узкое место. Это какие-то вычисления, которые необходимо выполнить, которые чередуются с чистым вводом-выводом и, таким образом, замедляют все это, или это индекс файловой системы на целевом диске имеет некую центральную блокировку, которую нужно захватывать и снимать между файлами?
Я использую NTFS на целевом резервном диске, и это жесткий диск.
решение1
Проблема в том, что к каталогу файловой системы, в котором указано, где на жестком диске расположены файлы, необходимо обращаться несколько раз.
Для каждого файла при копировании необходимо выполнить следующие действия:
- Откройте исходный файл из исходного каталога.
- Создать целевой файл в целевом каталоге
- Скопировать файл
- Закройте исходный файл и отметьте его запись в каталоге как прочитанную.
- Закройте целевой файл и отметьте его запись в каталоге как созданную.
Это приводит к тому, что головки как исходного, так и целевого дисков несколько раз переключаются с метаданных файла в каталоге на сам файл во время каждого копирования файла.
На SSD это не будет иметь большого значения, но на HDD это может замедлить копирование большого количества мелких файлов до минимума. По сути, HDD будет в основном перемещать головку(и), что является гораздо более медленной операцией, чем чтение или запись.
Windows также не сможет эффективно использовать оперативную память в качестве кэша, поскольку закрытие файла приводит к его сбросу на диск.