Один и тот же 1 ГБ, а папка с фото копируется медленнее одного видео — почему?

· Обновлено: · · Windows, Windows 11, Копирование файлов, Производительность, SSD, NAS, ZIP, robocopy

История изменений (первая версия, опубликована 5 Sep 2026)
Первая публикация

Видео на 1 ГБ скопировалось сразу, а папка с фото суммарно на 1 ГБ как будто не заканчивается. Перешли на новый SSD, но как только переносите много мелких файлов, скорость передачи резко падает.

При одном объёме и время вроде должно быть одним — но время копирования задаёт не только «сколько байт перенести», но и «сколько файлов обработать».

Статья — введение для обычных пользователей, которые на Windows 11 копируют фото и документы на внешние диски или NAS. Сначала механизм, затем процедура сравнения данных одного суммарного объёма у себя. Основа — официальная документация, проверенная 5 сентября 2026 года; это не результат измерения скорости конкретного ПК или NAS.

1. «Перенести 1 ГБ» и «обработать 10 000 единиц» — разная работа

Представьте переезд: при одной и той же суммарной массе один большой ящик и 10 000 мелких посылок, у каждой из которых нужно проверить адрес, — разный объём работы. У файлов тоже есть работа до и после переноса содержимого.

Один объём, разное число файловДаже при 1 ГБ данных в сумме один файл и множество файлов требуют разного числа операций управления.Всего 1 ГБ данныхОдин крупный файл10 000 мелких файловМало операций на файлОперации на файл повторяются

Рис. 1: Одно и то же число байт не значит одно и то же число файлов.

Microsoft тоже объясняет: когда по сети копируют много мелких файлов один за другим, работу, отличную от передачи данных, начинает преобладать, и скорость линии нельзя использовать полностью.1

Разумеется, это не правило по формату вроде «фото медленные, видео быстрые». Несколько крупных фото и десятки тысяч крошечных изображений — разные ситуации. Начните с свойств папки и смотрите и суммарный размер, и число файлов. Для сравнения выравнивайте суммарное число байт содержимого файлов, а не «размер на диске».

На схеме сплошная линия обозначает отношение, которое выполняется всегда, а пунктирная — условное отношение (условия указаны в пояснении к каждому отношению на странице сведений). Полный список отношений (всего 11, с доказательствами и степенью уверенности) и определения основных понятий собраны на странице сведений карты знаний (на японском). Данные: JSON-LD / Turtle

2. Копирование обрабатывает больше, чем содержимое

Когда файл копируют, источник открывают, файл назначения создают, содержимое читают и пишут, записывают нужные сведения и файл закрывают. Открытие файла в Windows также включает условия вроде прав доступа и того, могут ли другие операции открыть файл одновременно.2

Сведения, которыми управляют файлом — имя, размер, метки времени, — называют метаданными. Файловая система NTFS, например, записывает сведения управления на каждый файл в структурах вроде MFT (Master File Table). Это не механизм, в котором достаточно записать пиксели фото.3

Работа при копировании одного файлаКроме чтения источника для каждого файла нужны создание назначения, ведение сведений о нём и закрытие.Открыть источникСоздать назначениеПрочитать и записать содержимоеЗаписать сведения и закрытьПовторить для следующего файла

Рис. 2: Концептуальный поток. Фактический порядок операций и возможное параллельное исполнение зависят от способа копирования и файловой системы.

SSD эту работу управления не устраняет. Одна цифра скорости передачи с листа спецификаций продукта не скажет, сколько займёт копирование 10 000 файлов. И слишком грубо называть копирование мелких файлов просто «весь случайный I/O». Помимо того, куда попадают чтения и записи, саму работу с файлами нужно рассматривать отдельно.

3. На NAS добавляется «ожидание ответа другой стороны»

NAS — накопитель, которым пользуются по сети. В SMB (Server Message Block), протоколе за общими папками Windows, файловые операции запрашивают у другой стороны, и есть точки, где ПК ждёт, пока та сторона обработает запрос и ответит.

