Как получить лучшую скорость передачи USB в (X) Ubuntu?


14

Когда я подключаю накопитель USB 2.0 к Xubuntu и пытаюсь передавать большие файлы, сначала скорость передачи данных хорошая, но через несколько секунд она падает до 1-2 Мбит / с. Из того, что я прочитал, быстрая передача в начале происходит только до заполнения кеша, а затем используется реальная скорость передачи USB.

В Windows скорость постоянна на уровне около 25 Мбит / с, та же карта памяти, подключенная к тому же порту.

Это вывод dmesg при подключении флешки:

[ 5237.580084] usb 1-4: new high speed USB device using ehci_hcd and address 6
[ 5237.714318] scsi4 : usb-storage 1-4:1.0
[ 5238.713909] scsi 4:0:0:0: Direct-Access     SanDisk  Cruzer           8.02 PQ: 0 ANSI: 0 CCS
[ 5238.715264] sd 4:0:0:0: Attached scsi generic sg2 type 0
[ 5238.727225] sd 4:0:0:0: [sdb] Attached SCSI removable disk
[ 5242.308981] sd 4:0:0:0: [sdb] 31301631 512-byte logical blocks: (16.0 GB/14.9 GiB)
[ 5242.309589] sd 4:0:0:0: [sdb] Assuming drive cache: write through
[ 5242.311228] sd 4:0:0:0: [sdb] Assuming drive cache: write through
[ 5242.311238]  sdb: sdb1

Палка установлена ​​автоматически, вот вывод «mount»:

/dev/sdb1 on /media/B82C-6B07 type vfat (rw,nosuid,nodev,uhelper=udisks,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush)

Я должен использовать vfat, потому что я хочу перенести файлы в мою систему Playstation3. Приведенный ниже тест показывает, что это не главная причина.

Кажется, это распространенная проблема в (X) Ubuntu. Я еще не нашел четкого решения. Кажется, что флешка должна быть установлена ​​как асинхронная, а не как флеш, но я не совсем уверен, как этого добиться. Я не против, если мне придется каждый раз отключать флешку, прежде чем отсоединять ее, если скорость передачи выше.

Есть идеи?

2 ноября. Этот отчет об ошибке, похоже, связан: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/182931 . Что меня беспокоит, так это то, что проблема старше двух лет и до сих пор не решена.

10 ноября. Я начал тест на чтение с palimpstest (из проекта утилиты gnome-disk). Это дает мне минимальную скорость передачи данных 23 Мбит / с. Также попробовал это сейчас в krusader, скорость чтения постоянно> 20 Мбит / с. Таким образом, проблема на самом деле просто писать на флешку!

Вот изображение теста чтения-записи в той же программе:

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

Перед тестом мне пришлось полностью удалить файловую систему, которая показывает, что vfat не является основной причиной, как упоминалось выше.

Еще один совет: если я передаю файл размером 100 МБ, когда он становится равным 100%, на завершение передачи требуется необычно много времени. Мне снова кажется, что файл действительно находится в кеше, но запись на USB-устройство идет очень медленно.

12 ноября: «Хорошие новости». Проблемы, кажется, сама карта памяти. Попытка внешнего жесткого диска (My Book Elite 1 ТБ) дает мне постоянную скорость записи около 20 МБ / с. Сначала я попытался переформатировать карту памяти, чтобы действительно сравнить их (файловые системы были разными). После переформатирования оба диска монтируются одинаково:

/dev/sdb1 on /media/My Book type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096,default_permissions)
/dev/sdc1 on /media/cruzer_ type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096,default_permissions)

Cruzer - это флешка (скорость все еще падает через несколько секунд), My Book - это внешний жесткий диск с постоянной скоростью записи 20 МБ / с.

Трудно сказать, в чем проблема на самом деле. Как я уже говорил, в Windows я получаю одинаково быструю скорость записи и с SanCruzer.

Изменить в конце награды : К сожалению, проблема с флешкой до сих пор не решена. Однако через 7 дней я хочу присуждать награду, конечно. Комментарий от aking1012 был действительно полезным, поскольку он пролил новый свет на этот вопрос. Тем не менее, я чувствую, что должен отдать награду Харримсу, поскольку он приложил максимум усилий для решения проблемы. Спасибо всем.


ocaoimh.ie/ubuntu-linux-slow-external-usb-drive Надеюсь, это поможет =)

1
есть ли разница между скоростью записи для флешек и настоящих внешних
HD-

Отличная идея! Большое спасибо за подсказку, пожалуйста, смотрите результат в моем обновлении (12 ноября). Проблема еще не решена, но это действительно сужает ее!
pgruetter

FWIW, flushопция в вашем выводе монтирования вряд ли поможет. Я думаю, что это даже хуже, чем sync.
Бельдаз

Ответы:


11

В статье « Медленная скорость передачи данных через USB 2.0» предполагается, что это может быть проблемой при подключении устройства по умолчанию с опцией синхронизации:

