Копіювання на USB-накопичувач дійсно повільно?


45

Коли я копіюю файли на USB-пристрій, це займає набагато більше часу, ніж у Windows (той самий usb-пристрій, той же порт), це швидше, ніж швидкості USB 1.0 (1МБ / с), але набагато повільніше, ніж швидкості USB 2.0 (12МБ / с). Для копіювання 1,8 Гб потрібно більше 10 хвилин (це повинно бути <3 хв.) У мене є дві однакові палички SanDisk Cruzer 8 Гб, і у мене однакова проблема з обома. У мене супер сусідній порт 32 ГБ SSD, він працює з очікуваною швидкістю.

Проблема, яку я, мабуть, бачу в графічному інтерфейсі, полягає в тому, що панель прогресу йде до 90% майже миттєво, завершується до 100% трохи повільніше, а потім зависає там протягом 10 хвилин. Переривання копії в цей момент, схоже, призводить до пошкодження в кінці файлу. Якщо я зачекаю його завершення, копія буде успішною.

Будь-які ідеї? dmesg вихід нижче:

[64059.432309] usb 2-1.2: new high-speed USB device number 5 using ehci_hcd
[64059.526419] scsi8 : usb-storage 2-1.2:1.0
[64060.529071] scsi 8:0:0:0: Direct-Access     SanDisk  Cruzer           1.14 PQ: 0 ANSI: 2
[64060.530834] sd 8:0:0:0: Attached scsi generic sg4 type 0
[64060.531925] sd 8:0:0:0: [sdd] 15633408 512-byte logical blocks: (8.00 GB/7.45 GiB)
[64060.533419] sd 8:0:0:0: [sdd] Write Protect is off
[64060.533428] sd 8:0:0:0: [sdd] Mode Sense: 03 00 00 00
[64060.534319] sd 8:0:0:0: [sdd] No Caching mode page present
[64060.534327] sd 8:0:0:0: [sdd] Assuming drive cache: write through
[64060.537988] sd 8:0:0:0: [sdd] No Caching mode page present
[64060.537995] sd 8:0:0:0: [sdd] Assuming drive cache: write through
[64060.541290]  sdd: sdd1
[64060.544617] sd 8:0:0:0: [sdd] No Caching mode page present
[64060.544619] sd 8:0:0:0: [sdd] Assuming drive cache: write through
[64060.544621] sd 8:0:0:0: [sdd] Attached SCSI removable disk

Linux відкладає записи на диск в обмін на швидше виконання інших завдань. Лише здогадка, спробуйте запустити syncі побачити, чи не прискорить процес. <- неперевірений, але можливий
RobotHumans

це не має сенсу, що це відкладе його для одного типу USB, але не для іншого. Також, здається, я згадую синхронізацію дзвінків Linux кожні 30 секунд чи так? Можливо, застаріла. Я очікую, що це певна проблема з драйвером або сумісністю, оскільки це залежить від типу пристрою.
Eloff

Про те, що швидше працювати на інших USB-накопичувачах, не викликає ваших питань. Якби це було, я б запропонував заглянути в hdparm. Тож має сенс, якщо ви бачите це з точки зору того, хто не знає всієї вашої організації, але залежить від вашого детального запитання
RobotHumans

« У мене є супер талант 32GB USB SSD в сусідньому порту , і він працює на очікуваних швидкостях.» це було там, але добре приховано, визнаю :) Отже, що це за штука hdparm, яку ви натякаєте?
Елофф

Гаразд, SSD і флеш-пам'ять - це не одне і те ж. Але рухаючись далі, hdparm - це утиліта, яка дозволяє встановлювати швидкість доступу / віджиму для диска вручну
RobotHumans

Відповіді:


29

Чому копіювання на мій USB-диск так повільно в Linux (і швидше в Windows)?

Кешування Причина 1. Файл може зробити запис з'являються повільніше або швидше