Файловые операции по сетиЗапрос операции с ПК идёт по сети, становится файловой операцией на другой стороне, и ответ возвращается на ПК.ПК запрашивает файловую операциюИдёт по сетиДругая сторона обрабатывает файлОтвет возвращается на ПК

Рис. 3: Возможность перенести много сразу и быстрый ответ на одну операцию — разные вещи.

Пропускная способность соответствует числу полос на дороге; задержка — времени до ответа. Когда ожидание на мелкий файл растёт, объём передачи не увеличивается даже при запасе пропускной способности. Сканирование антивируса тоже может влиять на время обработки каждого файла.1

Это, однако, не значит, что каждый файл всегда требует фиксированного числа кругов. У SMB есть механизм сборки запросов, а кэширование и условия параллельности тоже меняют картину ожидания.45 Результаты различаются и между домашней LAN, и общей папкой на удалённой площадке.

Упрощённый пример, чтобы думать числами

Если всё обрабатывается последовательно без перекрытия, рассуждение такое.

Copy time ≈ total bytes ÷ data transfer rate
          + number of files × extra time per file

Это ни измеренное значение, ни точная формула Windows. Для иллюстрации предположим, что часть данных идёт со скоростью 100 МБ/с, а добавочное время — 2 миллисекунды на файл. Здесь 1 ГБ = 1000 МБ.

Часть данных на 1 ГБ занимает 10 секунд. С одним файлом добавочное время 0,002 секунды, а с 10 000 файлов — 20 секунд, итого около 30 секунд. Модель не учитывает параллельность, кэш и пределы ЦП и накопителя, но объясняет, почему «один объём занимает разное время».

Разделение времени копирования на две частиОтличает время передачи, которое задаёт суммарный объём, от добавочного времени, которое накапливается с числом файлов.Время, пропорциональное суммарному объёмуСуммарное время копированияДобавочное время, пропорциональное числу файлов

Рис. 4: По мере роста числа файлов начинает иметь значение время, невидимое из одного объёма данных.

4. ZIP не только «сжимает» — он ещё и «собирает в один»

У ZIP две роли: сжатие данных и сборка нескольких файлов в один контейнер. JPEG уже сжатый формат, поэтому помещение в ZIP может почти не уменьшить размер.6

Даже так есть отдельный эффект: число файлов при передаче падает с 10 000 до одного. Смотреть только на коэффициент сжатия и заключать «ZIP был бесполезен» рано.

Две роли ZIPИзменение числа файлов от сборки в ZIP и изменение размера от сжатия — отдельные эффекты.Собрать фото в ZIPОдин файл для передачиИзменение размера зависит от содержимого

Рис. 5: Даже когда почти ничего не сжимается, число файлов для передачи падает.

Но ни сборка, ни распаковка не бесплатны. Если хотите пользоваться фото как обычной папкой, сравнивайте такую сумму.

Время через ZIP = создание ZIP + передача ZIP + распаковка

Создание ZIP читает мелкие файлы, а распаковка создаёт их снова в назначении. Смысл не в том, чтобы устранить работу на файл, а в том, чтобы сменить место этой работы и форму передачи. Если обработка до и после передачи тяжела, без сборки может быть быстрее.1

5. «Где распаковываете» меняет, что даёт ZIP

Если отправить ZIP на принимающий ПК и распаковать его на локальном диске этого ПК, мелкие файлы не нужно гнать по сети по одному. В указаниях Microsoft распаковка архива на системе назначения тоже перечислена как метод.1

Распаковка на назначении против распаковки с ПК в общую папкуОтличает путь, где назначение распаковывает внутри себя, от пути, где ПК пишет распакованные файлы в общую папку.Отправить ZIP на назначениеНазначение распаковывает внутриПриложение на ПК распаковываетМелкие файлы отправляются в общую папку

