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

9

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

Джо Лига
источник
8
Это будет очень агрессивная цель для любой файловой копии с одного диска без SSD. Простое перечисление всех файлов и обработка записей и метаданных файловой системы для такого количества файлов занимает значительное время.
afrazier
5
Вы можете просто удалить жесткий диск и поместить его в место назначения? это была бы самая быстрая скорость передачи через объединительную плату материнской платы.
iTom
1
xkcd.com/949
user541686
Хотите увидеть этот вопрос в блоге? Помогите, ответив или проголосовав в Meta .
Тамара Вийсман

Ответы:

7

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

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

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

dabest1
источник
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образы.

arcyqwerty
источник
Это билет.
Томас Андрле
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 к ноутбуку.

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

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

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

soandos
источник
0

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

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

Rm558
источник