Проблема, яку я, мабуть, бачу в графічному інтерфейсі, полягає в тому, що панель прогресу йде до 90% майже миттєво, завершується до 100% трохи повільніше, а потім зависає там протягом 10 хвилин.

Одне, що вам потрібно зрозуміти, - це кешування файлів. Linux (і Windows) використовуватимуть в іншому випадку "порожню" оперативну пам'ять для кешування операцій читання / запису та прискорюють їх при наступних доступах. Кешування операцій копіювання на повільних пристроях призводить до поведінки, яку ви бачите - "швидке завершення" насправді записується в кеш, а потім він сповільнюється і припиняється, оскільки фактичне передавання даних у кеш (синхронізація) повільному пристрою займає дуже довго. Якщо ви перервали в цей момент, дані пошкоджуються (як ви зазначали), оскільки синхронізація ніколи не закінчувалася.

Таке копіювання в Windows може здаватися швидшим (включаючи повідомлені швидкості МБ / сек), оскільки іноді Windows не чекатиме синхронізації, і оголошує завдання виконаним, як тільки дані записуються в кеш.

Причина 2. Запис багатьох файлів, особливо невеликих, відбувається повільно

Скопіювати 1,8 Гб

Через спосіб роботи флеш-пам’яті та файлових систем найшвидша пропускна здатність (швидкість) досягається при записі дуже великих файлів. Запис безлічі невеликих файлів або навіть змішаних даних, що містять ряд невеликих файлів, може значно уповільнити процес. Це впливає і на жорсткі диски, але дещо меншою мірою.

Причина 3. Швидкість запису на USB-накопичувач та SSD не можна порівняти

У мене супер сусідній порт 32 ГБ SSD, він працює з очікуваною швидкістю.

  • USB-накопичувач для садових сортів зазвичай складається з мікросхем флеш-пам’яті, які записуються послідовно (послідовно), і не має власного кешу.

  • SSD, з іншого боку, містить контролер, який записує в мікросхему флеш-пам'яті паралельно , збільшуючи пропускну здатність в два рази або більше через USB-накопичувач.

    • Якщо на вашому SSD-диску 32 Гб був 4х 8 Гб мікросхем, він все одно був би в 4 рази швидшим, ніж USB-накопичувач при будь-якій операції запису.
    • SSD також містить кеш оперативної пам’яті (як жорсткі диски), тому він може швидко зберігати вхідні дані в кеш-пам'ять і повідомляти ОС, що це зроблено, в той час як він все ще повинен насправді записати ці дані у флеш-пам’ять.
  • Таким чином, з одним великим файлом ваш 32 Гб ГБ зі структурою 4x, яку ми припускали, був би швидко на 4 рази; з багатьма невеликими файлами, це було б в 10 разів або більше, оскільки воно могло інтелектуально зберігати їх у своєму кеші.


Підводячи підсумок , це причини, через які копіювання файлів на USB-накопичувачі може виглядати повільніше в Linux. Це насправді повільніше через проблему з апаратним забезпеченням / драйвером чи що завгодно ....

Правильне порівняння швидкості запису між Linux та Windows

  • Перш за все, забудьте про SSD через причину 3. Це як апельсини та яблука.
  • Щоб заперечити наслідки причини 1 (кешування) та причини 2 (невеликі файли), вам потрібно протестувати один великий файл, більший за об'єм оперативної пам’яті в тестовій системі.
  • У Linux ви можете створити його, завдяки dd if=/dev/urandom of=largetest bs=1M count=7500чому ви отримаєте тестовий файл 7500 Мб. Якщо припустити, що у вашій системі є менше 4 Гб оперативної пам’яті, це досить добре. Скопіюйте це на щойно відформатовану паличку Sandisk 8GB та вкажіть її.
  • Перезавантажте в Windows і скопіюйте largetestз USB-накопичувача на ваш жорсткий диск. Перезавантажте знову (щоб видалити його з кеша). Потім відформатуйте USB-накопичувач (той же vfat / FAT32!) Та скопіюйте largetestз жорсткого диска на накопичувач.
  • Як порівнюються часи?

2
cc: @Eloff Причина 1 : Так, кеш-синхронізація, безумовно, може вплинути на видимий час запису. Але хіба один кеш пояснить, чому він там висить протягом 10 хвилин ?? Я думаю, нам потрібно більше деталей від ОП. Re Причина 2 : Чому ви припускаєте , ця передача складалася з безлічі дрібних файлів? Я не думаю, що ОП надає якісь деталі щодо цієї передачі 1,8 Гб, чи не так? Re Причина 3 : Так, SSD це інший звір. Можливо, він також буде приєднаний через SATA, а не через USB. Я думаю, що OP просто неправильно говорив і називав USB-накопичувач як SSD. Але знову ж таки, жодного способу знати, якщо ми не отримаємо більше деталей з ОП.
Ірраціональний Іван

2
Ця відповідь відверто ігнорує, як було сформульовано питання. Питання чітко говорить про один великий файл, а також про те, що переривання копії призводить до забрудненого файлу.
zrajm

4
@zrajm це правда. Однак для таких людей, як я, натрапляючи на ту ж проблему, це дуже корисно.
Пітікос

Як тоді відключити цю поведінку кешування?
Аміну Кано

7

Знайшов виправлення, що все, що я робив, було відключити, видалити диск та запустити sudo modprobe ehci_hcdв Терміналі. Вставте привід і по-азіанськи, sudo modprobe ehci_hcdколи я поставив привід і нічого собі 20 / mbs подумав, що я поділюсь. Сподіваюся, я не повинен це робити кожен раз ... але це не важко ...

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/177235 каже, що помилку виправили.


Серйозно ?? Звіт про помилки складається з грудня 2007 року та посилається на Ubuntu gutsy 7.10. (FYI: @MarcoCeppi)
нераціональний Джон

3
@irrationalJohn Я не дав відповіді, я просто прибрав її. По-друге, лише те, що звіт про помилку старий, не означає, що він ще не є дійсним. Його проводять відповідно до цього
Марко Чеппі

@MarcoCeppi Так, я знаю, що ви лише редагували. Ось чому я напередодні " FYI: ". Я подумав, що якщо ти це відредагуєш, то, можливо, будеш зацікавлений (а може і не ). Я подумав, що якщо вам все одно, ви просто проігноруєте повідомлення. Що стосується старого звіту про помилку, який все ще має значення ... Понад 4 роки тому я думаю, що принаймні 8 (?) Версій пізніше? Для помилки продуктивності? Звичайно, це можливо, але це не перше місце, де я б виглядав. FWIW.
ірраціональний Джон

7

Я думаю, шанси дуже низькі, що це питання порту. Ймовірніше, що проблема LINUX (або конфігурація Linux) - гугнути навколо, і ви знайдете тисячі звітів про проблеми про повільний USB в linux / ubuntu. Для мене це майже showstopper для Linux - у мене зараз є Ubuntu 12.04 LTS і все ще є ця проблема (тому я скоріше використовую налаштування Win7 - головним чином / тільки через це). Це питання (або щось із подібними симптомами) існує вже декілька років, мабуть, немає вирішення. І за цей час я спробував кілька фізичних ПК з декількома різними версіями ubuntu (конфігурація за замовчуванням) та 2-3 різними USB-накопичувачами ....


5

Просто umountпристрій, якщо він уже є в автоматичному режимі, і вручну встановити його /mnt/foldername.

У моєму випадку

umount /media/usb0
mount /dev/sdb1 /mnt/sam

Після цього справляється дуже швидко.


Це разом із rsyncзамість того, cpздається, робить трюк.
Ірфан

19
Це не мало значення для моєї ситуації. Крім того, це насправді не рішення без певної теорії щодо того, чому це повинно змінити значення.
LondonRob

@Irfan Ні, rsync теж сповільнюється ...
sergzach

3

