Низкая скорость записи при записи на USB-накопители

Я использую Ubuntu 20.04 на старом корпусе Dell Optiplex 760, и скорость передачи при копировании файлов на USB-накопители намного ниже, чем должна быть, кроме того, в конце передачи программы передачи (я пробовал копировать файлы с помощью nautilus , cp , dd , rsync ) зависает даже после того, как весь файл был перенесен на USB-накопитель - это зависание затрудняет передачу файлов по сценарию поскольку выполнение не может продолжаться, пока программа передачи не вернет 0. Я проверил размер файла и даже выполнил контрольную сумму md5sum , чтобы проверить целостность файлов, и увидел, что файлы были скопированы правильно и не повреждены, но все же программа передачи "зависает" около 5 минут после передачи 100% файла.

Я подумал, что проблема может заключаться в том, что устройство распознается как устройство USB-1.0. Я проверил вывод lsusb и сопоставил его с выводом usb-устройств и обнаружил, что флэш-накопители всегда распознаются как имеющие скорость USB2.0, т.е. 480 Мбит / с - так что никаких проблем с версиями USB.

user@box:~$ lsusb

Bus 006 Device 059: ID 0781:5567 SanDisk Corp. Cruzer Blade
Bus 006 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 002: ID 10f1:1a19 Importek USB 2.0 Camera
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

соответствующая часть вывода usb-devices

T:  Bus=06 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 59 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=0781 ProdID=5567 Rev=01.26
S:  Manufacturer=SanDisk
S:  Product=Cruzer Blade
S:  SerialNumber=200530450005728000EF
C:  #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=200mA
I:  If#=0x0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage

, которая не показывает ничего неправильного с используемой версией USB. Я проверил, и другие нашли обходные пути, связанные с настройкой vm.dirty_bytes и vm.dirty_background_bytes конфигурации в sysctl до $ (( 15 * 1024 * 1024)) байт.Это не улучшило скорость передачи, но теперь программам передачи разрешены буферы меньшего размера и задержка после остановки 100%.

При работе в Windows 7 на одном компьютере - используя одни и те же флэш-накопители, я могу стабильно передавать данные со средней скоростью 7-8 Мбит / с. Однако, когда я перезагружаюсь и переключаюсь обратно на Ubuntu, средняя скорость передачи данных на USB-накопители никогда не превышает 2 Мбит / с.

Следующее очевидное решение может быть связано с использованием опции монтирования sync при установке диска. Я проверил свой файл / etv / fstab , и в нем есть только записи, относящиеся к моим жестким дискам - перечислены как SATA, так и USB-накопители. Но ни одна из моих флешек там не указана. Я использую udiskctl --mount -b / dev / sdXX для монтирования своих USB-накопителей - или nautiluts автоматически монтирует их для меня - и не знаю, как я могу проверить, sync - это опция монтирования.

Как я могу проверить, включена ли синхронизация , и если да, то как отключить ее в Ubuntu 20.04 ?

6
задан 1 May 2021 в 17:55

2 ответа

Когда мне нужно много писать на внешние устройства, я отключаю кэш записи для устройства с помощью hdparm. Вот как я это делаю:

  1. Откройте терминал
  2. Определите имя устройства с помощью fdisk:
    sudo fdisk -l
    
  3. Отключите кэш записи для устройства:
    sudo hdparm -W 0 /dev/sdX
    
    Примечание: Обязательно замените sdX на соответствующее значение.

Примечания:

  • Эта настройка не сохраняется при перезагрузках
  • Это может привести к "зависанию" машины во время копирования файлов
  • Скорость передачи данных обычно составляет около 70% от теоретической пропускной способности шины (на основе опыта)
  • Некоторые люди советуют использовать опцию -K в hdparm, но я не видел, чтобы это улучшало пропускную способность записи
6
ответ дан 7 May 2021 в 17:41

Когда он будет завершен?

Когда, например, Nautilus сообщает вам, что передача завершена, обычно это неверно (особенно если диск смонтирован async ), существует значительная разница между приглашением Nautilus «завершено» и окончанием фактического процесса записи.

Расширение оболочки gnome для системного монитора прекрасно дополнит копирование с помощью Nautilus, позволяя вам следить за фактическим процессом записи в реальном времени; включая USB-устройства.

О fstab:

Файл / etc / fstab обычно содержит только такие диски / разделы, которые вы хотите автоматически монтировать при каждом запуске системы.

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

О sync :

Вы правы насчет параметра монтирования sync : он невероятно замедляет работу (у меня есть опыт работы только с файловыми системами ext4 в этом отношении, и я могу засвидетельствовать замедление.)

Монтаж:

Я бы посоветовал не использовать udiskctl ( документация ) (потому что я не хорошо его знаете) (а также потому, что вам было нетривиально выяснить его аргументы)

Вместо этого я бы предложил использовать команду mount ( документация ), с которой вы можете четко указать свой вариант async . (Хотя стоит отметить, что асинхронное монтирование является поведением по умолчанию mount , поэтому обычно не требуется указывать (только если вы хотите быть дополнительным ]).

В качестве подготовки создайте точку монтирования, например:

sudo mkdir /mnt/mystuff
sudo chown YOURUSERNAME:YOURUSERNAME /mnt/mystuff

А затем:

sudo mount -o async /dev/sdXX /mnt/mystuff
4
ответ дан 7 May 2021 в 17:41

Другие вопросы по тегам:

Похожие вопросы: