Skip to content

Commit fa4834c

Browse files
committed
Entwurf: Verbindungsprobleme mit USB 3.0 Festplatten/SSDs beheben
1 parent 3c47af5 commit fa4834c

File tree

1 file changed

+131
-0
lines changed

1 file changed

+131
-0
lines changed
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
---
2+
title: Verbindungsprobleme mit USB 3.0 Festplatten/SSDs beheben
3+
author:
4+
name: Peter Müller
5+
link: https://crycode.de
6+
categories:
7+
- Linux
8+
tags:
9+
- Dateisystem
10+
- Debian
11+
- Fehlerbehebung
12+
- Festplatte
13+
- Software
14+
- Ubuntu
15+
- USB
16+
abbr:
17+
USB: Universal Serial Bus
18+
SSD: Solid State Drive
19+
SATA: Serial ATA (Schnittstelle für Speichergeräte)
20+
SCSI: Small Computer System Interface
21+
---
22+
23+
Viele {% abbr USB %} 3.0 Festplatten oder {% abbr SSD %}s werden inzwischen als *USB Attached Storage* (UAS) im System eingebunden. Dies führt jedoch bei manchen Geräten zu Problemen, wobei beispielsweise die Verbindung zum USB-Gerät mittendrin verloren geht und auch nicht automatisch wiederhergestellt wird. Manche Geräte werden im UAS-Modus auch erst gar nicht richtig erkannt.
24+
25+
In diesem Beitrag beschreibe ich eine mögliche Lösung das Problem.
26+
27+
<!-- more -->
28+
29+
## Was ist UAS?
30+
31+
*USB Attached Storage* ist ein Kommunikationsprotokoll zur Anbindung von Massenspeichern über USB und wurde mit USB 3.0 eingeführt.
32+
33+
Es soll besonders schnelle Datenübertragungen zwischen dem Speichermedium (z.B. einer SSD) und dem jeweiligen System ermöglichen.
34+
35+
Im UAS-Modus werden u.a. die Steuerkommandos der {% abbr SATA %} oder {% abbr SCSI %}-Schnittstellen der Geräte direkt über die USB-Schnittstelle geleitet, was eine bessere/direktere Kommunikation mit dem Speichermedium ermöglicht.
36+
37+
## Fehlerbild
38+
39+
Wie oben bereits erwähnt, kommt es im UAS-Modus jedoch auch öfters zu Problemen und Fehlern auf dem USB-System. Dies hat Verbindungsabbrüche des jeweiligen Gerätes, oder sogar Restes des gesamten USB zur Folge.
40+
41+
In meinem Fall handelt es sich um eine externe *WD My Passport* SSD mit 4&nbsp;Tb Speicherplatz.
42+
Die SSD ist als Speicher für TV-Aufnahmen in einem [Proxmox](https://www.proxmox.com/de/)-System eingebunden und mit einer [zfs](https://de.wikipedia.org/wiki/ZFS_(Dateisystem))-Partition formatiert.
43+
44+
Besonders bei intensiven gleichzeitigen Lese- und Schreibzugriffen hatte ich immer mal wieder scheinbar zufällige Verbindungsabbrüche dieser SSD. Dabei verschwand die SSD komplett aus dem System und ließ sich erst durch einen Neustart des kompletten Systems wiederbeleben.
45+
46+
Im Log wurden dabei die folgenden Zeilen aufgezeichnet:
47+
48+
```plain Logeinträge beim Auftreten des Fehlers
49+
10:45:50 pve kernel: usb 3-2: USB disconnect, device number 2
50+
10:45:50 pve kernel: zio pool=mypassport vdev=/dev/sdc1 error=5 type=1 offset=270336 size=8192 flags=721601
51+
10:45:50 pve kernel: zio pool=mypassport vdev=/dev/sdc1 error=5 type=1 offset=4000742645760 size=8192 flags=721601
52+
10:45:50 pve kernel: zio pool=mypassport vdev=/dev/sdc1 error=5 type=1 offset=4000742907904 size=8192 flags=721601
53+
10:45:50 pve kernel: WARNING: Pool 'mypassport' has encountered an uncorrectable I/O failure and has been suspended.
54+
10:45:50 pve zed[1413526]: eid=187 class=data pool='mypassport' priority=3 err=28 flags=0x4000 bookmark=0:0:-1:0
55+
10:45:50 pve kernel: sd 6:0:0:0: [sdc] Synchronizing SCSI cache
56+
10:45:50 pve zed[1413527]: eid=184 class=data pool='mypassport' priority=3 err=28 flags=0x4000 bookmark=0:61:0:0
57+
10:45:50 pve zed[1413528]: eid=185 class=data pool='mypassport' priority=3 err=28 flags=0x4000 bookmark=0:0:0:1
58+
10:45:50 pve zed[1413529]: eid=188 class=io_failure pool='mypassport'
59+
10:45:50 pve zed[1413525]: eid=186 class=data pool='mypassport' priority=3 err=28 flags=0x4000 bookmark=0:0:1:0
60+
10:45:51 pve kernel: sd 6:0:0:0: [sdc] Synchronize Cache(10) failed: Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK
61+
10:45:55 pve pvestatd[1321]: zfs error: cannot open 'mypassport': pool I/O is currently suspended
62+
10:46:12 pve pvedaemon[1116109]: zfs error: cannot open 'mypassport': pool I/O is currently suspended
63+
```
64+
65+
## Prüfen, ob UAS verwendet wird
66+
67+
Zuerst einmal sollte geprüft werden, ob das Gerät überhaupt im UAS-Modus angesprochen wird.
68+
69+
Dies erfolgt ganz einfach mittels `lsusb -t`, was uns alle angeschlossen USB-Geräte auflistet.
70+
71+
```sh Modus prüfen
72+
lsusb -t
73+
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
74+
|__ Port 2: Dev 2, If 0, Class=Mass Storage, Driver=uas, 5000M
75+
```
76+
77+
Steht hier für das Gerät `Driver=uas`, so wird aktuell der UAS-Modus genutzt.
78+
Bei `Driver=usb-storage` hingegen ist UAS nicht aktiv.
79+
80+
## Deaktivieren des UAS-Modus
81+
82+
Zur Lösung des Problems deaktivieren wir den UAS-Modus für dieses Gerät, wodurch es im herkömmlichen *Bulk-Only Transport* (BOT) Modus angesteuert wird, was in der Regel deutlich zuverlässiger funktioniert.
83+
84+
> [!NOTE]
85+
> Wie oben bereits erwähnt, soll der UAS-Modus teils deutlich schnellere Übertragungsgeschwindigkeiten ermöglichen als der BOT-Modus.
86+
> Ich habe in meinem Fall in beiden Modi einen Test der Schreib-/Lesegeschwindigkeit meiner SSD gemacht und konnte dabei *keinen* nennenswerten Unterschied feststellen.
87+
88+
### Ermitteln der USB Geräte-ID
89+
90+
Zunächst benötigen wir die genaue Geräte-ID des Speichergerätes. Diese ermitteln wir per `lsusb`, dieses Mal ohne Parameter.
91+
92+
```sh USB-Geräte auflisten (gekürzte Ausgabe)
93+
lsusb
94+
Bus 004 Device 002: ID 1058:264f Western Digital Technologies, Inc. My Passport 264F
95+
```
96+
97+
In diesem Beispiel hat die SSD also die ID `1058:264f`.
98+
99+
### USB-Storage Optionen anpassen
100+
101+
Um für dieses Gerät nun den UAS-Modus zu deaktivieren, muss dem Kernel-Modul `usb-storage` ein sogenannter `quirk` als Option mitgegeben werden.
102+
103+
Hierfür erstellen wir die Datei `/etc/modprobe.d/disable-uas.conf` mit folgendem Inhalt:
104+
105+
```plain &#47;etc/modprobe.d/disable-uas.conf
106+
options usb-storage quirks=1058:264f:u
107+
```
108+
109+
Hierbei ist `1058:264f` die oben ermittelte Geräte-ID und `u` das Flag, welches dem Kernel-Modul sagt UAS nicht zu verwenden.
110+
111+
Anschließend müssen noch das `initramfs` neu generieren, damit die gesetzte Option beim Booten des Systems aktiv wird:
112+
113+
```sh initramfs neu generieren
114+
sudo update-initramfs -u
115+
```
116+
117+
Abschließend noch ein Neustart des Systems:
118+
119+
```sh Neustart des Systems
120+
sudo reboot
121+
```
122+
123+
<!-- markdownlint-disable MD051 -->
124+
Nun sollte UAS deaktiviert sein, was wie oben unter [Prüfen, ob UAS verwendet wird](#prufen-ob-uas-verwendet-wird) beschrieben, überprüft werden kann.
125+
<!-- markdownlint-enable MD051 -->
126+
127+
## Fazit
128+
129+
Mit dieser kleinen Änderung läuft meine SSD nun bereits einige Zeit äußerst zuverlässig und ohne Aussetzer.
130+
131+
Nachteile konnte ich bislang *keine* feststellen. Sogar die Übertagungsgeschwindigkeit ist unverändert.

0 commit comments

Comments
 (0)