Folgende Problemstellung:
Ein Server mit Ubuntu Linux (8.04) soll seine Daten regelmässig auf externe Platten sichern, die Platten werden im Wochenrhythmus getauscht – das eigentliche Sicherungsscript wird per Cron-Job gestartet.
Die vom System den externen Platten zugewiesenen Device-Namen sind nicht immer die Gleichen – im Schlimmsten Fall bekommt man nach einem Reboot statt /dev/sdb1 ein /dev/sda1 zu sehen, was das Sicherungsscript dann duchraus ein wenig in die Irre führen kann.
Natürlich könnte man das Script entsprechend anpassen um mit solchen Varianten umgehen zu können, allerdings denke ich dass es da einen besseren Weg gibt -> mit udev einen fixen Namen zuweisen.
udevinfo -a -p $(udevinfo -q path -n /dev/sdb1)
Listet uns alle Parameter des Devices „/dev/sdb1“ auf, aus der Menge können wir uns dann die passenden herauspicken.
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/sdb/sdb1‘:
KERNEL==“sdb1″
SUBSYSTEM==“block“
DRIVER==““
ATTR{dev}==“8:17″
ATTR{start}==“63″
ATTR{size}==“1465144002″
ATTR{stat}==“ 69 138 0 0″looking at parent device ‚/block/sdb‘:
KERNELS==“sdb“
SUBSYSTEMS==“block“
DRIVERS==““
ATTRS{dev}==“8:16″
ATTRS{range}==“16″
ATTRS{removable}==“0″
ATTRS{size}==“1465149168″
ATTRS{stat}==“ 21 120 714 150 0 0 0 0 0 120 150″
ATTRS{capability}==“12″looking at parent device ‚/devices/pci0000:00/0000:00:1a.7/usb7/7-3/7-3:1.0/host14/target14:0:0/14:0:0:0‘:
KERNELS==“14:0:0:0″
SUBSYSTEMS==“scsi“
DRIVERS==“sd“
ATTRS{device_blocked}==“0″
ATTRS{type}==“0″
ATTRS{scsi_level}==“3″
ATTRS{vendor}==“Maxtor „
ATTRS{model}==“OneTouch „
ATTRS{rev}==“0125″
ATTRS{state}==“running“
ATTRS{timeout}==“30″
ATTRS{iocounterbits}==“32″
ATTRS{iorequest_cnt}==“0x1c“
ATTRS{iodone_cnt}==“0x1c“
ATTRS{ioerr_cnt}==“0x0″
ATTRS{modalias}==“scsi:t-0x00″
ATTRS{evt_media_change}==“0″
ATTRS{queue_depth}==“1″
ATTRS{queue_type}==“none“
ATTRS{max_sectors}==“240″looking at parent device ‚/devices/pci0000:00/0000:00:1a.7/usb7/7-3/7-3:1.0/host14/target14:0:0‘:
KERNELS==“target14:0:0″
SUBSYSTEMS==““
DRIVERS==““looking at parent device ‚/devices/pci0000:00/0000:00:1a.7/usb7/7-3/7-3:1.0/host14‘:
KERNELS==“host14″
SUBSYSTEMS==““
DRIVERS==““looking at parent device ‚/devices/pci0000:00/0000:00:1a.7/usb7/7-3/7-3:1.0‘:
KERNELS==“7-3:1.0″
SUBSYSTEMS==“usb“
DRIVERS==“usb-storage“
ATTRS{bInterfaceNumber}==“00″
ATTRS{bAlternateSetting}==“ 0″
ATTRS{bNumEndpoints}==“02″
ATTRS{bInterfaceClass}==“08″
ATTRS{bInterfaceSubClass}==“06″
ATTRS{bInterfaceProtocol}==“50″
ATTRS{modalias}==“usb:v0D49p7310d0125dc00dsc00dp00ic08isc06ip50″looking at parent device ‚/devices/pci0000:00/0000:00:1a.7/usb7/7-3‘:
KERNELS==“7-3″
SUBSYSTEMS==“usb“
DRIVERS==“usb“
ATTRS{dev}==“189:780″
ATTRS{configuration}==““
ATTRS{bNumInterfaces}==“ 1″
ATTRS{bConfigurationValue}==“1″
ATTRS{bmAttributes}==“c0″
ATTRS{bMaxPower}==“ 2mA“
ATTRS{urbnum}==“136″
ATTRS{idVendor}==“0d49″
ATTRS{idProduct}==“7310″
ATTRS{bcdDevice}==“0125″
ATTRS{bDeviceClass}==“00″
ATTRS{bDeviceSubClass}==“00″
ATTRS{bDeviceProtocol}==“00″
ATTRS{bNumConfigurations}==“1″
ATTRS{bMaxPacketSize0}==“64″
ATTRS{speed}==“480″
ATTRS{busnum}==“7″
ATTRS{devnum}==“13″
ATTRS{version}==“ 2.00″
ATTRS{maxchild}==“0″
ATTRS{quirks}==“0x0″
ATTRS{authorized}==“1″
ATTRS{manufacturer}==“Maxtor „
ATTRS{product}==“OneTouch „
ATTRS{serial}==“2HA199B9 „looking at parent device ‚/devices/pci0000:00/0000:00:1a.7/usb7‘:
KERNELS==“usb7″
SUBSYSTEMS==“usb“
DRIVERS==“usb“
ATTRS{dev}==“189:768″
ATTRS{configuration}==““
ATTRS{bNumInterfaces}==“ 1″
ATTRS{bConfigurationValue}==“1″
ATTRS{bmAttributes}==“e0″
ATTRS{bMaxPower}==“ 0mA“
ATTRS{urbnum}==“608″
ATTRS{idVendor}==“0000″
ATTRS{idProduct}==“0000″
ATTRS{bcdDevice}==“0206″
ATTRS{bDeviceClass}==“09″
ATTRS{bDeviceSubClass}==“00″
ATTRS{bDeviceProtocol}==“01″
ATTRS{bNumConfigurations}==“1″
ATTRS{bMaxPacketSize0}==“64″
ATTRS{speed}==“480″
ATTRS{busnum}==“7″
ATTRS{devnum}==“1″
ATTRS{version}==“ 2.00″
ATTRS{maxchild}==“6″
ATTRS{quirks}==“0x0″
ATTRS{authorized}==“1″
ATTRS{manufacturer}==“Linux 2.6.24-23-server ehci_hcd“
ATTRS{product}==“EHCI Host Controller“
ATTRS{serial}==“0000:00:1a.7″
ATTRS{authorized_default}==“1″looking at parent device ‚/devices/pci0000:00/0000:00:1a.7‘:
KERNELS==“0000:00:1a.7″
SUBSYSTEMS==“pci“
DRIVERS==“ehci_hcd“
ATTRS{vendor}==“0x8086″
ATTRS{device}==“0x293c“
ATTRS{subsystem_vendor}==“0x1043″
ATTRS{subsystem_device}==“0x8277″
ATTRS{class}==“0x0c0320″
ATTRS{irq}==“19″
ATTRS{local_cpus}==“ff“
ATTRS{modalias}==“pci:v00008086d0000293Csv00001043sd00008277bc0Csc03i20″
ATTRS{enable}==“1″
ATTRS{broken_parity_status}==“0″
ATTRS{msi_bus}==““looking at parent device ‚/devices/pci0000:00‘:
KERNELS==“pci0000:00″
SUBSYSTEMS==““
DRIVERS==““
In meinem Fall habe ich mich entschieden die Seriennummer der Maxtor Festplatte zu verwenden.
Die passende udev Regel landet dann in der Datei „/etc/udev/rules.d/10-local.rules“ und sieht wie folgt aus:
SUBSYSTEM==“block“,SUBSYSTEMS==“usb“,ATTRS{serial}==“2HA199B9″,NAME=“backup_disk“
Zur Erklärung:
SUBSYSTEM bezeichnet das SUBSYSTEM das im Device Baum ganz oben steht
SUBSYSTEMS bezeichnet das SUBSYSTEM in welchem die Seriennummer steht
ATTRS[serial} beinhaltet dann die Seriennummer der gewünschten Festplatte
NAME ist der Device-Name den die Platte künftig haben soll (/dev/backup_disk)
Nach dem gleichen Schema landen dann noch die Seriennummern der anderen Festplatten in der 10-local.rules Datei.
/etc/init.d/udev restart
Und schon ist die neue Regel aktiv, sobald die Platte angeschlossen wird bekommt sie also den gewünschten Namen zugewiesen! (/dev/backup_disk)
Zu beachten ist allerdings dass immer nur eine der Sicherungsplatten gleichzeitig angeschlossen werden kann, da sie sich ja den Device-Namen teilen. Und dass in diesem Fall nicht die Festplatte /dev/sdb sonder die Partition /dev/sdb1 entsprechend umgeschrieben wurde – also sollte die Platte bereits vorher partitioniert und formatiert sein bevor man die Regel aktiviert! (alternativ kann man auch mit
SUBSYSTEM==“block“,SUBSYSTEMS==“usb“,ATTRS{serial}==“2HA199B9″,SYMLINK+=“backup_disk“
einen Symlink setzen lassen und den eigentlich Device Namen /dev/sdb belassen…
Man macht es nicht jeden Tag, darum schadet es nicht sich's kurz zu notieren... Hier…
Meine Suche bei Google hatte mal wieder keinen vernünftigen Treffer gelandet, das Problem - ich…
Ich muss mal eben etwas Druck ablassen, ein Kunde von mir setzt einen Drucker von…
Wer beim Server bestellen vergessen hat die erweiterte IRMC Lizenz zu ordern, der steht vor…
Ich nutze seit langer Zeit ein System für meine Backups welches in der Nacht von…
Es scheint wohl eine noch nicht so häufig genutzte Kombination zu sein - Apache Guacamole…