Udev Festplattenregeln anhand der Seriennummer

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Antworten
Benutzeravatar
minimike
Beiträge: 5616
Registriert: 26.03.2003 02:21:19
Lizenz eigener Beiträge: neue BSD Lizenz
Wohnort: Köln
Kontaktdaten:

Udev Festplattenregeln anhand der Seriennummer

Beitrag von minimike » 16.02.2009 02:35:19

Hi

Je nachdem wann/wie ein SATA/SCSI Controller erkannt wird legt das den Devicenamen der Festplatte fest. Ich möchte die Namen mit Udev fest regeln. Ich dachte zum Endausbau des Systemes an 6 SATA (5 sind schon drinn) 3 IDE Platten (werden mittlerweile über libata angesprochen) und extern noch 6 SCSI Platten. Problem ich habe/bekomme mehrere Platten die Baugleich sind. Jetzt hatte ich die Idee das anhand der Seriennummern der Platten zu regeln. Nur mit udevinfo taucht die nicht auf. Hier ein Beispiel nach Modellnamen nur bei mehreren baugleichen Modellen für mich suboptimal

Code: Alles auswählen

SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}=="SAMSUNG HD401LJ", NAME="sda" 
Welche Möglichkeiten für Udev der einzigartigen Identifizierung ausser der Seriennummer bestehen den noch?

Code: Alles auswählen

bitch:/etc/udev/rules.d# udevinfo -a -p /sys/block/sde 

Udevinfo starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/block/sde':
    KERNEL=="sde"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{range}=="16"
    ATTR{ext_range}=="256"
    ATTR{removable}=="0"
    ATTR{ro}=="0"
    ATTR{size}=="781420655"
    ATTR{capability}=="52"
    ATTR{stat}=="   12170    18798   585693   827699     7289    12185   163640   187793        0   110861  1016063"

  looking at parent device '/devices/pci0000:00/0000:00:05.0/host4/target4:0:0/4:0:0:0':
    KERNELS=="4:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{device_blocked}=="0"
    ATTRS{type}=="0"
    ATTRS{scsi_level}=="6"
    ATTRS{vendor}=="ATA     "
    ATTRS{model}=="SAMSUNG HD401LJ "
    ATTRS{rev}=="ZZ10"
    ATTRS{state}=="running"
    ATTRS{timeout}=="30"
    ATTRS{iocounterbits}=="32"
    ATTRS{iorequest_cnt}=="0x5393"
    ATTRS{iodone_cnt}=="0x5385"
    ATTRS{ioerr_cnt}=="0x12"
    ATTRS{modalias}=="scsi:t-0x00"
    ATTRS{evt_media_change}=="0"
    ATTRS{queue_depth}=="31"
    ATTRS{queue_type}=="simple"

  looking at parent device '/devices/pci0000:00/0000:00:05.0/host4/target4:0:0':
    KERNELS=="target4:0:0"
    SUBSYSTEMS==""
    DRIVERS==""

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

  looking at parent device '/devices/pci0000:00/0000:00:05.0':
    KERNELS=="0000:00:05.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="sata_nv"
    ATTRS{vendor}=="0x10de"
    ATTRS{device}=="0x037f"
    ATTRS{subsystem_vendor}=="0x1458"
    ATTRS{subsystem_device}=="0xb002"
    ATTRS{class}=="0x010185"
    ATTRS{irq}=="20"
    ATTRS{local_cpus}=="00000003"
    ATTRS{local_cpulist}=="0-1"
    ATTRS{modalias}=="pci:v000010DEd0000037Fsv00001458sd0000B002bc01sc01i85"
    ATTRS{numa_node}=="0"
    ATTRS{enable}=="1"
    ATTRS{broken_parity_status}=="0"
    ATTRS{msi_bus}==""

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

bitch:/etc/udev/rules.d# 

Code: Alles auswählen

bitch:/etc/udev/rules.d# udevinfo -a -p /sys/block/sdf