Настав 2019 рік, і я все ще маю цю саму проблему. Тому я зрозумів, що шукаю рішення в Інтернеті. Я знайшов таку сторінку, яка пропонує одну: https://gist.github.com/2E0PGS/f63544f8abe69acc5caaa54f56efe52f

Він говорить:

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

echo $((16*1024*1024)) > /proc/sys/vm/dirty_background_bytes
echo $((48*1024*1024)) > /proc/sys/vm/dirty_bytes

Якщо це працює, ви можете зробити цю зміну стійкою під час перезавантаження, вставивши два рядки в кінці /etc/rc.localфайлу.

Для мене це мало такий ефект:

Попереднє копіювання великих файлів на USB-накопичувач розпочнеться дуже швидко (наприклад, 60 Мб / с) і стане повільнішим і повільнішим (<10 Мб / с), поки не буде схоже, що він ніколи не закінчиться.

Тепер він починає повільніше, але стає все швидшим і швидшим і закінчується раніше, ніж раніше. Тож це, здається, "вирішує" проблему або принаймні позитивно впливає.


1

Якщо ви перейдете на USB 3.0, ви перейдете від 1mb / s до woping 5-8mb / s. Я перемикаюсь на 3,0 ПК та зовнішній HD і не оглядався.


1

Якщо ви заглянете в / etc / mtab, чи бачите ви, що пристрій встановлено з опцією "flush"?

Якщо так, це може бути причиною проблеми (це було для мене). Просто відключіть пристрій і повторно встановіть його, він не повинен встановлюватися за замовчуванням.


Опція змиву встановлена ​​за замовчуванням, будь-яким способом зупинити це?
Бен Лутгенс

@ Бен Лутгенс - Так, ви можете розмістити свій власний запис у / etc / fstab, який не має варіантів флеш-версії. Використовуйте sudo blkid, щоб знайти відповідний UUID пристрою та введіть такий запис, як UUID = "ваш пристрій uuid тут" / mnt / <ваша точка монтування тут> uid = 1000, gid = 1000, fmask = 0022, dmask = 0022 0 0. Змініть uid, gid, щоб відповідати userid та groupid звичайного користувача, який ви використовуєте (як це виявило getent passwd <your user>).
A.Danischewski

Коли я це роблю, все, що змінюється, полягає в тому, що я більше не отримую панель прогресу для копіювання, і копіювання здається, що справді запускається / закінчується, коли я намагаюся відключити пристрій, і це говорить мені "не відключайте шнур, поки операція не закінчена. ".
Дженні О'Рейлі

0

У мене були деякі проблеми і зі швидкістю передачі на зовнішньому диску WD, після відкриття його у Windows SO, я завжди використовував LINUX, після цього швидкість передачі була як 1,5 Мб / с, ніж я відключую зовнішній жорсткий диск, що працює на dmesg, там він був кажучи, що sdb1 це було непридатно відключено, запущено fsck, який зробив кілька ремонтів і після цього 20 Мб / с швидкість передачі знову при копіюванні з sda на зовнішній диск. fsck - це завжди ризик, якщо у вас є дані, але він працював на мене, без втрати даних.


-2

У мене також була ця проблема, але я використовую команду cp, і ви оновлюєте свій USB-паличку за секунди;

cp -r -u /home/user/Muziek/ /media/user/Audiousbsti
cp -r -u /home/user/Muziek/ /media/user/4F49-4A65/

Я думаю, що це дуже пізня відповідь, але вона все ще відкрита.


-3

Гаразд, у мене була така ж проблема протягом трьох днів, і як мені вдалося створити резервну копію жорсткого диска 1 ТБ за допомогою rsync, я знаю, що він використовується для резервного копіювання, але це було зроблено роботу, навіть при передачі великих файлів я використовую його зробіть цю роботу. Якщо ви хочете використовувати його з графічним інтерфейсом, я пропоную встановити Grsync, який є графічною версією rsync, оскільки rsync працює на терміналі.

Сподіваюся, що це допомогло

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