Рис. 6: То, что «ZIP лежит на NAS», само по себе не значит, что распаковка выполняется внутри NAS.

Здесь легко ошибиться. Если открыть ZIP на NAS в проводнике на ПК и выбрать ту же общую папку как цель распаковки, ПК пишет распакованные мелкие файлы на NAS, поэтому мелкие сетевые операции происходят заново.

Отличайте это от случая, когда у самого NAS есть поддерживаемая функция распаковки, которая может работать внутри NAS, из консоли управления и подобного. Если такой функции нет, не останавливайтесь на «отправить ZIP — и решено»; измеряйте весь путь, которым реально будете пользоваться. Когда сравниваете распаковку внутри NAS с распаковкой на локальный диск ПК, помните и то, что конечное расположение файлов разное.

6. Сравнение крупного, мелкого и ZIP при одном 1 ГБ

Можно начать с видео и фото, которые уже есть. Но поскольку содержимое, число файлов и сжимаемость различаются, для изоляции причины используйте тестовые данные. Дальше — не измеренные скорости, а процедура сравнения, которую запускают в своей среде.

Подготовьте три вещи: один крупный файл, 10 000 мелких файлов и несжатый ZIP, который собирает эти 10 000 файлов. Содержимое A и B в сумме ровно 1 000 000 000 байт. У C сверху служебные сведения ZIP, поэтому размер файла не совпадёт с A и B точно.

Три вида данных для сравненияСоздайте один крупный файл и набор мелких файлов с одним суммарным объёмом, затем несжатый ZIP из последних.Подготовить одни и те же 1 ГБ в суммеОдин файл 1 ГБ10 000 файлов по 100 КБТо же содержимое в несжатый ZIP

Рис. 7: С несжатым ZIP легче наблюдать эффект сборки файлов отдельно от разницы коэффициента сжатия.

Создание тестовых файлов (необязательно)

Для тех, кто может пользоваться командной строкой. В Windows PowerShell 5.1 или новее создайте новую тестовую папку в локальной временной папке. Крупный файл и мелкие сами по себе занимают около 2 ГБ, около 3 ГБ вместе с ZIP, и у назначения тоже нужно своё свободное место. Чтобы не заполнить диск, на источнике должно быть не меньше примерно 5 ГБ свободно.

Существующие фото и документы не используются. Данные генерируются из псевдослучайных чисел, поэтому файлы нельзя открыть как видео или фото. Это избегает крайнего сжатия, которое дали бы одни нули, но не воспроизводит сканирование или поведение приложений для настоящих фото.

$ErrorActionPreference = 'Stop'
$lab = Join-Path ([System.IO.Path]::GetTempPath()) ('copylab-' + [guid]::NewGuid().ToString('N'))
$drive = New-Object System.IO.DriveInfo ([System.IO.Path]::GetPathRoot($lab))
if ($drive.AvailableFreeSpace -lt 5GB) {
    throw 'На тестовом диске должно быть не меньше 5 ГБ свободного места.'
}
$largeDir = Join-Path $lab 'large'
$smallDir = Join-Path $lab 'small'
[System.IO.Directory]::CreateDirectory($largeDir) | Out-Null
[System.IO.Directory]::CreateDirectory($smallDir) | Out-Null
Write-Host "Создано в: $lab"

$fileCount = 10000
$buffer = New-Object byte[] 100000
$random = New-Object System.Random 20260905
$large = [System.IO.File]::Open(
    (Join-Path $largeDir 'one.bin'),
    [System.IO.FileMode]::CreateNew,
    [System.IO.FileAccess]::Write,
    [System.IO.FileShare]::None
)
try {
    for ($i = 0; $i -lt $fileCount; $i++) {
        $random.NextBytes($buffer)
        $name = 'part-{0:D5}.bin' -f $i
        [System.IO.File]::WriteAllBytes((Join-Path $smallDir $name), $buffer)
        $large.Write($buffer, 0, $buffer.Length)
    }
}
finally {
    $large.Dispose()
}
Write-Host "Подготовка завершена. Содержимое каждого набора данных — $([long]$fileCount * $buffer.Length) байт."

