Debian + USB3 HDD + UAS: I/O 오류

Debian + USB3 HDD + UAS: I/O 오류

원격 컴퓨터를 ARM SBC의 USB 하드 드라이브에 백업하기 위해 rsync를 실행 중인데, 때때로 "입력 장치에서 읽는 동안 오류가 발생했습니다(I/O 오류)"라는 메시지와 함께 rsync가 중지됩니다. 이 문제는 uas_eh_device_reset_handler다음과 같은 이유로 높은 I/O 로드를 유발하는 UAS + USB 3.0 + rsync와 관련이 있다고 생각합니다 /var/log/messages.

sd 0:0:0:0: [sda] tag#1 data cmplt err -32 uas-tag 2 inflight: 
sd 0:0:0:0: [sda] tag#1 CDB: opcode=0x28 28 00 38 80 0a 68 00 00 a0 00
sd 0:0:0:0: [sda] tag#0 data cmplt err -32 uas-tag 1 inflight: CMD 
sd 0:0:0:0: [sda] tag#0 CDB: opcode=0x2a 2a 00 57 50 28 78 00 03 00 00
sd 0:0:0:0: [sda] tag#1 uas_eh_abort_handler 0 uas-tag 2 inflight: CMD 
sd 0:0:0:0: [sda] tag#1 CDB: opcode=0x28 28 00 38 80 0a 68 00 00 a0 00
sd 0:0:0:0: [sda] tag#2 uas_eh_abort_handler 0 uas-tag 3 inflight: CMD 
sd 0:0:0:0: [sda] tag#2 CDB: opcode=0x2a 2a 00 19 47 7f 20 00 00 90 00
sd 0:0:0:0: [sda] tag#0 uas_eh_abort_handler 0 uas-tag 1 inflight: CMD 
sd 0:0:0:0: [sda] tag#0 CDB: opcode=0x2a 2a 00 57 50 28 78 00 03 00 00
scsi host0: uas_eh_device_reset_handler start
usb 5-1: reset high-speed USB device number 2 using ehci-platform
scsi host0: uas_eh_device_reset_handler success
sd 0:0:0:0: [sda] tag#0 UNKNOWN(0x2003) Result: hostbyte=0x00 driverbyte=0x08
sd 0:0:0:0: [sda] tag#0 Sense Key : 0x2 [current] 
sd 0:0:0:0: [sda] tag#0 ASC=0x3a ASCQ=0x0 
sd 0:0:0:0: [sda] tag#0 CDB: opcode=0x2a 2a 00 57 50 28 78 00 03 00 00
sd 0:0:0:0: [sda] tag#1 UNKNOWN(0x2003) Result: hostbyte=0x00 driverbyte=0x08
sd 0:0:0:0: [sda] tag#1 Sense Key : 0x2 [current] 
sd 0:0:0:0: [sda] tag#1 ASC=0x3a ASCQ=0x0 
sd 0:0:0:0: [sda] tag#1 CDB: opcode=0x2a 2a 00 19 47 7f 20 00 00 90 00
EXT4-fs warning (device sda1): ext4_end_bio:323: I/O error 10 writing to inode 13001563 (offset 0 size 73728 starting block 53014518)

이 SBC에는 USB 3 포트가 없지만 여전히 UAS를 사용하여 하드 드라이브를 장착합니다. ~에 따르면이, 일부 HD 케이스 칩에서 UAS가 깨졌습니다.. 이것제공된 솔루션은 UAS를 비활성화하는 것입니다.,하지만:

1- 드론을 완전히 블랙리스트에 올리면내가 얻는 것 blacklist uas:/etc/modprobe.d/blacklist-uas.conf

lsusb -t
    /:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=ehci-platform/1p, 480M
        |__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=, 480M

살펴보기 Class=Mass Storage, Driver=, 480M=> 시스템에 드라이브를 처리할 수 있는 다른 방법이 로드되지 않은 것 같습니다.

2- 특정 USB 장치에 대해 UAS를 비활성화하려는 경우, 게시물에서 추천한 대로,아직 드론을 로드 중입니다.:

echo options usb-storage quirks=174c:55aa:u | tee /etc/modprobe.d/blacklist-uas.conf
update-initramfs -u
reboot

(...)

dmesg | grep sda
[    2.488105] sd 0:0:0:0: [sda] 2930277168 512-byte logical blocks: (1.50 TB/1.36 TiB)
[    2.488584] sd 0:0:0:0: [sda] Write Protect is off
[    2.488592] sd 0:0:0:0: [sda] Mode Sense: 43 00 00 00
[    2.489335] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    2.539288]  sda: sda1
[    2.543875] sd 0:0:0:0: [sda] Attached SCSI disk
[    6.898109] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: errors=remount-ro,data=ordered

lsusb | grep ASMedia
Bus 005 Device 002: ID 174c:55aa ASMedia Technology Inc. ASM1051E SATA 6Gb/s bridge, ASM1053E SATA 6Gb/s bridge, ASM1153 SATA 3Gb/s bridge

lsusb -t
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=ehci-platform/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=uas, 480M

내가 뭘 잘못했나요? UAS를 비활성화하고 시스템에서 계속 HD를 사용하도록 하는 다른 방법이 있습니까? options usb-storage quirks=174c:55aa:uUAS가 비활성화되지 않는 이유는 무엇 입니까?

감사해요.

몇 가지 메모:

  • 4.14.18-sunxi64운영 체제: armbian의 Debian GNU/Linux 9.4(확장) 커널
  • 싱글 보드 컴퓨터: NanoPi NEO2

답변1

@AB의 귀중한 도움으로 이 문제를 성공적으로 해결했습니다. 그가 말했듯이 내 커널(아마도 모든 armbian SBC 커널)은 usb_storage모듈로 로드되지 않고 내장되어 있습니다.

이 경우 다음과 같이 표시되는 시작 옵션을 변경해야 합니다 /proc/cmdline.

root=UUID=b58.... rootfstype=ext4 console=tty1 console=ttyS0,115200 panic=10 consoleblank=0 loglevel=1 ubootpart=096d26e5-01 usb-storage.quirks=0x2537:0x1066:u,0x2537:0x1068:u   cgroup_enable=memory swapaccount=1

드디어 usb-storage.quirks=0x2537:0x1066:u,0x2537:0x1068:u설정이 완료되었습니다. 이 파일을 직접 편집할 수는 없습니다.앰비아에서이 옵션은 파일에 저장됩니다 /boot/armbianEnv.txt.

verbosity=1
console=both
overlay_prefix=sun50i-h5
overlays=usbhost1 usbhost2
rootdev=UUID=b58048d3-ca7b-4ea6-9812-95d403fddadd
rootfstype=ext4
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u

그래서 마지막 줄에 장치를 추가하여 ,174c:55aa:u다음과 같이 만들었습니다.

usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u,174c:55aa:u

다시 실행 update-initramfs -u하고 재부팅한 경우를 대비해 USB HD는 이제 usb-store대신 다음 을 사용합니다 uas.

lsusb -t
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=ehci-platform/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 480M

여기에서 볼 수 있듯이 uas이제 장치가 올바르게 블랙리스트에 추가되었습니다.

dmesg | grep "usb 5-1"
[    2.308569] usb 5-1: new high-speed USB device number 2 using ehci-platform
[    2.467087] usb 5-1: New USB device found, idVendor=174c, idProduct=55aa
[    2.467106] usb 5-1: New USB device strings: Mfr=2, Product=3, SerialNumber=1
[    2.467117] usb 5-1: Product: ASM1153E
[    2.467127] usb 5-1: Manufacturer: Inateck
[    2.467137] usb 5-1: SerialNumber: 12345678910E
[    2.468297] usb 5-1: UAS is blacklisted for this device, using usb-storage instead

답변2

데비안 9에서도 비슷한 문제가 있었고 내 대답은 매우 유사했지만 정확히 동일하지는 않았습니다.

(루트로서 :)

    echo "options usb-storage quirks=4971:8017:u" >> /etc/modprobe.d/usb-storage-quirks.conf
    update-initramfs -u

장치 ID 4971:8017은 UASB를 지원하는 것으로 광고되는 "SimpleTech" 기반 Rosewill RX307-PU3-35B USB-3 디스크 인클로저입니다. 적어도 일부 드라이브의 경우 자주 재설정해야 하므로 시스템 로그에 다음과 같은 많은 경고 메시지가 생성됩니다.

Nov 16 13:12:10 guy kernel: [226970.895835] sd 8:0:0:0: [sda] tag#8 uas_eh_abort_handler 0 uas-tag 1 inflight: CMD IN
Nov 16 13:12:10 guy kernel: [226970.895840] sd 8:0:0:0: [sda] tag#8 CDB: ATA command pass through(16) 85 08 0e 00 d0 00 01 00 00 00 4f 00 c2 00 b0 00
Nov 16 13:12:10 guy kernel: [226970.919935] scsi host8: uas_eh_device_reset_handler start
Nov 16 13:12:10 guy smartd[1079]: Device: /dev/sda [SAT], failed to read SMART Attribute Data
Nov 16 13:12:10 guy kernel: [226971.217025] scsi host8: uas_eh_device_reset_handler success
Nov 16 13:13:11 guy kernel: [227032.337409] sd 8:0:0:0: [sda] tag#8 uas_eh_abort_handler 0 uas-tag 1 inflight: CMD IN
Nov 16 13:13:11 guy kernel: [227032.337412] sd 8:0:0:0: [sda] tag#8 CDB: ATA command pass through(16) 85 08 0e 00 d5 00 01 00 06 00 4f 00 c2 00 b0 00
Nov 16 13:13:11 guy kernel: [227032.361403] scsi host8: uas_eh_device_reset_handler start
Nov 16 13:13:12 guy smartd[1079]: Device: /dev/sda [SAT], Read SMART Self Test Log Failed
Nov 16 13:13:12 guy kernel: [227032.654494] scsi host8: uas_eh_device_reset_handler success

이상하게도 적어도 대량 데이터 전송의 경우 UAS 드라이버를 사용하는 것보다 실제로 더 빠른 것 같습니다!

답변3

제 경우에는 컴퓨터에서 USB SATA3 어댑터로 연결되는 전원이 부족하여 IO 문제가 발생했습니다. 로그 메시지는 여기와 같습니다.

uas 매개변수를 조정해도 도움이 되지 않습니다. 전원이 공급되는 USB3 허브를 구입하면 이 문제가 실제로 해결됩니다.

관련 정보