Мне нужно скопировать некоторые данные, которые включают 900 000 крошечных файлов общим объемом около 30 гигабайт на компьютер с Windows. Однако его необходимо скопировать и настроить менее чем за полтора часа, а копирование с жесткого диска USB может занять более 5 часов, в основном из-за огромного количества файлов. Есть ли лучший / более быстрый способ справиться с этим, например, выполнить какое-то блочное копирование? Спасибо
8 ответов
Если жесткий диск можно извлечь из интерфейса USB и подключить к SATA/ATA, я бы установил его на конечном компьютере. Как вы заметили, скорость передачи будет намного выше. Для копирования, если вы работаете в Windows, я бы сделал простую ROBOCOPY. Это примерно так быстро, как вы можете надеяться, хотя есть и другие альтернативы.
ROBOCOPY /E /B /MT 'source' 'destination'
Я бы постарался не сжимать все эти файлы, хотя есть большая вероятность, что время сжатия и перемещения превысит простое перемещение файлов.
* Добавлена опция /MT для robocopy. Это может значительно ускорить передачу, когда вы находитесь в многопоточной среде.
Вы можете попробовать сделать снимок всей папки / диска
В системах Linux вы можете использовать dd
чтобы получить сырую копию файловой системы и скопировать ее как один большой файл.
Чтобы извлечь образ в Windows, вам может понадобиться установить Cygwin или программу, способную обрабатывать образы dd
.
С большим количеством файлов лучше всего создать архив tar, чтобы у вас было меньше файлов для работы. Если вы используете внешний жесткий диск USB 2.0, вы должны использовать USB 3.0, eSATA или использовать быструю локальную сеть.
Какая у вас исходная ОС? Если обе ваши операционные системы были Linux, вы могли бы передать файлы через tar, gzip и ssh на целевой компьютер. Вы можете установить cygwin на Windows, чтобы получить этот тип функциональности и для Windows.
Обновить:
В посте « Использование Tar и SSH для улучшения скоростей SCP » описаны команды, необходимые для отправки содержимого tar через ssh.
Установите диск с исходными файлами на компьютер, который вы настраиваете, и перенесите диск на диск. Забудь про USB. Даже передача по проводам (объединение компьютеров в сеть) будет быстрее, чем через USB (при условии, что USB 2.0 и 1 Гбит / с NIC). Если это повторяющееся событие, обратите внимание на репликацию.
Используйте 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 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 минут (\$ \frac {30,000} {5} = = 6000 \$ секунд. \$ \Frac {6,000} {60} = 100 \$ минут или 1:40 часов)
Следовательно, невозможно достичь скорости лучше, чем ~ 5 МБ / с, то есть с идеальным диском (и с меньшим количеством операций поиска. Это для одного поиска на файл. Реально было бы два). Вы полностью ограничены производительностью диска.
Единственный способ улучшить производительность - это последовательно копировать всю файловую систему и раздел. dd
может сделать это на Linux.
Что ты пытаешься сделать?
Попробуйте 7zip архивировать файлы только в один файл. Если возможно, используйте WLAN с подключением adhoc к ноутбуку.
Что касается ответа @arcyqwery, вы можете сжать его и одновременно превратить в один большой файл. Это немного ускорит процесс.
Может также стоить использовать такую программу, как TeraCopy, так как она обычно быстрее, чем производительность копирования окон по умолчанию. Вы должны проверить с подобными обстоятельствами в вашем случае, чтобы проверить, хотя.