Одна и та же последовательность байт пишется и в мелкие куски, и в один файл. Затем в том же окне PowerShell создайте несжатый ZIP. Здесь запишите время создания. NoCompression помещает файлы в ZIP без сжатия.7

$zip = Join-Path $lab 'small.zip'
$watch = [System.Diagnostics.Stopwatch]::StartNew()
Compress-Archive -LiteralPath $smallDir -DestinationPath $zip -CompressionLevel NoCompression
$watch.Stop()
Write-Host "Создание ZIP: $($watch.Elapsed.TotalSeconds) секунд"
Write-Host "Размер ZIP: $((Get-Item -LiteralPath $zip).Length) байт"

Эта процедура только для сгенерированных обычных файлов. У Compress-Archive есть ограничения вроде игнорирования скрытых файлов, поэтому не переиспользуйте её как есть для полной резервной копии важной папки.7 Если выполнение останавливается с ошибкой, не используйте этот прогон для измерения; проверьте тестовую папку, путь которой был показан. Удаляйте только после подтверждения, что папка — та, которую создали сами.

Одинаковые условия измерения

Одни и те же устройства источника и назначения, одна сеть, один способ копирования. Для начала копируйте все три в проводнике; не используйте перемещение. Назначение каждый раз — новая пустая папка, чтобы не смешивались пропуск уже существующих файлов и запросы на перезапись.

Процедура выравнивания условий сравненияЗафиксируйте путь и способ копирования, копируйте в пустое назначение несколько раз в разном порядке и после завершения проверьте содержимое.Одни устройства, путь и способКаждый раз пустое назначениеИзмерить несколько раз в разном порядкеПроверить и число, и содержимое

Рис. 8: Не считайте время, сэкономленное пропуском уже скопированных файлов, более быстрой передачей.

Измеряйте каждый случай, например, три раза, меняя порядок, и записывайте медиану и разброс. Windows кэширует файлы в памяти, поэтому только второй прогон может выйти быстрее. Новое назначение не сбрасывает кэш на стороне чтения. Эта процедура показывает тенденцию, близкую к повседневному копированию, а не строгую производительность носителя без кэша.5

Копирование внутри одного физического диска конкурирует чтениями и записями, поэтому не смешивайте его с копированием на отдельное устройство. Не используйте облачные файлы только в сети, потому что войдёт время их загрузки, и не меняйте по ходу условия вроде антивируса или синхронизации.

Случай Время создания Время передачи Время распаковки Итого до того, как фото и т. п. можно использовать
A: Один крупный файл Исключено (подготовка к сравнению) Измерить и записать Не нужно Время передачи (контроль)
B: 10 000 мелких файлов Исключено (подготовка к сравнению) Измерить и записать Не нужно Время передачи
C: Несжатый ZIP, собирающий B Записать создание ZIP Измерить и записать Записать при необходимости Создание + передача + распаковка

Это таблица для записи; цифр результатов в ней нет. A — контроль для наблюдения характеристик передачи; из-за другой структуры файлов это не замена B. Для практического сравнения B и C цель — поместить один и тот же набор файлов в одно конечное расположение. Всегда записывайте и то, где выполнялась распаковка.

После копирования или распаковки сверяйте число файлов и суммарные байты и при необходимости проверяйте содержимое хешами. Проверочные чтения делайте вне измерения и учитывайте, что они влияют на кэш следующего прогона. Время до закрытия диалога копирования не измеряет время, пока данные переживут отключение питания, поэтому сразу после этого не экспериментируйте с отключением внешнего устройства.5

7. Когда ZIP использовать нельзя, копируйте параллельно понемногу