У вас есть значок «Устройства» на рабочем столе?
Если это так, откройте его. Если нет, попробуйте открыть media: / в konqueror.

Затем выберите устройство -> Свойства -> Монтирование (тег) и снимите флажок Синхронный. (Это запоминается, поэтому вам нужно будет сделать это только один раз для каждого устройства).


Еще несколько идей появилось в отчете об ошибках. Запись на внешнем жестком диске делает запись очень медленной.

  • вы переходите на async во время выполнения с помощью 'sudo mount -o remount, async / dev / sda1' (или какими-либо другими подключенными разделами).
  • вы создаете запись fstab для sda, которая монтирует его асинхронно (для этого необходимо, чтобы устройство всегда подключалось во время загрузки)
  • вы меняете 'sync' на 'async' в источнике pmount и перестраиваете пакет

См. Также обсуждение в статье относительно pmount, если это относится к вашей системе.


Еще одно волшебное решение - медленная запись на USB 2.0, но быстрое чтение, решение еще? и включает в себя повторное монтирование:

Когда я подключаю USB-накопитель к / dev / sdc1 со следующей строкой

/dev/sdc1       /mnt/sdc1     auto    sync,noauto,user,exec     0       0

в / etc / fstab и попробуйте скопировать файл 5,2 МБ на диск с локального жесткого диска, затем через целую минуту было передано 244 КБ. Копирование файла объемом 29 МБ с внешнего диска на локальный диск занимает около 10 секунд.

Затем, если я размонтирую его, измените строку в / etc / fstab на

/dev/sdc1       /mnt/sdc1     auto    noauto,user,exec     0       0

затем копирование файла 29 МБ на внешний диск занимает незаметную долю секунды. То же самое с копированием на локальный диск с внешнего диска.


Смотрите эту статью и ссылку на «usbtree». Он говорит, как проверить, работает ли usb как 1.1 или 2.0:

Linux и USB 2.0 .


Кажется, это специально для KDE. Я использую XFCE4 (Xubuntu). Я все равно попробовал это предложение, так как Konquerer установлен. Открытие носителя: / дает мне исключение "Протокол не поддерживается". Любой другой способ, которым я могу узнать, монтируется ли это "async" или "sync"?
pgruetter

Я добавил еще одну полезную статью.
Harrymc

Ремонта ничего не делает. Вывод «mount» остается прежним. Смотрите мое первоначальное сообщение для этого. Я также попытался смонтировать его с pmount сейчас, спасибо за предложение. С помощью pmount утверждается, что он монтирует async по умолчанию. Тем не менее, скорость передачи данных вначале очень высокая и падает через несколько секунд. Я начинаю верить, что флешка фактически установлена ​​асинхронно, но проблема в другом !?
pgruetter

Добавлена ​​еще одна попытка.
harrymc

Спасибо harrymc, очень ценю ваши постоянные усилия. К сожалению, до сих пор нет шансов. Я попробовал это с упомянутыми настройками в / etc / fstab и монтировал его. Если я попробую вариант с синхронизацией, это еще хуже. Я получаю только около 100-200 Киб / с. Без опции синхронизации все то же самое: вначале быстрая скорость, падающая до 1-2 МБ / с.
pgruetter

2

Доступ к диску обычно буферизуется в асинхронном режиме. Первоначальный быстрый взрыв, скорее всего, к кэш-памяти. Низкая скорость - это фактическая скорость записи.

Если у вас есть USB-накопитель, который мигает во время передачи, попробуйте выполнить несколько тестов. Я обнаружил, что запись может продолжаться довольно долго после завершения копирования.

Монтирование в асинхронном режиме, а не в режиме синхронизации, позволяет копированию отображаться быстрее, но не обеспечивает такой же безопасности, как при копировании данных.

Проверьте параметры в man mount. Некоторые форматы позволяют откладывать обновления метаданных (каталог, таблица размещения файлов и т. Д.). Это сократит объем данных, которые необходимо скопировать. Это немного увеличивает риск потери данных.


Спасибо за информацию, это на самом деле подтверждает мои предположения. Во время передачи накопитель постоянно мигает, хотя после переноса он не мигает долго. Я подозреваю, что это только потому, что файловый менеджер все еще обращается к флешке. Безопасность не будет большой проблемой, я просто интересуюсь скоростью. Интересно о метаданных, я проверю это. Хотя, как вы думаете, это что-то изменит при передаче больших файлов (500 МБ)?
pgruetter

Кроме того, что меня все еще удивляет, почему это очень быстро с внешним жестким диском, а не с флешкой? Варианты монтирования точно такие же, я перенес точно такой же тестовый файл.
pgruetter

