Процессы, обращающиеся к USB-устройству, останавливаются и перестают работать

827
tmlen

У меня есть программа, которая должна записывать большое количество файлов на внешний диск USB-3 с файловой системой NTFS. Кажется, с этим есть некоторая проблема: сначала он периодически зависает на несколько минут, а затем постоянно зависает.

Процесс становится бесперебойным. Смотрите скриншот: системный монитор.

Канал ожидания "read_descriptor". Все эти процессы (пытались запустить его несколько раз) открыли файл /sys/.../usb4/descriptors.

В этом состоянии кажется, что все команды, которые получают доступ к USB-устройству, зависают. В том числе:

  • lsusb
  • cat /sys/kernel/debug/usb/devices
  • USB Reset скрипты, которые вызывают /sys/..../unbind

После того, как я попытался размонтировать раздел, после использования umount --force(возможно, также других команд, точно не уверенных больше) он размонтировался и больше не появляется при вызове mount. Однако в приложении Disks оно по-прежнему отображается как «Размонтирование файловой системы».

Также на диске много плохих секторов (уже 984). Это совершенно новый диск. Кажется, что при записи в Linux из-за этого появляются плохие сектора.

Диски приложения

Есть ли способ перезапустить подсистему USB / принудительно отключить устройство, не перезагружая систему? ( update-grubтакже блокирует, и настройка по умолчанию меню загрузчика установлена ​​неправильно, поэтому я не могу удаленно подключиться после перезагрузки).

И что может вызвать эту проблему с USB-накопителем?

Система также, похоже, имела аналогичные проблемы с другим внешним USB-накопителем (замедление чтения до менее 1 МБ / с).

Система Ubuntu Linux, 16.04.2 LTS, Xenial на 64-битной машине

Обновление :

Утилита lspci:

00:00.0 Host bridge: Intel Corporation 4th Gen Core Processor DRAM Controller (rev 06) 00:01.0 PCI bridge: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor PCI Express x16 Controller (rev 06) 00:14.0 USB controller: Intel Corporation 9 Series Chipset Family USB xHCI Controller 00:16.0 Communication controller: Intel Corporation 9 Series Chipset Family ME Interface #1 00:19.0 Ethernet controller: Intel Corporation Ethernet Connection (2) I218-V 00:1a.0 USB controller: Intel Corporation 9 Series Chipset Family USB EHCI Controller #2 00:1b.0 Audio device: Intel Corporation 9 Series Chipset Family HD Audio Controller 00:1c.0 PCI bridge: Intel Corporation 9 Series Chipset Family PCI Express Root Port 1 (rev d0) 00:1c.3 PCI bridge: Intel Corporation 82801 PCI Bridge (rev d0) 00:1d.0 USB controller: Intel Corporation 9 Series Chipset Family USB EHCI Controller #1 00:1f.0 ISA bridge: Intel Corporation 9 Series Chipset Family H97 Controller 00:1f.2 SATA controller: Intel Corporation 9 Series Chipset Family SATA Controller [AHCI Mode] 00:1f.3 SMBus: Intel Corporation 9 Series Chipset Family SMBus Controller 01:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce GT 740] (rev a1) 01:00.1 Audio device: NVIDIA Corporation GK107 HDMI Audio Controller (rev a1) 03:00.0 PCI bridge: ASMedia Technology Inc. ASM1083/1085 PCIe to PCI Bridge (rev 04) 

lsmod:

Module Size Used by btrfs 987136 0 xor 24576 1 btrfs raid6_pq 102400 1 btrfs ufs 73728 0 qnx4 16384 0 hfsplus 106496 0 hfs 57344 0 minix 36864 0 ntfs 98304 0 msdos 20480 0 jfs 180224 0 xfs 970752 0 libcrc32c 16384 1 xfs pci_stub 16384 1 vboxpci 24576 0 vboxnetadp 28672 0 vboxnetflt 28672 0 vboxdrv 454656 3 vboxnetadp,vboxnetflt,vboxpci binfmt_misc 20480 1 snd_hda_codec_hdmi 53248 1 eeepc_wmi 16384 0 nvidia_uvm 745472 0 asus_wmi 28672 1 eeepc_wmi mxm_wmi 16384 0 sparse_keymap 16384 1 asus_wmi intel_rapl 20480 0 x86_pkg_temp_thermal 16384 0 intel_powerclamp 16384 0 coretemp 16384 0 kvm_intel 172032 0 kvm 544768 1 kvm_intel irqbypass 16384 1 kvm snd_hda_codec_realtek 86016 1 crct10dif_pclmul 16384 0 snd_hda_codec_generic 77824 1 snd_hda_codec_realtek crc32_pclmul 16384 0 ghash_clmulni_intel 16384 0 snd_hda_intel 40960 5 aesni_intel 167936 0 snd_hda_codec 135168 4 snd_hda_codec_realtek,snd_hda_codec_hdmi,snd_hda_codec_generic,snd_hda_intel snd_seq_midi 16384 0 aes_x86_64 20480 1 aesni_intel snd_seq_midi_event 16384 1 snd_seq_midi snd_hda_core 73728 5 snd_hda_codec_realtek,snd_hda_codec_hdmi,snd_hda_codec_generic,snd_hda_codec,snd_hda_intel lrw 16384 1 aesni_intel snd_hwdep 16384 1 snd_hda_codec gf128mul 16384 1 lrw snd_rawmidi 32768 1 snd_seq_midi glue_helper 16384 1 aesni_intel snd_seq 69632 2 snd_seq_midi_event,snd_seq_midi snd_pcm 106496 4 snd_hda_codec_hdmi,snd_hda_codec,snd_hda_intel,snd_hda_core ablk_helper 16384 1 aesni_intel snd_seq_device 16384 3 snd_seq,snd_rawmidi,snd_seq_midi cryptd 20480 3 ghash_clmulni_intel,aesni_intel,ablk_helper snd_timer 32768 2 snd_pcm,snd_seq snd 81920 21 snd_hda_codec_realtek,snd_hwdep,snd_timer,snd_hda_codec_hdmi,snd_pcm,snd_seq,snd_rawmidi,snd_hda_codec_generic,snd_hda_codec,snd_hda_intel,snd_seq_device mei_me 36864 0 soundcore 16384 1 snd input_leds 16384 0 mei 98304 1 mei_me lpc_ich 24576 0 shpchp 36864 0 serio_raw 16384 0 tpm_infineon 20480 0 8250_fintek 16384 0 wmi 20480 2 mxm_wmi,asus_wmi acpi_pad 24576 0 mac_hid 16384 0 parport_pc 32768 1 ppdev 20480 0 lp 20480 0 parport 49152 3 lp,ppdev,parport_pc autofs4 40960 2 hid_generic 16384 0 usbhid 49152 0 hid 118784 2 hid_generic,usbhid uas 24576 8 usb_storage 69632 1 uas nvidia_drm 53248 1 nvidia_modeset 778240 4 nvidia_drm drm_kms_helper 155648 1 nvidia_drm syscopyarea 16384 1 drm_kms_helper sysfillrect 16384 1 drm_kms_helper sysimgblt 16384 1 drm_kms_helper fb_sys_fops 16384 1 drm_kms_helper drm 364544 4 drm_kms_helper,nvidia_drm nvidia 11931648 63 nvidia_modeset,nvidia_uvm ahci 36864 3 e1000e 237568 0 libahci 32768 1 ahci ptp 20480 1 e1000e pps_core 20480 1 ptp fjes 28672 0 video 40960 1 asus_wmi 
0
Это диск ssd или жесткий диск? Вы говорите, что думаете, что запись в Linux приводит к повреждению секторов, что, как я понимаю, означает, что у вас есть окна на одной машине, и, похоже, это не вызывает ту же проблему, верно? Cliff Armstrong 6 лет назад 0
это жесткий диск (LaCie Porsche Design 4TB, диск Seagate). да, на Windows это делает бо проблемы: написал около 500 ГБ к нему, нет не было замораживания и не было ошибок файловой системы впоследствии tmlen 6 лет назад 0
Очень странно. Вы исключили функциональное оборудование как возможную причину. Я могу только представить, что это несовместимость между модулями ядра и USB-хостом. Можем ли мы получить `lspci`, чтобы увидеть, какие USB-хосты у вас есть? `lsmod` также может быть полезен, чтобы увидеть, какие модули ядра использует ваша система. Cliff Armstrong 6 лет назад 0
включил его в пост tmlen 6 лет назад 0
Он не показывает модуль xhci (usb 3), но он может быть скомпилирован в ядро. Что показывает `lspci -v -s 14.0`? Cliff Armstrong 6 лет назад 0
На самом деле, он не показывает модуль ehci. `lspci -v -s 1d.0`? Cliff Armstrong 6 лет назад 0
Можете ли вы определить, включен ли LPM (Link Power Management) в этих двух ОС? Ale..chenski 6 лет назад 0
Если было несколько больших файлов, вы можете использовать "sudo mount -o big_writes / media /" / DEV /", которая не позволяет * fuse * разбивать большие файлы, но может не помочь многим маленьким. Другой вариант может быть монтирование с использованием опции синхронизации, заставляющее записи завершаться перед началом следующего. См. https://askubuntu.com/questions / 297029 / автомонтирования-с асинхронным-опциону DrMoishe Pippik 6 лет назад 0
xhci и ehci, кажется, были встроены. (Показало такое сообщение при попытке отключить с помощью `modprobe`) tmlen 6 лет назад 0
Кроме того, не существует ли ограничение в 2,2 ТБ для NTFS? Ale..chenski 6 лет назад 0
Теперь это вызывает ту же проблему в Windows (ошибка ввода-вывода при копировании с помощью 7zip, а затем `diskpart` и другие приложения зависают). Это не означает «скачок напряжения на USB-порту» или «Устройству требуется больше энергии, чем может обеспечить порт», и больше не монтируется. Это накопитель USB-3 с разъемом USB-C на самом накопителе. tmlen 6 лет назад 0

