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. Меня беспокоит то, что проблема, кажется, старше 2 лет и до сих пор не решена.

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 был действительно полезным, поскольку он пролил новый свет на этот вопрос. Тем не менее, я чувствую, что должен отдать награду Харримсу, поскольку он приложил максимум усилий для решения проблемы. Спасибо всем.

5 ответов5

10

В статье « Медленная скорость передачи данных через 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.

2

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

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

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

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

1

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

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

0

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

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]

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .