Wenn eine Linux-Box einen ATA-Fehler erhält, wird dieser mit einer Meldung protokolliert, die den Datenträger als "ata% d.00" identifiziert. Wie übersetze ich das in einen Gerätenamen (zB /dev/sdb
)? Ich denke, das sollte trivial sein, aber ich kann es nicht herausfinden.
linux
hard-drive
nelhage
quelle
quelle
Antworten:
Peter hat mich dazu inspiriert, ein erweitertes Skript (let) zu schreiben, das sogar USB-Sticks erkennen kann (anstatt alberne Dinge wie "ata0.00" auszugeben). Im Gegensatz zu Peters Skript erhalten Sie die Sub-Nummer (wie in 4.01) auch, wenn Sie mehr als ein Gerät am selben Controller bzw. an mehreren Geräten haben. Kanal. Die Ausgabe erfolgt genau so, wie Sie sie erhalten
syslog
. Geprüft. Funktioniert sehr gut auf meiner Debian-Box, obwohl es immer viele Verbesserungen gibt (zB zu plumpe reguläre Ausdrücke). Aber haltet es! Die scheinbar zu hohe Anzahl von maskierten Zeichen in meinen regulären Ausdrücken dient nur der Kompatibilität! Sie können GNU nichtsed
bei jedem annehmen , weshalb ich absichtlich auf erweiterte reguläre Ausdrücke verzichtet habe.UPDATES
(1) Die
ls
Ausgabe wird nicht mehr analysiert . (Hoppla!) Wie Sie alle wissen: Analysieren Sie nicht ls.(2) Funktioniert jetzt auch in schreibgeschützten Umgebungen.
(3) Inspiriert von einem Vorschlag aus diesem Chat habe ich es wieder geschafft, die sed-Aussagen viel unkomplizierter zu gestalten.
quelle
Schau dir an
/proc/scsi/scsi
, was ungefähr so aussieht:scsi0 id 0 ist sda und ata1.00, scsi1 id 0 ist sdb und ata2.00, etc.
Schauen Sie sich auch an
/var/log/dmesg
, was die Ladeinformationen des ata-Treibers anzeigt und die Dinge ein wenig klarer macht. Suchen Sie nach der Zeile, die mit "libata" beginnt.quelle
Ich bevorzuge Scriptlets anstelle von ausführlichen Erklärungen. Das funktioniert auf meiner Ubuntu-Box. Fügen Sie Kommentare hinzu, die Ihnen gefallen:
quelle
ls -l /sys/block/sd* | sed -e 's@.*-> \.\..*/ata@/ata@' -e 's@/host@ @' -e 's@/target.*/@ @'
Das ist eigentlich ziemlich knifflig. Man kann zwar mit Sicherheit davon ausgehen, dass "die SCSI-ID" "die SATA-ID minus eins" ist, aber ich möchte lieber wirklich sicher sein und die SATA-ID überprüfen, von der
unique_id
ich annehme (basierend auf diesem Beitrag ).Mein Fehler war:
Also mein Verfahren, um herauszufinden, was
ata4
ist:Finden Sie die PCI-ID des SATA-Controllers
Finden Sie die passende eindeutige ID:
Also ist es an
scsi_host/host3
, in das wir übersetzen können, nach3:x:x:x
dem wirdmesg
suchen können, um mehr herauszufinden:Hier ist unser Gerät. Wir können (optional) die Seriennummer finden, um das Gerät herauszunehmen (oder die Verkabelung oder was auch immer zu überprüfen), bevor unser RAID-Array vollständig ausfällt:
Und du bist fertig!
quelle
Versuche dies:
Ich habe das dmesg nie verstanden - einige Zeilen handeln von "ata4", andere von "scsi" oder "sdc", aber niemand weist "ata4 ... sdc" zu. Der gezeigte Befehl findet das / sys / bus / path, wobei sowohl ata4 als auch sdc angegeben sind.
quelle
Ich hatte das gleiche Problem und konnte Laufwerke durch Überprüfen von dmesg identifizieren. Dort sehen Sie die Controller-ID (korrekter Begriff ??) und das Modell der Festplatte. Verwenden Sie dann ls -l / dev / disk / by-id, um die Modellnummer mit / dev / sda (oder was auch immer) abzugleichen. Alternativ mag ich Disk Utility für diese Informationen. Hinweis: Dies funktioniert nur, wenn Ihre Festplatten unterschiedliche Modellnummern haben, andernfalls können Sie die beiden nicht unterscheiden.
quelle
Am einfachsten ist es, das Kernel-Protokoll nach dem Start zu überprüfen, da die Laufwerksgerätenamen aus verschiedenen Quellen (z. B. USB-Laufwerken) eingemischt oder je nach Gerätetyp zugewiesen werden (z. B. CD-ROM kann stattdessen SCDX sein und alles hat SGX) ). In der Praxis ist, sofern Sie nicht verschiedene Arten von Bussen gemischt haben (z. B. SATA + USB), das Gerät mit der niedrigsten Nummer sda, es sei denn, es handelt sich um ein CD-ROM-Gerät.
Abhängig von Ihrem System kann dies durch Umherwandern von sysfs erkannt werden. Auf meinem System wird
ls -l /sys/dev/block
angezeigt, dass8:0
(major: minor from / dev entry) verweist auf/sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda
Ebenso werdenls -l /sys/class/ata_port
dieata1
Punkte/sys/devices/pci0000:00/0000:00:1f.2/ata1/ata_port/ata1
angezeigt, auf die sich dasselbe PCI-Subgerät befindet.Da ich SATA verwende und nur ein Laufwerk an jedem Port angeschlossen ist, kann ich ableiten, dass ata1.00 = sda ist. Alle meine Laufwerke sind .00, ich vermute, wenn ich einen Port-Multiplikator verwenden würde, würden meine Laufwerke mit .01, .02, .03 usw. versehen. In den Protokollen anderer verwenden PATA-Controller .00 und .01 für Master und Slave , und basierend auf ihren Protokollen, wenn Sie ataX.01 haben, sollte die .01 der "ID" im Ordner host: channel: ID: LUN aus der
/sys/dev/block/
Auflistung zugeordnet werden. Wenn Sie mehrereataX/
undhostY/
Ordner im selben PCI- Geräteordner haben , vermute ich , dass der ataX-Ordner mit der niedrigsten Nummer mit dem hostY-Ordner mit der niedrigsten Nummer übereinstimmt.quelle
In
/sys/class/ata_port/ata${n}/device/
können Sie einenhost${x}
Ordner sehen. ZB auf meiner Maschine:Das
${x}
inhost${x}
bezieht sich auf die erste Ziffer im[0:0:0:0]
. Also für michata1
bezieht sichhost0
was auch in SCSI Form dargestellt werden kann als0:*
:quelle
Das folgende Skript gibt Ihnen eine schöne Zusammenfassung wie folgt:
So in einer Zeile pro Laufwerk haben Sie sdX Gerätenamen, Größe , Modell , s / n und die pci und ATA - Nummern. Der obige SDC entspricht einem USB-SD-Kartenleser ohne eingesetzte Karte. Daher das ---- anstelle von wirklicher Information.
(nur unter Ubuntu 12.04 / 14.04 und CentOS 6 getestet)
quelle
Ein Skript zum Auffinden dieser und weiterer Informationen finden Sie unter https://www.av8n.com/computer/disk-hw-host-bus-id
Es ähnelt dem Skript von Mr. Syntaxerror, ist aber schicker. - Es funktioniert sowohl für USB-Laufwerke als auch für ATA-Laufwerke. - Sie enthält die Marke und das Modell des Laufwerks sowie die Seriennummer - und natürlich den Befestigungspunkt. - Es ist einfacher, lesbarer und wartbarer.
quelle