Для сценариев, где отдельные файлы должны сразу быть доступны в назначении, или где каждый раз отправляют только изменившиеся файлы, сборка в ZIP может не подойти. У встроенного в Windows robocopy есть /MT, который обрабатывает несколько файлов параллельно.89

Перекрытие ожидания на файл параллельноОбрабатывая несколько файлов сразу, можно продолжать другую передачу, пока один файл ждёт.Обрабатывать несколько файлов сразуФайл A ждёт ответаФайл B передаётсяОжидания перекрываются

Рис. 9: Параллельность — способ перекрыть ожидания; она не делает саму линию или диск быстрее.

Следующий пример копирует из ранее созданного $smallDir. Смените только $targetRoot на назначение, куда можно писать. Для каждого прогона создавайте отдельную папку назначения и не используйте параметры, которые удаляют исходные данные или назначение.

$targetRoot = '\\NAS\share\CopyLab' # смените на своё назначение
$runId = [guid]::NewGuid().ToString('N')
$target = Join-Path $targetRoot ('small-mt8-' + $runId)
$log = Join-Path $lab ('robocopy-' + $runId + '.log')
robocopy $smallDir $target /E /MT:8 /R:1 /W:1 /XJ "/LOG:$log"
$code = $LASTEXITCODE
if ($code -ge 8) {
    throw "При копировании были сбои. Код выхода=$code, журнал=$log"
}
Write-Host "Код выхода=$code. Проверьте в журнале число скопированных и число сбоев, а также содержимое назначения: $log"

/MT:8 означает 8 потоков, /R:1 /W:1 — число повторов и ожидание в секундах при сбое, /LOG сохраняет журнал. robocopy сообщает об успешном копировании даже с кодом выхода 1, а 8 и выше включают сбои. Это не значит, что при 0–7 можно не проверять содержимое.8

/MT:8 — пример стартовой точки сравнения, а не оптимальное значение. Слишком большая параллельность увеличивает нагрузку на другую сторону и может наоборот замедлить.1 Ограничивайте то, что меняете за раз: например, сравнивайте /MT:1 и /MT:8 одним способом. Не судите эффект ни того, ни другого по результату, где ZIP и параллельность менялись одновременно.

8. Прежде чем заключить «медленно, значит сломано»

Медленны только многие мелкие файлы или крупные тоже? Что происходит, когда те же файлы копируют локально? Разделение этого сужает, куда смотреть. Когда скорость падает по ходу, может быть задействован кэш, и одной отображаемой скорости недостаточно, чтобы указать причину.5

Изоляция медленного копированияРазбирает медленность, ограниченную мелкими файлами, отдельно от медленности независимо от типа данных.ДаНетМедленны только мелкие файлы?Смотреть число файлов и время ожиданияТакже проверить устройство, соединение и нагрузкуТакже проверить сбои или отключения

Рис. 10: Скорость, которая не масштабируется на мелких файлах, и сбои копирования или неисправность устройства — не одна история.

Когда происходят сбои копирования или отключения, или стало резко хуже, чем раньше, не останавливайтесь на объяснении одним числом файлов. На первое место поставьте сохранение важных данных и проверьте журналы и состояние устройств.

Кроме того, останавливать антивирус или отключать подпись SMB ради скорости не рекомендуется. Подпись SMB служит в том числе для предотвращения подделки обмена.10 На управляемом ПК не обходите настройки; обратитесь к ответственному.

Итог

Время копирования складывается и из времени, пропорционального объёму данных, и из работы, пропорциональной числу файлов. Поэтому «это 1 ГБ, значит время одно» не обязательно верно.

Если пробуете ZIP, смотрите дальше коэффициента сжатия на создание, передачу и распаковку. Если пробуете параллельное копирование, меняйте за раз только число потоков. Прежде чем покупать более быстрое оборудование, взгляд на суммарный объём и число файлов вместе облегчает понимание того, что происходит на вашем Windows сейчас.