Udevinfo starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/block/sdf':
    KERNEL=="sdf"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{range}=="16"
    ATTR{ext_range}=="256"
    ATTR{removable}=="0"
    ATTR{ro}=="0"
    ATTR{size}=="781420655"
    ATTR{capability}=="52"
    ATTR{stat}=="  376830  1338746 19775517  8349776  1121779  2297722 27631736  7109353        0  1867267 15503806"

  looking at parent device '/devices/pci0000:00/0000:00:05.0/host5/target5:0:0/5:0:0:0':
    KERNELS=="5:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{device_blocked}=="0"
    ATTRS{type}=="0"
    ATTRS{scsi_level}=="6"
    ATTRS{vendor}=="ATA     "
    ATTRS{model}=="SAMSUNG HD401LJ "
    ATTRS{rev}=="ZZ10"
    ATTRS{state}=="running"
    ATTRS{timeout}=="30"
    ATTRS{iocounterbits}=="32"
    ATTRS{iorequest_cnt}=="0x17c7c4"
    ATTRS{iodone_cnt}=="0x17c794"
    ATTRS{ioerr_cnt}=="0x12"
    ATTRS{modalias}=="scsi:t-0x00"
    ATTRS{evt_media_change}=="0"
    ATTRS{queue_depth}=="31"
    ATTRS{queue_type}=="simple"

  looking at parent device '/devices/pci0000:00/0000:00:05.0/host5/target5:0:0':
    KERNELS=="target5:0:0"
    SUBSYSTEMS==""
    DRIVERS==""

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

  looking at parent device '/devices/pci0000:00/0000:00:05.0':
    KERNELS=="0000:00:05.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="sata_nv"
    ATTRS{vendor}=="0x10de"
    ATTRS{device}=="0x037f"
    ATTRS{subsystem_vendor}=="0x1458"
    ATTRS{subsystem_device}=="0xb002"
    ATTRS{class}=="0x010185"
    ATTRS{irq}=="20"
    ATTRS{local_cpus}=="00000003"
    ATTRS{local_cpulist}=="0-1"
    ATTRS{modalias}=="pci:v000010DEd0000037Fsv00001458sd0000B002bc01sc01i85"
    ATTRS{numa_node}=="0"
    ATTRS{enable}=="1"
    ATTRS{broken_parity_status}=="0"
    ATTRS{msi_bus}==""

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

bitch:/etc/udev/rules.d#
"Lennart Poettering is one of those typical IT leaders..." "like Linus Torvalds and Theo de Raadt?" "more like Bozo the Clown" After all, now a good employee of Microsoft

storm
Beiträge: 1581
Registriert: 01.05.2004 13:21:26
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DE

Re: Udev Festplattenregeln anhand der Seriennummer

Beitrag von storm » 16.02.2009 17:44:09

Versuch mal die tools, die mit udev mitkommen. Zum Beispiel scsi_id oder ata_id, beide zu finden unter /lib/udev.

ciao, storm
drivers/ata/libata-core.c: /* devices which puke on READ_NATIVE_MAX */

Benutzeravatar
minimike
Beiträge: 5616
Registriert: 26.03.2003 02:21:19
Lizenz eigener Beiträge: neue BSD Lizenz
Wohnort: Köln
Kontaktdaten:

Re: Udev Festplattenregeln anhand der Seriennummer

Beitrag von minimike » 17.02.2009 14:35:17

Wie benutze ich die?
"Lennart Poettering is one of those typical IT leaders..." "like Linus Torvalds and Theo de Raadt?" "more like Bozo the Clown" After all, now a good employee of Microsoft

storm
Beiträge: 1581
Registriert: 01.05.2004 13:21:26
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DE

Re: Udev Festplattenregeln anhand der Seriennummer

Beitrag von storm » 17.02.2009 18:59:44

manpage? :)

ciao, storm
drivers/ata/libata-core.c: /* devices which puke on READ_NATIVE_MAX */

Benutzeravatar
cirrussc
Beiträge: 6582
Registriert: 26.04.2007 19:47:06
Lizenz eigener Beiträge: MIT Lizenz

Re: Udev Festplattenregeln anhand der Seriennummer

Beitrag von cirrussc » 18.02.2009 00:43:47

minimike hat geschrieben:Wie benutze ich die?

Code: Alles auswählen

/lib/udev/scsi_id <option> <device>
Gruß cirrussc
--------------------
„Der Mensch steigert zur Zeit die Nutzung dessen, was seiner Willkür unterliegt - und kommt sich sehr klug dabei vor.“ H. Gruhl

Benutzeravatar
minimike
Beiträge: 5616
Registriert: 26.03.2003 02:21:19
Lizenz eigener Beiträge: neue BSD Lizenz
Wohnort: Köln
Kontaktdaten:

Re: Udev Festplattenregeln anhand der Seriennummer

Beitrag von minimike » 18.02.2009 01:19:07

OK

Code: Alles auswählen

bitch:/home/darko# /lib/udev/scsi_id --page=0x80 --whitelisted --device=/dev/sda
SATA     SAMSUNG HD401LJS0HVJ1WL704145      
bitch:/home/darko# /lib/udev/scsi_id --page=0x80 --whitelisted --device=/dev/sdb
SATA     SAMSUNG HD401LJS0HVJ1CP103199      
bitch:/home/darko# /lib/udev/scsi_id --page=0x80 --whitelisted --device=/dev/sdc
SATA     SAMSUNG HD401LJS0HVJ1CP207180      
bitch:/home/darko#
Jetzt bin ich Ideenlos wie ich das zu ner UDEV Regel verwurste.

Anregungen?
"Lennart Poettering is one of those typical IT leaders..." "like Linus Torvalds and Theo de Raadt?" "more like Bozo the Clown" After all, now a good employee of Microsoft

Danielx
Beiträge: 6419
Registriert: 14.08.2003 17:52:23

Re: Udev Festplattenregeln anhand der Seriennummer

Beitrag von Danielx » 18.02.2009 02:29:15

minimike hat geschrieben:Ich möchte die Namen mit Udev fest regeln.
minimike hat geschrieben:Jetzt hatte ich die Idee das anhand der Seriennummern der Platten zu regeln.
Ist ja eine gute Idee, aber das bietet dir UDEV doch schon fertig an! :lol:

Sehe dir doch mal die Ausgabe des folgenden Befehls genauer an: :idea:

Code: Alles auswählen

ls -l /dev/disk/by-id/scsi*
Das sollte bei dir in etwa folgende Ausgabe ergeben:

Code: Alles auswählen

/dev/disk/by-id/scsi-SATA_SAMSUNG_HD401LJS0HVJ1WL704145 -> ../../sda
(...)
/dev/disk/by-id/scsi-SATA_SAMSUNG_HD401LJS0HVJ1CP103199 -> ../../sdb
(...)
/dev/disk/by-id/scsi-SATA_SAMSUNG_HD401LJS0HVJ1CP20718 -> ../../sdc
(...)
Die Pfade sind eindeutig, da diese die Seriennummern enthalten! :D

Das sollte auch gehen:

Code: Alles auswählen

ls -l /dev/disk/by-id/ata*
Und bei dir in etwa folgende Ausgabe ergeben:

Code: Alles auswählen

/dev/disk/by-id/ata-SAMSUNG_HD401LJS0HVJ1WL704145 -> ../../sda
(...)
/dev/disk/by-id/ata-SAMSUNG_HD401LJS0HVJ1CP103199 -> ../../sdb
(...)
/dev/disk/by-id/ata-SAMSUNG_HD401LJS0HVJ1CP20718 -> ../../sdc
(...)
Auch hier sind die Seriennummern in den Pfaden enthalten und somit eindeutig! :mrgreen:

Gruß,
Daniel

Benutzeravatar
minimike
Beiträge: 5616
Registriert: 26.03.2003 02:21:19
Lizenz eigener Beiträge: neue BSD Lizenz
Wohnort: Köln
Kontaktdaten:

Re: Udev Festplattenregeln anhand der Seriennummer

Beitrag von minimike » 20.02.2009 02:26:14

Ich habe folgendes ausgeknobelt. Bin mir aber nicht sicher ob das 100% richtig und vor allem save ist. Es werden jeweils die letzten 8 Zeichen der jeweiligen Seriennummer benutzt.

Code: Alles auswählen

SUBSYSTEM=="block", ENV{ID_SERIAL_SHORT}=="CP103199", SUBSYSTEMS=="scsi", NAME="sda%n"
SUBSYSTEM=="block", ENV{ID_SERIAL_SHORT}=="WL704145", SUBSYSTEMS=="scsi", NAME="sdb%n"
SUBSYSTEM=="block", ENV{ID_SERIAL_SHORT}=="CP207180", SUBSYSTEMS=="scsi", NAME="sdc%n"
SUBSYSTEM=="block", ENV{ID_SERIAL_SHORT}=="B403KX6H", SUBSYSTEMS=="scsi", NAME="sdd%n"
SUBSYSTEM=="block", ENV{ID_SERIAL_SHORT}=="Y48PB50E", SUBSYSTEMS=="scsi", NAME="sde%n"
SUBSYSTEM=="block", ENV{ID_SERIAL_SHORT}=="RY707437", SUBSYSTEMS=="scsi", NAME="sdf%n"
SUBSYSTEM=="block", ENV{ID_SERIAL_SHORT}=="GYC00280", SUBSYSTEMS=="scsi", NAME="sdg%n"
SUBSYSTEM=="block", ENV{ID_SERIAL_SHORT}=="5ED0W30Z", SUBSYSTEMS=="scsi", NAME="sdh%n"
Vorschläge?
"Lennart Poettering is one of those typical IT leaders..." "like Linus Torvalds and Theo de Raadt?" "more like Bozo the Clown" After all, now a good employee of Microsoft

Antworten