1 ответ на вопрос

1
Ale..chenski

Если «ожидающий канал» находится в состоянии «read_descriptor», это означает, что USB-канал начал интенсивное восстановление после довольно серьезной аппаратной проблемы, поскольку «этап дескриптора» происходит только при сбросе порта, а сброс порта происходит только в случае неисправимого Произошла ошибка транзакции.

Тот факт, что он работает под Windows, означает лишь то, что программное обеспечение ОС, вероятно, использует некоторые другие аппаратные конфигурации и параметры контроллера / PHY.

Я сильно подозреваю, что Link Power Management (LPM) виноват здесь. Дистрибутив Linux, вероятно, включает все навороты и новейшие версии, в то время как Windows может использовать так называемый «драйвер фильтра», разработанный Intel для устранения некоторых недостатков контроллера.

Состояния LPM U1 и U2 возникают на аппаратном уровне, поэтому они, вероятно, невидимы со стороны программного обеспечения. Чтобы определить, переходит ли канал назад и вперед в состояния LPM, вам понадобится суперскоростной анализатор протокола USB, Ellisys 280 или Teledyne LeCroy Advisor T3, или какой-либо другой инструмент, который обнаруживает состояния LPM на суперскоростном канале, например, этот гораздо меньше. дорогой инструмент .

Могут ли "плохие сектора" быть повреждением оборудования или просто логическими ошибками в файловой системе или неправильным чтением? tmlen 6 лет назад 0
@ tmlen, сложно сказать. Проблема, вероятно, в случайном зависании интерфейса USB, но в какой степени это может повредить диск SATA, я не знаю. Вы должны извлечь диск, подключить его к обычному кабелю SATA и тщательно протестировать / переформатировать на работающей доверенной ОС. Ale..chenski 6 лет назад 0