Как быстро скопировать 900 000 файлов?


9

Мне нужно скопировать некоторые данные, которые включают 900 000 крошечных файлов общим объемом около 30 гигабайт на компьютер с Windows. Тем не менее, его необходимо скопировать и настроить менее чем за полтора часа, а копирование с жесткого диска USB может занять более 5 часов, в основном из-за огромного количества файлов. Есть ли лучший / более быстрый способ справиться с этим, такой как копирование блоков? Спасибо


8
Это будет очень агрессивная цель для любой файловой копии с одного диска без SSD. Простое перечисление всех файлов и обработка записей и метаданных файловой системы для такого количества файлов занимает значительное время.
afrazier

5
Вы можете просто удалить жесткий диск и поместить его в место назначения? это была бы самая быстрая скорость передачи через объединительную плату материнской платы.
iTom


Хотите увидеть этот вопрос в блоге? Помогите, ответив или проголосовав в Meta .
Тамара Вийсман

Ответы:


7

При большом количестве файлов лучше создать архив tar, чтобы у вас было меньше файлов для работы. Если вы используете внешний жесткий диск USB 2.0, вы должны использовать USB 3.0, eSATA или использовать быструю локальную сеть.

Какая у вас исходная ОС? Если обе ваши операционные системы были Linux, вы могли бы передать файлы через tar, gzip и ssh на целевой компьютер. Вы можете установить Cygwin на Windows, чтобы получить этот тип функциональности и для Windows.

Обновление: пост
" Использование Tar и SSH для улучшения скоростей SCP " описывает команды, необходимые для отправки содержимого tar через ssh.


tar по-прежнему будет читать все файлы по одному.
Томас Андрле

Да, но вы сделаете это только один раз, и другие команды, такие как scp, не будут задерживаться при работе с отдельными файлами. Если файлы можно сохранить в архиве tar на целевой машине, то вы также экономите время на записи одного файла вместо многих.
dabest1

Я предполагаю, что USB-соединение является узким местом. Поэтому создание исходного образа диска, как подсказывает @arcyqwerty, кажется мне лучшим решением. Мне было бы любопытно увидеть некоторые реальные результаты, хотя, может быть, я совершенно не прав!
Томас Андрле

1
@TomA - По моему опыту, при работе с множеством мелких файлов жесткий диск является узким местом. При каждом чтении файла требуется поиск по голове для растрового изображения Allocation, а затем повторная попытка поиска содержимого файла. В результате жесткий диск тратит большую часть своего времени на поиск и очень мало времени на чтение файлов.
Фальшивое имя

2
Например, с файлами 1K я получаю ~ 1-5 Мбит / с по гигабитной локальной сети. С большими файлами (каждый гигабайт) я получаю ~ 80-90 Мбит / с. Это все о последовательных чтениях.
Фальшивое имя

8

Если жесткий диск можно извлечь из интерфейса USB и подключить к SATA / ATA, я установил бы его на конечном компьютере. Как вы заметили, скорость передачи будет намного выше. Для копирования, если вы работаете в Windows, я бы сделал простую ROBOCOPY. Это так быстро, как вы можете надеяться, хотя есть и другие альтернативы.

ROBOCOPY /E /B /MT 'source' 'destination'

Я бы постарался не сжимать все эти файлы, хотя есть большая вероятность, что время сжатия и перемещения превысит простое перемещение файлов.

* Добавлена ​​опция / MT для robocopy. Это может значительно ускорить передачу, когда вы находитесь в многопоточной среде.


Поможет /MTна локальных переносах с одного диска или вызовет сильное перебивание диска? Это обычное явление для копирования больших общих ресурсов между серверами, но они часто имеют дополнительную задержку из-за обхода сети и улучшенную IOPS из RAID-массивов.
Размягчитель

Я не могу комментировать этот аспект слишком сильно. Я использую robocopy для резервного копирования всех моих проектов VS каждую ночь, хотя стоит всего около 10 ГБ. Это занимает всего несколько секунд, поскольку файлы, которые уже существуют, не копируются. Я нашел это Robocopy контрольных показателей несколько месяцев назад: demartek.com/Reports_Free/...
Ли Харрисон

