Як швидко скопіювати 900 000 файлів?


9

Мені потрібно скопіювати деякі дані, що містять 900000 крихітних файлів на загальну суму близько 30 гігабайт на комп'ютер Windows. Однак його потрібно мати можливість скопіювати та налаштувати за півтори години, а копіювання з жорсткого диска USB здебільшого через шалену кількість файлів може зайняти 5+ годин. Чи є кращий / швидший спосіб впоратися з цим, наприклад, робити якесь блокове копіювання? Дякую


8
Це стане дуже агресивною ціллю для будь-якої файлової копії з одного, не-SSD диска. Просто перерахування всіх файлів та робота із записами та метаданими файлової системи для багатьох файлів займає значну кількість часу.
afrazier

5
Чи можете ви просто вийняти жорсткий диск і розмістити його в пункті призначення? це була б найшвидша швидкість, що передається по материнській платі.
iTom


Хочете побачити це питання в блозі? Допомога, відповівши або голосуючи в Meta .
Тамара Війсман

Відповіді:


7

З великою кількістю файлів найкраще створити архів дьогтю, щоб у вас було менше файлів для роботи. Якщо ви використовуєте зовнішній жорсткий диск USB 2.0, слід поглянути на використання USB 3.0, eSATA або швидку локальну мережу.

Яка ваша ОС джерела? Якщо обидві ваші операційні системи були Linux, ви можете передавати файли через tar, gzip та ssh до цільової машини. Ви можете встановити cygwin в Windows, щоб отримати такий тип функціональності і для Windows.

Оновлення:
" Використання Tar та SSH для поліпшення швидкості SCP " описує команди, необхідні для надсилання вмісту tar через ssh.


tar все одно буде читати всі файли по одному.
Томаш Андрле

Так, але ви зробили би це лише один раз, і інші команди, такі як scp, не затримувались, маючи справу з окремими файлами. Якщо файли можна зберігати в архіві смоли на цільовій машині, ви також економите час на написання одного файлу замість багатьох.
dabest1

Я припускаю, що USB-з'єднання є вузьким місцем. Отож, неприпустиме зображення диска, як підказує @arcyqwerty, здається мені найкращим рішенням. Мені буде цікаво побачити деякі фактичні результати, хоча, можливо, я абсолютно помиляюся!
Томаш Андрле

1
@TomA - З мого досвіду, коли ми маємо справу з безліччю крихітних файлів, жорсткий диск - це вузьке місце. Кожен з прочитаних файлів потребує головної спроби до растрового зображення Allocation, а потім ще одного пошуку для фактичного вмісту файлу. В результаті жорсткий диск витрачає більшість часу на пошук, і дуже мало часу на читання файлів.
Підроблене ім’я

2
Наприклад, з 1K файлами я отримую ~ 1-5 Мбіт / с за свій гігабітний лан. З великими файлами (кожен гігабайт) я отримую ~ 80-90 Мбіт / с. Вся справа в послідовних читаннях.
Підроблена назва

8

Якщо жорсткий диск можна буде вийняти з інтерфейсу USB і на SATA / ATA, я встановив би його в призначений комп'ютер. Ви отримаєте набагато більшу швидкість передачі, як відзначили інші. Для копіювання, якщо припустити, що ви в Windows, я б зробив просту РОБОКОПІЮ. Це приблизно так швидко, як і справді можна сподіватися, хоча є й інші варіанти.

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

Я б спробував уникнути стиснення всіх цих файлів, є хороший шанс, що час для стискання та переміщення перевищить просто переміщення файлів.

* Додана опція / MT для роботоскопії. Це може значно пришвидшити передачу, коли ви перебуваєте в багатопотоковому середовищі.


Чи /MTдопоможе локальна передача одного диска або призведе до масового обстрілу диска? Це звичайно для копіювання великих спільних ресурсів між серверами, але вони часто мають додаткові затримки через перехід через мережу та покращений IOPS з масивів RAID.
afrazier

Я не можу дуже коментувати цей аспект. Я використовую робокопію для резервного копіювання всіх моїх проектів VS щовечора, хоча коштує лише близько 10 ГБ. Потрібно лише декілька моментів, оскільки файли, які вже існують, не копіюються. Я знайшов ці орієнтири Robocopy кілька місяців тому: demartek.com/Reports_Free/…
Лі Гаррісон

на мій досвід, якщо адаптер USB до SATA у корпусі диска підтримує вбудовану чергу команд, то я отримаю значне підвищення продуктивності від перемикача / MT.
longneck

6

Ви можете спробувати сфотографувати всю папку / диск

У системах Linux можна ddотримати необроблену копію файлової системи та скопіювати її як єдиний великий файл.

Щоб витягти зображення на Windows, вам може знадобитися встановити cygwin або програму, яка здатна обробляти ddзображення.


Ось такий квиток.
Томаш Андрле

3

Встановіть диск, де вихідні файли перебувають на комп'ютері, на якому ви налаштовуєте, та перенесіть диск на диск. Забудьте про USB. Навіть передача по дроту (з'єднайте машини разом) була б швидшою, ніж USB (припускаючи USB 2.0 та 1Gbps 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 з приєднанням до ноутбука.


1
або ще краще, пряме з'єднання Ethernet, бажано gig-e
Journeyman Geek

0

Пов’язана з відповіддю @arcyqwery, можливо, ви зможете її стиснути і одночасно перетворити в один великий файл. Це дещо прискорить процес.

Можливо, варто також використовувати таку програму, як TeraCopy , оскільки вона зазвичай швидша, ніж продуктивність копіювання Windows за замовчуванням. Ви повинні перевірити, чи немає у вашому випадку подібних обставин, щоб перевірити.


0

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.