Я использую 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
?
Когда мне нужно много писать на внешние устройства, я отключаю кэш записи для устройства с помощью hdparm
. Вот как я это делаю:
fdisk
:
sudo fdisk -l
sudo hdparm -W 0 /dev/sdX
Примечание: Обязательно замените sdX
на соответствующее значение. Примечания:
-K
в hdparm
, но я не видел, чтобы это улучшало пропускную способность записиКогда он будет завершен?
Когда, например, 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