1
Запись 4 КиБ на жесткий диск обычно является записью 4 КиБ, реализованной контроллером жесткого диска. Запись 4 КиБ во флэш-память обычно представляет собой чтение 128 КиБ в какое-либо временное хранилище, перезапись 4 КиБ при правильном смещении упомянутого временного хранилища, операция стирания 128 КиБ и запись 128 КиБ, все вышеперечисленное реализовано Контроллер флэш-памяти. Более или менее :)
tzot

1

Так что я зашел на эту страницу через поиск в Google той же проблемы («Ubuntu 15 ускоряет передачу по USB»), потому что мои передачи работали со скоростью 75 Кбит / с.

Вероятно, это было только решением для моей установки, но мой накопитель USB 3 объемом 16 ГБ был отформатирован в GPT fat32, я удалил все разделы, инициализировал MBR, сделал один раздел NTFS, подключил его обратно к своему компьютеру с Ubuntu, и теперь он передает файл 10 ГБ со скоростью более 50 МБ / с. Для меня проблема решена.


Подтвердили, что для Mint 18.3 (Ubuntu 16.04) переключение с fat32 на ntfs было огромным улучшением.
Ворон

0

Нам нужно убедиться, что система пытается записать в блоке программы / стирания блоков. С современной флэш-памятью они обычно имеют размер 1M-4M. Для этого вы хотите убедиться, что ваша FS выровнена для стирания блоков, и этот интерфейс позволяет передавать весь блок за один раз (для дешевых стиков). В противном случае мы получили бы усиление записи, так как система пытается записать фрагментами, которые меньше, чем блок стирания (делает чтение / мод / запись) + смещение блока.

Чтобы проверить ваши текущие настройки, выполните:

cat /sys/block/sd**X**/device/max_sectors

Вы можете настроить правила зала для этих устройств. См. Https://unix.stackexchange.com/questions/67719/change-value-of-usb-max-sectors-for-an-entire-family-of-devices .

В этом случае я заменил max_sectors для всех устройств, которые использовали значение по умолчанию 240 (USB-накопитель) для секторов 32K или 2K:

(используйте == для проверки и = для назначения):

В моей системе (Mageia 4, 3.14.24 core i7) я должен был сделать это из-за ужасно низкой скорости записи (2 МБ / с) на Kingston DT101 G2 16 ГБ:

vi /usr/lib/udev/rules.d/81-udisks_maxsect.rules и добавить:

SUBSYSTEMS == "scsi", ATTR {max_sectors} == "240", ATTR {max_sectors} = "32678"

И скорость записи в dd увеличилась в 3 раза :-) mc cp, вероятно, в 10-20 раз (после того, как я запустил первый раздел на 8192-м секторе и переформатировал с кластерами, выровненными по 64 тыс.):

fdisk -u /dev/sdh (выключите DOS, если включено),

mkfs.vfat /dev/sdh1 -n KINGSTON16G -s 128 **-R 4592**и используйте fsck.vfat -v /dev/sdh1для проверки выравнивания (отметьте [начальный сектор данных] должно быть кратным 128 (размер кластера)). При необходимости измените количество зарезервированных секторов (-R).

По умолчанию max_sectors (240), по-видимому, вызывает сильное усиление записи на некоторых дешевых новых накопителях. Но будьте очень осторожны с такими высокими настройками, подобный эффект достигается в 2048 секторах (вероятно, 1M стереть блоки:

SUBSYSTEMS == "scsi", ATTR {max_sectors} == "240", ATTR {max_sectors} = "2048"

Проверьте все ваши старые USB-устройства, чтобы они все еще работали хорошо. Используйте атрибуты vendor / model в файлах правил, чтобы быть более конкретными.

PS: при использовании ext3 / 4:

Отключите ведение журнала и установите stride / stripe_width для mkfs.ext3:

mkfs.ext3 -O ^ has_journal -E stride = [прочитать страницу блоков fs] -E stripe-width = [удалить блок блоков fs]


0

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


0

Проверьте, действительно проверьте , что ваше устройство подключено к USB-порту, который поддерживает полную скорость.

Хотя это может звучать глупо, но иногда все путается. Некоторые материнские платы имеют высоко- и низкоскоростные порты. Используйте такой инструмент, как usbview (обратите внимание, чтобы выполнить его с правами суперпользователя sudo usbview), чтобы убедиться, что ваше устройство работает на скорости 480 Мбит / с (USB 2.0) или более.

Например, когда вы обычно подключаете свое устройство через удлинитель, концентратор на дисплее и т. Д., Это может произойти - после повторного подключения кабелей на вашем настольном компьютере или около того - что вы случайно подключили концентратор к низкой скорости (USB 1.) порт. Тогда любые устройства, подключенные к концентратору, будут работать на низкой скорости, тогда как другие, подключенные где-то еще, будут работать на высокой скорости. Может быть очень запутанным - и это простая аппаратная вещь ... Однажды случилась со мной и не связана с какими-либо модулями ядра USB, опциями монтирования или около того.

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