Как исправить ненадежные внешние жесткие диски, тормозящими при передаче в Linux


В июне прошлого года мы проверяли Ryzen Embedded SBC с Windows 10, и внешний жесткий диск, который мы обычно используем для проверки, имел всевозможные проблемы, включая очень медленную скорость и/или остановку передачи, но без сообщений об ошибках.

На прошлой неделе мы попытались еще раз, установить Ubuntu 20.04 на тот же Ryzen Embedded SBC, и с внешним жестким диском снова возникли проблемы, поэтому просто предположим, что есть некоторые проблемы несовместимости оборудования — SBC и диска, и возможно будет исправить ошибки или найти альтернативное решение.

Иногда это действительно проблема оборудования, когда на диске слишком много поврежденных блоков, и если это так, и диск все еще находится на гарантии, вы можете вернуть его и получить новый (или отремонтированный) диск бесплатно. Но этот диск работал с нашим ноутбуком со скоростью около 100 МБ/с.

У нас закончились идеи, и тут numero53 не прокомментировал, что у него похожие проблемы со многими адаптерами USB-SATA, и хитрость заключалась в том, что отключение UAS (USB Attached SCSI), могло бы улучшить производительность. О аналогичной проблеме сообщили и пользователи Raspberry Pi  и ODROID. Обычно сообщения об ошибках выглядят следующим образом:

Jun 16 04:59:18 feynman kernel: sd 1:0:0:0: [sdb] tag#29 uas_eh_abort_handler 0 uas-tag 30 inflight: CMD IN 
Jun 16 04:59:18 feynman kernel: sd 1:0:0:0: [sdb] tag#29 CDB: opcode=0x88 88 00 00 00 00 01 5c 00 13 f8 00 00 00 08 00 00
Jun 16 04:59:18 feynman kernel: sd 1:0:0:0: [sdb] tag#28 uas_eh_abort_handler 0 uas-tag 29 inflight: CMD IN 
Jun 16 04:59:18 feynman kernel: sd 1:0:0:0: [sdb] tag#28 CDB: opcode=0x88 88 00 00 00 00 01 5c 00 13 f0 00 00 00 08 00 00
Jun 16 04:59:18 feynman kernel: sd 1:0:0:0: [sdb] tag#27 uas_eh_abort_handler 0 uas-tag 28 inflight: CMD IN 
Jun 16 04:59:18 feynman kernel: sd 1:0:0:0: [sdb] tag#27 CDB: opcode=0x88 88 00 00 00 00 01 5c 00 13 e8 00 00 00 08 00 00

У нас не было таких сообщений, но мы все равно пытались отключить UAS на этом конкретном диске. у нас не было уверенности в том, что это сработает. Во-первых, нам нужно найти USB VID / PID для адаптера:

lsusb | grep Seagate
Bus 002 Device 004: ID 0bc2:2312 Seagate RSS LLC

Теперь мы можем создать файл для внесения диска/адаптера в черный список, чтобы предотвратить загрузку модуля UAS для этого диска:

echo options usb-storage quirks=0bc2:2312:u | sudo tee /etc/modprobe.d/blacklist_uas_0bc2.conf
sudo update-initramfs -u

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

dmesg | grep -i uas
[    0.425573] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[    1.975254] usbcore: registered new interface driver uas
[    2.271540] usb 2-2.4: UAS is blacklisted for this device, using usb-storage instead

Посмотрим, решило ли это нашу проблему, запустив тест iozone:

iozone -e -I -a -s 1000M -r 1024k -r 16384k -i 0 -i 2
 
                                                               random    random     bkwd    record    stride                                    
              kB  reclen    write  rewrite    read    reread    read     write     read   rewrite      read   fwrite frewrite    fread  freread
         1024000    1024    90423    91456                    2724687    78287                                                                
         1024000   16384    91281    98600                    1916998    92524                                                                
 
iozone test complete.

Нам удалось записать файл размером 1 ГБ со скоростью около 90+ МБ/с. Вполне нормально на этом диске. Проблема исправлена! Показатели чтения ~ 2 ГБ/с явно зависят от кеша …

Очевидно, это довольно распространенная проблема с USB-накопителями Seagate (VID: 0x0bc2) и Western Digital (VID: 0x1058), и Томас Кайзер несколько лет назад просто внес в черный список все такие накопители по умолчанию.

Итак, мы нашли обходной путь в Linux / Ubuntu. Но как насчет Windows 10, раз уж у нас такая же проблема. Мы не могли найти очевидного решения. В папке %WinDir%\System32\drivers есть файл uaspstor.sys, который является драйвером USB Attached SCSI (UAS) для Windows 10. Но он не используется непосредственно нашим накопителем.

Мы полагаем, что можно попробовать переместить/переименовать файлы драйверов, пока проблема не будет решена, но это не идеальное решение, поскольку другие диски, которые действительно правильно работают с UAS, также будут затронуты. Мы поискали способы занести в черный список UAS для определенных драйверов в Windows 10, как мы сделали в Linux, но, похоже, никакого решения нет. Если вы знаете как решить проблему, делитесь.

Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.

Оригинал статьи вы можете прочитать здесь.

5 1 vote
Article Rating
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 Комментарий
Inline Feedbacks
View all comments