По моему опыту, если адаптер USB-SATA в корпусе вашего накопителя поддерживает собственную командную очередь, тогда я получаю значительное повышение производительности с помощью ключа / MT.
longneck

6

Вы можете попробовать сделать снимок всей папки / диска

В системах Linux вы можете использовать, ddчтобы получить сырую копию файловой системы и скопировать ее как один большой файл.

Для извлечения образа в Windows вам может понадобиться установить Cygwin или программу, способную обрабатывать ddобразы.


Это билет.
Томас Андрле

3

Установите диск с исходными файлами на компьютере, который вы настраиваете, и перенесите диск на диск. Забудь про USB. Даже передача по проводам (объединение компьютеров в сеть) будет быстрее, чем через USB (при условии, что USB 2.0 и 1 Гбит / с NIC). Если это повторяющееся событие, обратите внимание на репликацию.


3

Используйте rsyncс zопцией.

-z,         --compress              compress file data during the transfer
            --compress-level=NUM    explicitly set compression level
            --skip-compress=LIST    skip compressing files with suffix in LIST

Это увеличит скорость передачи по сети. Так что, скорее всего, бесполезно в вашем случае.

После дополнительного чтения я понял, что не следует использовать флаг '-z' при копировании данных с одного локального жесткого диска на другой, это увеличивает накладные расходы. Спасибо за комментарий от @FakeName.


1
rsync не сжимает для локальных передач (или, по-моему, через локальную сеть). Кроме того, это не принесет пользы, так как реальная проблема заключается в времени, затрачиваемом на чтение файлов, а не на их передачу по проводам (так как для каждого чтения файла требуется как минимум две операции поиска).
Фальшивое имя

@FakeName +1 ты прав, после некоторого прочтения я понял твою точку зрения. Я обновил свой ответ.
Сачин Дивекар

1

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

Предполагая, что для каждого файла требуется 1 HD, время поиска и поиска составляет 7 мс (что является немного идеализированным, реально, для каждого файла потребуется два поиска, если только растровое изображение тома не кэшируется в ОЗУ), в лучшем случае вы будете управлять ~ 142 файлами в секунду ( \ $ \ frac {1000} {7} = 142,8 ... \ $).

Со спецификациями OP (30 ГБ, 900 000 файлов) это составляет ~ 33 КБ на файл (\ $ \ frac {30 000 000k} {900 000} = ~ 33,3 ... \ $. 33 КБ * 142 = 4,68 МБ / с.

Минимальное время для передачи 30 ГБ на 5 Мбайт, составляет ~ 1 час, 40 минут (\ $ \ гидроразрыва {30000} {5} = = 6000 \ $ секунд. \ $ \ Гидроразрыва {6000} {60} = 100 \ $ минут или 1:40 часов)

Поэтому невозможно достичь скорости лучше, чем ~ 5 Мбит / с, и это при идеальном диске (и меньше операций поиска. Это для одного поиска на файл. Реально, это будет два). Вы полностью ограничены производительностью диска.


Единственный способ повысить производительность - это последовательно копировать всю файловую систему и раздел. ddможно сделать это на Linux.

Что ты пытаешься сделать?


Работает ли TeX на кого-то еще? Кажется, это не для меня.
Фальшивое имя

0

Попробуйте 7zip архивировать файлы только в один файл. Если возможно, используйте WLAN с подключением adhoc к ноутбуку.


1
или, еще лучше, прямое подключение к Ethernet, предпочтительно гиг-е
Journeyman Geek

0

Что касается ответа @arcyqwery, вы можете сжать его и одновременно превратить в один большой файл. Это немного ускорит процесс.

Возможно, стоит также использовать такую ​​программу, как TeraCopy , поскольку она обычно быстрее, чем производительность копирования окон по умолчанию. Вы должны проверить с подобными обстоятельствами в вашем случае, чтобы проверить, хотя.


0

У меня был похожий случай. Я отключил Антивирус, скорость копирования изменилась с 3 МБ / с до 12 МБ / с.

введите описание изображения здесь

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.