Re: Feste Adresse eines SATA-Anschlusses

Autor: Markus Demleitner <msdemlei_at_ari.uni-heidelberg.de>
Datum: Sun, 13 May 2012 08:15:26 +0200
On Sat, May 12, 2012 at 11:38:01PM +0200, Werner Holtfreter wrote:
> Wie kommt das und wie kann man eine feste Adressierung des
> SATA-Anschlusses erreichen?
Im Groben wirst du wohl um eigene udev-Regeln nicht rumkommen.

Disclaimer: Ich habe gerade keinen SATA-Bus in der Nähe und schon gar
keinen Wechselrahmen da; insofern kommt hier keine fertige Lösung.

So oder so: udevadm dein erster Freund, und zwar in etwa dieser
Form:

udevadm info --query=all --attribute-walk --name=/dev/hda1 

-- der Pfad hinter name ist irgendeiner der zur fraglichen Platte
führenden Links.

Die Ausgabe ist etwas wie 

 looking at device '/devices/pci0000:00/0000:00:1f.1/ide0/0.0/block/hda/hda1':
    KERNEL=="hda1"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{partition}=="1"
    ATTR{start}=="63"
    ATTR{size}=="5863662"
    [...]

  looking at parent device '/devices/pci0000:00/0000:00:1f.1/ide0/0.0/block/hda':
    KERNELS=="hda"
    SUBSYSTEMS=="block"
    DRIVERS==""
    ATTRS{range}=="64"
    ATTRS{ext_range}=="256"
    [...]

  looking at parent device '/devices/pci0000:00/0000:00:1f.1/ide0/0.0':
    KERNELS=="0.0"
    SUBSYSTEMS=="ide"
    DRIVERS=="ide-gd"
    ATTRS{media}=="disk"
    ATTRS{drivename}=="hda"
    [...]

  looking at parent device '/devices/pci0000:00/0000:00:1f.1/ide0':
    KERNELS=="ide0"
    SUBSYSTEMS==""
    DRIVERS==""

  looking at parent device '/devices/pci0000:00/0000:00:1f.1':
    KERNELS=="0000:00:1f.1"
    SUBSYSTEMS=="pci"
    DRIVERS=="PIIX_IDE"
    ATTRS{vendor}=="0x8086"
    ATTRS{device}=="0x24ca"
    [...]

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""

Wenn du dir das Zeug ansiehst, siehst du, dass Knoten um Knoten immer
allgemeinere Geschichten beschrieben werden: Die Partition, die
Platte (logisch und als IDE-Einheit), der IDE-Bus, der PCI-Bus, an
dem der hängt.

Der Trick ist jetzt, eine Kombination von Attributen *aus einem*
dieser Blöcke zu bekommen, die genau den Anschluss beschreibt (zur
Not kann man mit Tricks auch Einträge aus verschiedenen Blöcken
kombinieren, aber das ist eher kompliziert, und wenn das notwendig
erscheint, will man meist nochmal nachdenken).

Wenn du das hast, ist der Rest einfach; du suchst das
udev-Konfigurationsverzeichnis (/etc/udev/rules.d ist ein guter
Startpunkt).  Darin legst du eine Datei an (etwa
10_wechselrahmen.rules) und in die schreibst du eine Regel rein, die
wie gesagt aus Bedingungen aus einem der udevadm info-Blöcke besteht,
und aus einer Aktion, die in deinem Fall das Setzen eines (festen)
symlinks sein wird.

In deinem Fall wirst du, vermute ich mal, zusätzlich nicht um eine
Spezifikation der "Runde" rumkommen, in der die Regel feuern soll --
wenn ein Gerät erkannt wird, lassen mehrere Schichten im Kernel
udev-Events loslaufen (probier udevadm monitor, um mal eine
Vorstellung davon zu kriegen), und du willst (z.B.) mit deiner Regel
nicht losfeuern, wenn gerade erst PCI erkennt, dass der SATA-Adapter
da ist; das kannst du mit einem SUBSYSTEM=='block' erreichen,wenn es
das braucht.

Deine Regel könnte also so aussehen:

SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="*:1", \
	DRIVERS=="sd", ATTRS{vendor}=="Mass", \
	ATTRS{model}=="Storage Device", SYMLINK+="rahmen%n"

-- oder, in einfachen Fällen, auch einfach nur so:

SUBSYSTEMS=="scsi", ATTRS{model}=="EADS-00P8B0     ", SYMLINK+="backup%n"

Ich vermute, in deinem Fall wirst du eher auf der komplexen Seite
liegen...

Grüße,

         Markus

-- 
UUGRN e.V. http://www.uugrn.org/
http://mailman.uugrn.org/mailman/listinfo/uugrn
Wiki: https://wiki.uugrn.org/UUGRN:Mailingliste
Archiv: http://lists.uugrn.org/
Empfangen am 13.05.2012

Dieses Archiv wurde generiert von hypermail 2.2.0 : 13.05.2012 CEST