Справочные ссылки

  1. Microsoft Learn, Slow SMB files transfer speed. О множестве мелких файлов, нагрузке создания файлов, обмена и сканирования, параллельном копировании и распаковке архива на назначении.  2 3 4 5

  2. Microsoft Learn, CreateFileW function. Об открытии и создании файлов, правах доступа и режимах совместного доступа. 

  3. Microsoft Learn, Master File Table. О том, как NTFS хранит сведения управления на каждый файл. 

  4. Microsoft Open Specifications, Sending Compounded Requests. О том, как SMB2 отправляет несколько связанных операций вместе. 

  5. Microsoft Learn, File Caching. О системном файловом кэше и механизме, который откладывает записи перед применением.  2 3 4

  6. Microsoft Support, Zip and unzip files. О сборке файлов ZIP и о том, что JPEG от дополнительного сжатия почти не уменьшаются. 

  7. Microsoft Learn, Compress-Archive. О настройке NoCompression и ограничениях вроде скрытых файлов.  2

  8. Microsoft Learn, robocopy. О числе потоков, повторах, журналировании, параметрах копирования и кодах выхода.  2

  9. Microsoft Learn, Performance Tuning for SMB File Servers. О параллельности robocopy и выводе журнала при копировании мелких файлов. 

  10. Microsoft Learn, SMB signing overview. О том, что защищает подпись SMB, и как думать о ней в эксплуатации. 

Недавние статьи с теми же тегами помогут подробнее изучить близкие темы.

Тёмный режим и темы контрастности в приложениях Windows ── тёмная панель заголовка DWM, следование системной теме в WinForms/WPF, отрисовка при высокой контрастности

Как заставить приложения WinForms и WPF следовать тёмному режиму и темам контрастности Windows 11. Тёмная панель заголовка DWM, SetColorM...

Эти страницы показывают тему статьи в более широком контексте услуг и решений.

Статья напрямую связана со следующими услугами.

Частые вопросы

Вопросы, которые часто возникают при консультациях по теме статьи.

Почему папка с фото копируется медленнее при том же объёме?
Копирование — это не только перенос содержимого. Для каждого файла создаётся файл назначения, ведутся сведения о нём, он закрывается и так далее. Когда мелких файлов много, доля этой обработки и ожидания растёт. Важно не сам формат фото, а число файлов и размер каждого.
На SSD или быстрой LAN мелкие файлы всё равно копируются медленно?
Да. Даже на SSD работа по управлению файлами остаётся, а при копировании на NAS и подобное добавляется время ожидания сети и обработки на другой стороне. Скорость непрерывной передачи крупных файлов и скорость обработки множества мелких — разные вещи.
Если JPEG в ZIP почти не сжимаются, есть ли смысл их собирать?
Даже когда размер почти не уменьшается, эффект сборки передаваемых файлов в один остаётся. Но создание и распаковка ZIP тоже занимают время. Для сценариев, где нужна распаковка, сравнивайте суммарное время создания, передачи и распаковки.
Быстрее ли отправить ZIP на NAS и затем распаковать его в общую папку с ПК?
При таком способе ПК пишет распакованные мелкие файлы на NAS, поэтому создание файлов по сети происходит заново. Отличайте это от распаковки внутри NAS функцией, которую поддерживает сам NAS, и измеряйте с учётом распаковки.
Параллельное копирование robocopy ускоряется, чем больше потоков?
Нет. Параллельность позволяет перекрывать ожидания по файлам, но и увеличивает нагрузку на накопитель или NAS. Сравнивайте в одинаковых условиях, начиная с небольшого числа потоков, и по журналу проверяйте сбои копирования и пропущенные файлы.

Об авторе

Страница с профилем автора статьи.

Го Комура

Представитель KomuraSoft LLC

Специализируется на разработке программного обеспечения для Windows, техническом консалтинге и расследовании сбоев, особенно в проектах с унаследованными системами и трудно воспроизводимыми ошибками.

Публичные ссылки

Вернуться в блог