[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Feste Adresse eines SATA-Anschlusses


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 Naehe und schon gar
keinen Wechselrahmen da; insofern kommt hier keine fertige Loesung.

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
fuehrenden 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 haengt.

Der Trick ist jetzt, eine Kombination von Attributen *aus einem*
dieser Bloecke zu bekommen, die genau den Anschluss beschreibt (zur
Not kann man mit Tricks auch Eintraege aus verschiedenen Bloecken
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-Bloecke besteht,
und aus einer Aktion, die in deinem Fall das Setzen eines (festen)
symlinks sein wird.

In deinem Fall wirst du, vermute ich mal, zusaetzlich nicht um eine
Spezifikation der "Runde" rumkommen, in der die Regel feuern soll --
wenn ein Geraet 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 koennte also so aussehen:

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

-- oder, in einfachen Faellen, 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...

Gruesse,

         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/