automatisch mount externe USB - Festplatte

Ich habe:
openSUSE 11.3 (i586)
1 eingebaute Festplatte, Standartpartition
1 externe USB - Festplatte, mit ext4 formatiert 125,0 GiB, davon 105,1 GiB frei,
und noch einmal ntfs formatiert 100,0 GiB davon 60, 0 GiB frei,
also 2 Partitionen

Die erste Partition der externen USB - Festplatte dient zum sichern der Home – Verzeichnisse. Gesichert wird mit rsync per Batchjob. Im Batchjob sind die Quell.- und Zielpfade fest definiert.
Bisher war es so, wenn ich die externe Festplatte einschalte, openSUSE wird bereits ausgeführt, wird Sie als /media/Disk automatisch gemountet. Der Batchjob erwarte auch als Ziel /media/Disk/.

Plötzlich ist es so, das nach jedem einschalten der Mountpunkt einen anderen Namen bekommt.
Also:
/media/Disk
/media/Disk-1
/media/Disk-2
/media/Disk-3
u.s.w.
Aus der 2. ntfs-Partition wird:
/media/extern
/media/extern-1
u.s.w.

Die Mountpunkte werden einfach hochgezählt und mein Batchjob funzt nicht mehr, er kennt ja nur /media/Disk.

Habe ich irgend was Systemtechnisch verändert? Nein!
Updates aus dem Internet? Nein!
Neue Software? Nein!

Ich vermute, das an einer bestimmten Stelle im System ein umount (beim ausschalten der externen Festplatte oder beim herunterfahren de Systems) nicht richtig funktioniert!
Hat einer ein Tip für mich, wie / wo ich den Fehler finden kann, damit es immer bei /media/Disk bleibt?

Vorab schon einmal vielen Dank!

Hallo zusammen,

Dein Freund heißt udev. Das wird aber Hardcore-Linux. :wink: So richtig schön auf der Konsole wie in guten alten Zeiten. :wink: Im Prinzip funktioniert das so: Der Daemon udev ersetzt den alten devfs. Er ist dafür zuständig, die Geräte in das Pseudodateisystem /dev einzubinden. Wird ein neues Gerät erkannte (hier Deine Festplatte und ihre Partitionen) dann wird das udev mitgeteilt und udev erzeugt einen Eintrag in /dev. Wenn Deine Platte nun eingebunden wird, dann erzeugt udev normalerweise /dev/sdb /dev/sdb1 und /dev/sdb2 bzw. /dev/sdb5 und /dev/sdb6, sofern sich die Partitionen in einer erweiterten befinden. Dann kommt der Automounter und mountet die nach /media/Disk und /media/Disk1.

Das muss aber nicht so sein. Gibt es /dev/sdb schon, dann wird Deine Platte eben /dev/sdc. Dann bekommen natürlich auch die Partitionen einen anderen Namen und schon ist der Automounter verwirrt und mountet das evtl. woanders hin. Das Problem löst udev. Anders als bei seinem Vorgänger können udev Regeln übergeben werden, die beim Anschließen zu beachten sind. So kann ich dafür sorgen, dass ein Gerät immer denselben Namen bekommt. Die Partitionen könnten ja auch /dev/mobil/backup heißen und /dev/mobil/ntfs oder wie immer Du willst (im Rahmen der zulässigen Zeichen und Längen).

Dann kann ich noch Programme ausführen lassen. So kann ich nach dem Benennen der Partition sie auch gleich an die richtige Stelle mounten. Dazu bedarfs es eines Eintrag in /etc/fstab und einer weiteren udev-Regel. Und schon klappt das . Die Platte ist immer da, wo sie das Skript erwartet, nachdem Du das Skript auf den neuen Mountpoint angepasst hast.

Dazu müssen wir allerdings noch ein paar Sachen wissen. Wenn Du Lust hast, das zu lernen, dann mache ich weiter. Aber Du musst mitarbeiten. :wink:

Liebe Grüße

Erik

Falls Ihr hier weitermacht, dann gibt es zumindest einen interessierten Mitleser. Ich versuche schon seit längerem, hinter die Geheimnisse von udev zu kommen.

Hallo zusammen,

nee, nicht mitlesen. Mitmachen. :wink: udev ist echt klasse. Damit kann man Windoof-Nutzer echt beeindrucken. Aber ich mache mal weiter.

Der erste Schritt ist, sich darüber zu informieren, was udev denn so über das Gerät weiß. Dazu schließen wir das Gerät an, wechseln auf eine Konsole, verschaffen uns root-Rechte und geben folgenden Befehl ein:


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

Der Befehl udevadm dient zum Administrieren des udev. Daher der Name. :wink: Mit info geben wir an, dass wir was wissen wollen. Mit --name (oder für schwere Fälle --path) geben wir an, welches Gerät wir meinen. Das --query gibt an, was wir wissen wollen. Wir sind neugierig, wir wollen alles wissen. Und zum Schluß soll er durch die Attribute auch der Elterngeräte wandern und sie uns anzeigen. Bei der Ausgabe staunt der Windoof-User Bauklötze. g


  looking at device '/devices/pci0000:00/0000:00:1d.7/usb5/5-4/5-4:1.0/host6/target6:0:0/6:0:0:0/block/sdb/sdb5':
    KERNEL=="sdb5"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{start}=="4096"
    ATTR{size}=="1953519616"
    ATTR{stat}=="      74       56     1034      172        1        0        8        4        0      148      176"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-4/5-4:1.0/host6/target6:0:0/6:0:0:0/block/sdb':
    KERNELS=="sdb"
    SUBSYSTEMS=="block"
    DRIVERS==""
    ATTRS{range}=="16"
    ATTRS{removable}=="0"
    ATTRS{ro}=="0"
    ATTRS{size}=="1953525168"
    ATTRS{capability}=="12"
    ATTRS{stat}=="      92      118     1662      284        1        0        8        4        0      252      288"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-4/5-4:1.0/host6/target6:0:0/6:0:0:0':
    KERNELS=="6:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{device_blocked}=="0"
    ATTRS{type}=="0"
    ATTRS{scsi_level}=="3"
    ATTRS{vendor}=="SAMSUNG "
    ATTRS{model}=="HD103SI         "
    ATTRS{rev}=="    "
    ATTRS{tgps}=="0"
    ATTRS{state}=="running"
    ATTRS{timeout}=="30"
    ATTRS{iocounterbits}=="32"
    ATTRS{iorequest_cnt}=="0x6b"
    ATTRS{iodone_cnt}=="0x6b"
    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:1d.7':
    KERNELS=="0000:00:1d.7"
    SUBSYSTEMS=="pci"
    DRIVERS=="ehci_hcd"
    ATTRS{vendor}=="0x8086"
    ATTRS{device}=="0x293a"
    ATTRS{subsystem_vendor}=="0x1043"
    ATTRS{subsystem_device}=="0x1877"
    ATTRS{class}=="0x0c0320"
    ATTRS{irq}=="23"
    ATTRS{local_cpus}=="00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000003"
    ATTRS{local_cpulist}=="0-1"
    ATTRS{modalias}=="pci:v00008086d0000293Asv00001043sd00001877bc0Csc03i20"
    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==""


Ich habe das ein wenig gekürzt. Wie wir sehen, fängt er beim Gerät an, das wir angegeben haben und hangelt sich dann Elterngerät für Elterngerät durch, bis er bei der Kernel-Schnitstelle angelangt ist. Jedes dieser Attribute kann benutzt werden, um eine udev-Regel zu schreiben. Aber nicht alle sind sinnvoll. Deshalb suchen wir in der Ausgabe z. B. nach Modellbezeichnung, Hersteller oder, was ich bevorzuge, da es eindeutig ist, nach Seriennummern. Einfach mal in der Ausgabe blättern und nach verdächtigen Kandidaten suchen.

Aber vorsicht! Nicht jede Seriennummer eignet sich. Erwische ich z. B. die vom Host-Controller und nicht eine von denen, die sich auf das angeschlossene Gerät beziehen, dann gilt die Regel immer, wenn etwas an den Controller angeschlossen wird. Je nach dem, was wir dann ausführen lassen, kann das fatale Folgen haben. Also suchen wir erstmal nach der Festplatte und finden folgende Zeilen:


  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-4/5-4:1.0/host6/target6:0:0/6:0:0:0':
    KERNELS=="6:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{device_blocked}=="0"
    ATTRS{type}=="0"
    ATTRS{scsi_level}=="3"
    ATTRS{vendor}=="SAMSUNG "
    ATTRS{model}=="HD103SI         "
    ATTRS{rev}=="    "
    ATTRS{tgps}=="0"
    ATTRS{state}=="running"
    ATTRS{timeout}=="30"
    ATTRS{iocounterbits}=="32"
    ATTRS{iorequest_cnt}=="0x6b"
    ATTRS{iodone_cnt}=="0x6b"
    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"

So sieht das bei meiner externen Platte aus. Aus irgend einem Grund steht da aber leider die Seriennummer der Platte nicht. Also suche ich bei den Elterngeräten weiter und stoße auf folgendes:


  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb5/5-4':
    KERNELS=="5-4"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
...]
    ATTRS{speed}=="480"
...]
    ATTRS{manufacturer}=="Sunplus Innovation Technology."
    ATTRS{product}=="USB to Serial-ATA bridge"
    ATTRS{serial}=="FAFFFFF0FDF1FFF9EF80712"

Ich habe das auf die nötigen Informationen gekürzt. Die ersten Zeilen sagen uns, dass es sich um ein Gerät am USB handelt. Beruhigend ist, dass es mit 480 Mbit/s läuft. Die letzten drei Zeilen sind der Hersteller, die Produktbezeichnung und die Seriennummer. Wir haben jetzt eine eindeutige Bezeichnung des Geräts, mit der wir arbeiten können. Nun seid Ihr dran. Guckt mal selbst nach und sucht nach einer solchen Nummer.

Ich bevorzuge übrigens deshalb die Seriennummern, da ich dann auch zwei baugleiche Geräte erkennen und getrennt behandeln kann. Vielleicht kaufe ich mir noch so eine Platte. Das Teil war billig und wie udev mir verrät, ist trotzdem gute HW verbaut.

Liebe Grüße

Erik

hallo,
es freud mich, das sich einer so viel Mühe macht und nicht einfach darauf hinweist ein Manuel zu lesen!
Mittlerweile läuft es bei mit wieder, ich habe im Verzeichnis /media die Einträge Disk, Disk-1, u. s. w. und die Einträge in der .hal-mtab gelöscht, danach ein reboot und alles ist ok.
Vorausgegangen war ein Systemabsturz, den ich nicht bedacht habe. Dadurch wurden die Einträge in /media nicht automatisch aktuallisiert. So ein Fehler möchte ich aber nicht noch einmal haben. Da scheint mir das udev das Richtige zu sein.
Also hier mein Auszug:

horst-s:/ # udevadm info --name=/dev/sdb --query=all --attribute-walk

Udevadm info 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 ‘/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0/host2/target2:0:0/2:0:0:0/block/sdb’:
KERNEL==“sdb”
SUBSYSTEM==“block”
DRIVER==“”
ATTR{range}==“16”
ATTR{ext_range}==“256”
ATTR{removable}==“0”
ATTR{ro}==“0”
ATTR{size}==“488397168”
ATTR{alignment_offset}==“0”
ATTR{discard_alignment}==“0”
ATTR{capability}==“50”
ATTR{stat}==" 344 17224 22810 6388 68 261 2632 5120 0 2004 11504"
ATTR{inflight}==" 0 0"

looking at parent device ‘/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0/host2/target2:0:0/2:0:0:0’:
KERNELS==“2:0:0:0”
SUBSYSTEMS==“scsi”
DRIVERS==“sd”
ATTRS{device_blocked}==“0”
ATTRS{type}==“0”
ATTRS{scsi_level}==“3”
ATTRS{vendor}=="Generic "
ATTRS{model}=="USB Disk "
ATTRS{rev}==“9.02”
ATTRS{tgps}==“0”
ATTRS{state}==“running”
ATTRS{timeout}==“30”
ATTRS{iocounterbits}==“32”
ATTRS{iorequest_cnt}==“0x1ae”
ATTRS{iodone_cnt}==“0x1ae”
ATTRS{ioerr_cnt}==“0x1”
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:1d.7/usb1/1-2/1-2:1.0/host2/target2:0:0’:
KERNELS==“target2:0:0”
SUBSYSTEMS==“scsi”
DRIVERS==“”

looking at parent device ‘/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0/host2’:
KERNELS==“host2”
SUBSYSTEMS==“scsi”
DRIVERS==“”

looking at parent device ‘/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0’:
KERNELS==“1-2: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:v058Fp6391d0100dc00dsc00dp00ic08isc06ip50”
ATTRS{supports_autosuspend}==“0”

looking at parent device ‘/devices/pci0000:00/0000:00:1d.7/usb1/1-2’:
KERNELS==“1-2”
SUBSYSTEMS==“usb”
DRIVERS==“usb”
ATTRS{configuration}==“”
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}==“1”
ATTRS{bmAttributes}==“c0”
ATTRS{bMaxPower}==“100mA”
ATTRS{urbnum}==“1307”
ATTRS{idVendor}==“058f”
ATTRS{idProduct}==“6391”
ATTRS{bcdDevice}==“0100”
ATTRS{bDeviceClass}==“00”
ATTRS{bDeviceSubClass}==“00”
ATTRS{bDeviceProtocol}==“00”
ATTRS{bNumConfigurations}==“1”
ATTRS{bMaxPacketSize0}==“64”
ATTRS{speed}==“480”
ATTRS{busnum}==“1”
ATTRS{devnum}==“3”
ATTRS{devpath}==“2”
ATTRS{version}==" 2.00"
ATTRS{maxchild}==“0”
ATTRS{quirks}==“0x0”
ATTRS{avoid_reset_quirk}==“0”
ATTRS{authorized}==“1”
ATTRS{manufacturer}==“Generic”
ATTRS{product}==“USB TO IDE Bridge”

looking at parent device ‘/devices/pci0000:00/0000:00:1d.7/usb1’:
KERNELS==“usb1”
SUBSYSTEMS==“usb”
DRIVERS==“usb”
ATTRS{configuration}==“”
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}==“1”
ATTRS{bmAttributes}==“e0”
ATTRS{bMaxPower}==" 0mA"
ATTRS{urbnum}==“54”
ATTRS{idVendor}==“1d6b”
ATTRS{idProduct}==“0002”
ATTRS{bcdDevice}==“0206”
ATTRS{bDeviceClass}==“09”
ATTRS{bDeviceSubClass}==“00”
ATTRS{bDeviceProtocol}==“00”
ATTRS{bNumConfigurations}==“1”
ATTRS{bMaxPacketSize0}==“64”
ATTRS{speed}==“480”
ATTRS{busnum}==“1”
ATTRS{devnum}==“1”
ATTRS{devpath}==“0”
ATTRS{version}==" 2.00"
ATTRS{maxchild}==“8”
ATTRS{quirks}==“0x0”
ATTRS{avoid_reset_quirk}==“0”
ATTRS{authorized}==“1”
ATTRS{manufacturer}==“Linux 2.6.34-12-default ehci_hcd”
ATTRS{product}==“EHCI Host Controller”
ATTRS{serial}==“0000:00:1d.7”
ATTRS{authorized_default}==“1”

looking at parent device ‘/devices/pci0000:00/0000:00:1d.7’:
KERNELS==“0000:00:1d.7”
SUBSYSTEMS==“pci”
DRIVERS==“ehci_hcd”
ATTRS{vendor}==“0x8086”
ATTRS{device}==“0x24dd”
ATTRS{subsystem_vendor}==“0x1014”
ATTRS{subsystem_device}==“0x0287”
ATTRS{class}==“0x0c0320”
ATTRS{irq}==“23”
ATTRS{local_cpus}==“ffffffff”
ATTRS{local_cpulist}==“0-31”
ATTRS{modalias}==“pci:v00008086d000024DDsv00001014sd00000287bc0Csc03i20”
ATTRS{dma_mask_bits}==“32”
ATTRS{consistent_dma_mask_bits}==“32”
ATTRS{enable}==“1”
ATTRS{broken_parity_status}==“0”
ATTRS{msi_bus}==“”
ATTRS{companion}==“”

looking at parent device ‘/devices/pci0000:00’:
KERNELS==“pci0000:00”
SUBSYSTEMS==“”
DRIVERS==“”

Ich bin gespann wie es weiter geht!

Hallo an die ‘Nachbarn’ aus Hamburg und Stade und alle anderen!

Mit Interesse verfolge ich den Workshop udev, der hier offenbar startet.
Insbesondere da ich auch mal ein ähnliches Problem mit “disk1 bis disk56” hatte.
Seit ich (unter anderem?) in fstab bzw. in dem entsprechenden Anklick-frontend in der YaST-Partitionsverwaltung
mount by id / by-id angegeben habe
und

,

ist es nicht mehr aufgetreten.

Aber ich bin gespannt, wie man dies “grundlegender” angehen kann.

puzzled pistazienfresser

Hallo zusammen,

@pistazienfresser
By-ID ist langweilig und überhaupt nicht beeindruckend. :wink: Das ist der wichtigste Grund, das mit udev zu machen. Völlig nebensächlich ist natürlich, dass die Namen dadurch leichter für uns Menschen lesbar werden, denn wir Linuxuser sind selbstverständlich dazu in der Lage uns dreißigstellige Hexadezimalzahlen zu merken. :wink: Also machen wir mal weiter.

In meinem letzten Beitrag habe ich meine Platte und ihre Werte als Beispiel genommen und die entscheidenden Zeilen eingestellt. Nun machen wir daraus eine Regel. Diese Regeln werden in


/etc/udev/rules.d/

abgelegt. Der Name beginnt immer mit einer zweistelligen Zahl, die die Priorität angibt. Regeln mit niedrigen Zahlen werden zuerst ausgeführt. Also geben wir unseren Regeln niedrige Nummern, damit sie zuerst beachtet werden. Nach der Nummer folgt ein Bindestrich und nach dem Strich ein frei wählbarer Name. Die Datei erzeugen wir mit dem Editor unserer Wahl (Lang lebe vi!).

Eine Regel besteht grundsätzlich aus zwei Teilen. Erst kommt eine mit Kommata getrennte Liste von Bedingungen. Nach der letzten Bedingung folgt eine Liste von Anweisungen. Als Bedingungen nehmen wir die gefundenen Werte, die uns devadm verraten hat. Also in meinem Fall sehen die Bedingungen so aus:


KERNEL=="sd?5", SUBSYSTEMS=="usb", ATTRS{serial}=="FAFFFFF0FDF1FFF9EF80712",

Die erste Bedingung betrifft die Kernelmeldung, dass eine Platte (sd) angehängt wurde. Welchen Buchstaben diese Platte bekommt, wissen wir nicht. Deshalb ersetzen wir das mit einem “?”. Dann kommt die Partition der Platte. In meinem Fall die erste logische Partition. Die zweite Bedingung erzählt udev, dass es den USB betrifft. Und als letztes setze ich die Seriennummer des Geräts ein. All diese Informationen habe ich von udevadm bekommen.

Nun müssen wir nur noch sagen, was wir wollen. Wir wollen, dass das Gerät immer unter demselben Namen ansprechbar ist. Also geben wir ihm einen:


KERNEL=="sd?5", SUBSYSTEMS=="usb", ATTRS{serial}=="FAFFFFF0FDF1FFF9EF80712", NAME="airy1T", SYMLINK="usbdevices/airy1T"

So lautet die vollständige Regel. “NAME” weist udev an, unter /dev einen entsprechenden Namen anzulegen. Das Gerät heißt danach /dev/airyT1. “SYMLINK” erzeugt einen Link im Verzeichnis /dev auf den Namen. Das Gerät ist hinterher auch mit /dev/usbdevices/airyT1 ansprechbar. Das kann zusammen oder alternativ benutzt werden. In der Praxis habe ich mich für den neuen Namen entschieden.

Jetzt hat das Gerät einen neuen Namen, unter dem ich es mounten kann. Was noch fehlt, ist ein Eintrag in /etc/fstab und der mount-Befehl selbst. Den Eintrag in fstab spare ich mir hier. Den Eintrag für den mount-Befehl kriegen wir später.

Zum Schluss noch ein Hinweis. In Horsts Ausgabe konnte ich keine vernünftige und eindeutige Seriennummer entdecken. Das Problem kann auf zwei Arten gelöst werden. Zum einen könnte man die Hersteller- und die Produkt-ID als zwei Bedingungen angeben. Das schafft meistens genug Eindeutigkeit. Will man es ganz genau, kann auch eine Umgebungsvariable des Geräts benutzt werden. Dazu rufen wir den Befehl wie folgt auf:


udevadm info --name=/dev/geraet --query=all

Es folgt eine Ausgabe ähnlich dieser hier:


P: /devices/pci0000:00/0000:00:1d.7/usb8/8-4/8-4:1.0/host8/target8:0:0/8:0:0:0/block/sdb/sdb5
N: airy1T
S: disk/by-id/usb-SAMSUNG_HD103SI_FAFFFFF0FDF1FFF9EF80712-0:0-part5
S: disk/by-path/pci-0000:00:1d.7-usb-0:4:1.0-scsi-0:0:0:0-part5
S: disk/by-uuid/61249314-5d8f-49ae-ac08-676b3e6e5c97
E: ID_VENDOR=SAMSUNG
E: ID_MODEL=HD103SI
E: ID_REVISION=010f
E: ID_SERIAL=SAMSUNG_HD103SI_FAFFFFF0FDF1FFF9EF80712-0:0
E: ID_SERIAL_SHORT=FAFFFFF0FDF1FFF9EF80712
E: ID_TYPE=disk
E: ID_INSTANCE=0:0
E: ID_BUS=usb
E: ID_PATH=pci-0000:00:1d.7-usb-0:4:1.0-scsi-0:0:0:0
E: ID_FS_USAGE=filesystem
E: ID_FS_TYPE=ext3
E: ID_FS_VERSION=1.0
E: ID_FS_UUID=61249314-5d8f-49ae-ac08-676b3e6e5c97
E: ID_FS_UUID_ENC=61249314-5d8f-49ae-ac08-676b3e6e5c97
E: ID_FS_LABEL=
E: ID_FS_LABEL_ENC=
E: ID_FS_LABEL_SAFE=
E: FSTAB_NAME=/dev/airy1T
E: FSTAB_DIR=/home/erik_buero/airy1T
E: FSTAB_TYPE=ext3
E: FSTAB_OPTS=noauto,rw,acl,user_xattr
E: FSTAB_FREQ=0
E: FSTAB_PASSNO=0

Hier finden wir eine UUID, eine Universally Unique ID, die auch immer gleich sein sollte. Einen Wert aus dieser Ausgabe können wir nach diesem Schema als Bedingung benutzen:


ENV{ID_FS_UUID}=="61249314-5d8f-49ae-ac08-676b3e6e5c97"

Und nun viel Spaß beim Ausprobieren.

Liebe Grüße

Erik

leider finde ich bei meinen Abfragen keine eindeutige ID.
hier einmal der Auszug der USB-Platte, Partition 1:

horst-s:/media # udevadm info --name=/dev/sdb1 --query=all
P: /devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0/host3/target3:0:0/3:0:0:0/block/sdb/sdb1
N: sdb1
S: block/8:17
S: disk/by-id/usb-Generic_USB_Disk-0:0-part1
S: disk/by-path/pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:0-part1
S: disk/by-id/edd-int13_dev80-part1
E: UDEV_LOG=3
E: DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0/host3/target3:0:0/3:0:0:0/block/sdb/sdb1
E: SUBSYSTEM=block
E: DEVNAME=sdb1
E: ID_VENDOR=Generic
E: ID_VENDOR_ENC=Generic\x20
E: ID_VENDOR_ID=058f
E: ID_MODEL=USB_Disk
E: ID_MODEL_ENC=USB\x20Disk\x20\x20\x20\x20\x20\x20\x20\x20
E: ID_MODEL_ID=6391
E: ID_REVISION=9.02
E: ID_SERIAL=Generic_USB_Disk-0:0
E: ID_TYPE=disk
E: ID_INSTANCE=0:0
E: ID_BUS=usb
E: ID_USB_INTERFACES=:080650:
E: ID_USB_INTERFACE_NUM=00
E: ID_USB_DRIVER=usb-storage
E: ID_PATH=pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:0
E: ID_PART_TABLE_TYPE=dos
E: ID_EDD=int13_dev80
E: UDISKS_PRESENTATION_NOPOLICY=0
E: UDISKS_PARTITION=1
E: UDISKS_PARTITION_SCHEME=mbr
E: UDISKS_PARTITION_NUMBER=1
E: UDISKS_PARTITION_TYPE=0x0f
E: UDISKS_PARTITION_SIZE=250048512000
E: UDISKS_PARTITION_SLAVE=/sys/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0/host3/target3:0:0/3:0:0:0/block/sdb
E: UDISKS_PARTITION_OFFSET=8225280
E: UDISKS_PARTITION_ALIGNMENT_OFFSET=0
E: MAJOR=8
E: MINOR=17
E: DEVTYPE=partition
E: DEVLINKS=/dev/block/8:17 /dev/disk/by-id/usb-Generic_USB_Disk-0:0-part1 /dev/disk/by-path/pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:0-part1 /dev/disk/by-id/edd-int13_dev80-part1

es sei denn,

E: DEVTYPE=partition
E: DEVLINKS=/dev/block/8:17 /dev/disk/by-id/usb-Generic_USB_Disk-0:0-part1 /dev/disk/by-path/pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:0-part1 /dev/disk/by-id/edd-int13_dev80-part1

könnte als eindeutige ID benutzt werden.
Das würde dann aber wohl auch für jede andere USB-Platte gelten, soweit es mindestens 1 Partition darauf gibt.

Nachtrag zum obrigen Beitrag:
über yast / Hardwareinformation und hier USB-Disk gibt es viele eindeutige Schlüssel (für USB-Disk und pro Partition), aber diese sind nicht in der Abfrage udevadm zu finden?!

Hallo zusammen,

komisch, dass udev keine eindeutigen IDs mitgeteilt bekommt. Was Yast noch so weiß, ist irrelevant. Es muss in den udev-Datenbanken stehen, damit wir es benutzen können. In dem Fall würde ich die vendor-ID und die product-ID aus der ersten Ausgabe nehmen. Das ist wahrscheinlich eindeutig genug, es sei denn, Du benutzt noch ein weiteres baugleiches Gerät. Was ergibt denn


udevadm info --name=/dev/sdb --query=all

Vielleicht ist da was Brauchbares dabei. Eine Disk-ID zum Beispiel. Dass das mit der Partition nicht klappt, könnte daran liegen, dass es eine FAT-Partition ist. BTW: Du hast geschrieben, dass Du das zum Backup benutzen willst. Dir ist schon klar, dass beim Kopieren der Daten auf eine FAT- oder NTFS-Partition die Linux-Rechte verloren gehen?

Liebe Grüße

Erik

Hallo nochmal,

was mir gerade auffällt: Du hast geschrieben, es wären zwei Partitionen. Eine mit NTFS und eine mit ext3 formatiert. Nun steht in Deiner udev-Info, dass die erste Partition auf der Platte eine DOS-Partitionstabelle wäre:


E: ID_PART_TABLE_TYPE=dos

Das sollte aber so aussehen:


E: ID_FS_TYPE=ext3

Kann das sein, dass /dev/sdb1 gar nicht die erste Partition, sondern die erweiterte ist? Tippe mal bitte


fdisk -l /dev/sdb

und poste die Ausgabe, damit wir sicher sind, welche Partition, welches System enthält.

Liebe Grüße

Erik

auf der Disk ist NTFS, Fat ext4.
die Opensuse - Sicherungen liegen alle auf der ext4-Partition. Images sichere ich mit clonzilla, die Daten mit rsync.
Nun Deine Abfrage:

horst-s:~ # fdisk -l /dev/sdb

Disk /dev/sdb: 250.1 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x34dc34db

Device Boot Start End Blocks Id System
/dev/sdb1 2 30401 244188000 f W95 Ext’d (LBA)
/dev/sdb5 2 13056 104856255 7 HPFS/NTFS
/dev/sdb6 13056 18155 40957952 7 HPFS/NTFS
/dev/sdb7 20399 21704 10482412 7 HPFS/NTFS
/dev/sdb8 21704 30400 69850112 83 Linux
horst-s:~ #

So habe ich die Platte noch nie gesehen!

Hallo zusammen,

das heißt, Du hast eine erweiterte Partition, die udev auch so angezeigt hat (/dev/sdb1) und darin vier logische Partitionen. Die erste ist eine NTFS mit knapp 100Gig, die zweite und dritte sind auch NTFS mit ca. 39Gig und ca. 10Gig. Die letzte ist dann eine Linux-Partition (etx3, ext4, …) mit ca. 69Gig. Außerdem ist da noch eine Lücke zwischen sdb6 und sdb7 von ca. 17Gig, da /dev/sdb6 mit dem Zylinder 18155 endet, /dev/sd7 aber erst mit dem Zylinder 20399 beginnt. Komisch. Das passt so gar nicht zu dem, wie Du die Platte beschrieben hast.

Liebe Grüße

Erik

Stimmt, ich hatte ja schon bemerkt: so hatte ich die Aufteilung noch nie gesehen.
Ich hatte bis Mai’2010 WindowsXp. Dann bin ich umgestiegen auf OpenSUSE.
Die NTFS-Partitionen enthalten noch immer die Sicherung von XP.
Ich mache folgendes: die wichtigen Daten werde ich jetzt auf DVD brennen, die Platte plätten und dann neu formatieren.
Ich brauche ca. 80GB vfat (es laufen noch 2 Xp-Rechner) zum Datenaustausch, Rest ext4 für Sicherungen. Oder besseren Vorschlag?
Dann sehen wir mal weiter!

wie gesagt:
USB-Platte geplättet und neu formatiert. 1 erweiterte Partition, darin 200 GB ext4, Rest fat-Partition.
das sieht jetzt so aus:

horst-s:/media # udevadm info --name=/dev/sdb --query=all --attribute-walk

Udevadm info 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 ‘/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0/host3/target3:0:0/3:0:0:0/block/sdb’:
KERNEL==“sdb”
SUBSYSTEM==“block”
DRIVER==“”
ATTR{range}==“16”
ATTR{ext_range}==“256”
ATTR{removable}==“0”
ATTR{ro}==“0”
ATTR{size}==“488397168”
ATTR{alignment_offset}==“0”
ATTR{discard_alignment}==“0”
ATTR{capability}==“50”
ATTR{stat}==" 284 16846 18966 2312 5 0 33 32 0 1192 2344"
ATTR{inflight}==" 0 0"

looking at parent device ‘/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0/host3/target3:0:0/3:0:0:0’:
KERNELS==“3:0:0:0”
SUBSYSTEMS==“scsi”
DRIVERS==“sd”
ATTRS{device_blocked}==“0”
ATTRS{type}==“0”
ATTRS{scsi_level}==“3”
ATTRS{vendor}=="Generic "
ATTRS{model}=="USB Disk "
ATTRS{rev}==“9.02”
ATTRS{tgps}==“0”
ATTRS{state}==“running”
ATTRS{timeout}==“30”
ATTRS{iocounterbits}==“32”
ATTRS{iorequest_cnt}==“0x133”
ATTRS{iodone_cnt}==“0x133”
ATTRS{ioerr_cnt}==“0x1”
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:1d.7/usb1/1-2/1-2:1.0/host3/target3:0:0’:
KERNELS==“target3:0:0”
SUBSYSTEMS==“scsi”
DRIVERS==“”

looking at parent device ‘/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0/host3’:
KERNELS==“host3”
SUBSYSTEMS==“scsi”
DRIVERS==“”

looking at parent device ‘/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0’:
KERNELS==“1-2: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:v058Fp6391d0100dc00dsc00dp00ic08isc06ip50”
ATTRS{supports_autosuspend}==“0”

looking at parent device ‘/devices/pci0000:00/0000:00:1d.7/usb1/1-2’:
KERNELS==“1-2”
SUBSYSTEMS==“usb”
DRIVERS==“usb”
ATTRS{configuration}==“”
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}==“1”
ATTRS{bmAttributes}==“c0”
ATTRS{bMaxPower}==“100mA”
ATTRS{urbnum}==“938”
ATTRS{idVendor}==“058f”
ATTRS{idProduct}==“6391”
ATTRS{bcdDevice}==“0100”
ATTRS{bDeviceClass}==“00”
ATTRS{bDeviceSubClass}==“00”
ATTRS{bDeviceProtocol}==“00”
ATTRS{bNumConfigurations}==“1”
ATTRS{bMaxPacketSize0}==“64”
ATTRS{speed}==“480”
ATTRS{busnum}==“1”
ATTRS{devnum}==“4”
ATTRS{devpath}==“2”
ATTRS{version}==" 2.00"
ATTRS{maxchild}==“0”
ATTRS{quirks}==“0x0”
ATTRS{avoid_reset_quirk}==“0”
ATTRS{authorized}==“1”
ATTRS{manufacturer}==“Generic”
ATTRS{product}==“USB TO IDE Bridge”

looking at parent device ‘/devices/pci0000:00/0000:00:1d.7/usb1’:
KERNELS==“usb1”
SUBSYSTEMS==“usb”
DRIVERS==“usb”
ATTRS{configuration}==“”
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}==“1”
ATTRS{bmAttributes}==“e0”
ATTRS{bMaxPower}==" 0mA"
ATTRS{urbnum}==“70”
ATTRS{idVendor}==“1d6b”
ATTRS{idProduct}==“0002”
ATTRS{bcdDevice}==“0206”
ATTRS{bDeviceClass}==“09”
ATTRS{bDeviceSubClass}==“00”
ATTRS{bDeviceProtocol}==“00”
ATTRS{bNumConfigurations}==“1”
ATTRS{bMaxPacketSize0}==“64”
ATTRS{speed}==“480”
ATTRS{busnum}==“1”
ATTRS{devnum}==“1”
ATTRS{devpath}==“0”
ATTRS{version}==" 2.00"
ATTRS{maxchild}==“8”
ATTRS{quirks}==“0x0”
ATTRS{avoid_reset_quirk}==“0”
ATTRS{authorized}==“1”
ATTRS{manufacturer}==“Linux 2.6.34.7-0.5-default ehci_hcd”
ATTRS{product}==“EHCI Host Controller”
ATTRS{serial}==“0000:00:1d.7”
ATTRS{authorized_default}==“1”

looking at parent device ‘/devices/pci0000:00/0000:00:1d.7’:
KERNELS==“0000:00:1d.7”
SUBSYSTEMS==“pci”
DRIVERS==“ehci_hcd”
ATTRS{vendor}==“0x8086”
ATTRS{device}==“0x24dd”
ATTRS{subsystem_vendor}==“0x1014”
ATTRS{subsystem_device}==“0x0287”
ATTRS{class}==“0x0c0320”
ATTRS{irq}==“23”
ATTRS{local_cpus}==“ffffffff”
ATTRS{local_cpulist}==“0-31”
ATTRS{modalias}==“pci:v00008086d000024DDsv00001014sd00000287bc0Csc03i20”
ATTRS{dma_mask_bits}==“32”
ATTRS{consistent_dma_mask_bits}==“32”
ATTRS{enable}==“1”
ATTRS{broken_parity_status}==“0”
ATTRS{msi_bus}==“”
ATTRS{companion}==“”

looking at parent device ‘/devices/pci0000:00’:
KERNELS==“pci0000:00”
SUBSYSTEMS==“”
DRIVERS==“”

horst-s:/media #

bzw.:

horst-s:/media # fdisk -l /dev/sdb

Disk /dev/sdb: 250.1 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x34dc34db

Device Boot Start End Blocks Id System
/dev/sdb1 1 30402 244197376 f W95 Ext’d (LBA)
/dev/sdb5 1 26108 209710080 83 Linux
/dev/sdb6 26109 30401 34475008 c W95 FAT32 (LBA)
horst-s:/media #

Rein interessehalber, die so partitionierte Platte schon an einem Windows-PC angeschlossen und versucht auf sie zuzugreifen?

Ich bin mir nicht 100%ig sicher, aber es könnte sein, daß Du da eine böse Überraschung erlebst.

Warum? Unter WinXp wird die fat-Partition erkannt, und kann sie nutzen. Die ext4 wird unter WinXp nicht benötigt.
Unter OpenSuse benötige ich beide Partitionen, was auch kein Problem ist!

Hallo erikro

nicht mitlesen. Mitmachen.

Klar. Der Workshop gefällt mir super gut, besonders wenn ich lese, dass es hier um hardcore Linux geht. Habe also versucht, meinem Mobile Phone etwas Manieren beizubringen.

# udevadm info --name=/dev/sdi1 --query=all --attribute-walk
  looking at device '/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/host18/target18:0:0/18:0:0:0/block/sdi/sdi1':
    KERNEL=="sdi1"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{partition}=="1"
    ATTR{start}=="8192"
    ATTR{size}=="31108096"
    ATTR{alignment_offset}=="0"
    ATTR{discard_alignment}=="4290772992"
    ATTR{stat}=="     157     4993     9231     3023        1        0        1        4        0     2175     3027"
    ATTR{inflight}=="       0        0"

<snip>

  looking at parent device '/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2':
    KERNELS=="1-1.2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="c0"
    ATTRS{bMaxPower}=="500mA"
    ATTRS{urbnum}=="1335"
    ATTRS{idVendor}=="0bb4"
    ATTRS{idProduct}=="0ff9"
    ATTRS{bcdDevice}=="0226"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="13"
    ATTRS{devpath}=="1.2"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="HTC"
    ATTRS{product}=="Android Phone"
    ATTRS{serial}=="SH0A2PL01025"

Da finde ich also tatsächlich eine brauchbare Serie-Nummer. Demgemäss baue ich einen Eintrag als /etc/udev/rules.d/65-htc-desire.rules mit dem Inhalt:

KERNEL="sd?1", SUBSYSTEMS=="usb", ATTRS{serial}=="SH0A2PL01025", NAME="htc", SYMLINK="usbdevices/desire"

Frage: Du sagst, man solle eine tiefe Prioritätsnummer wählen. Aber: Das Einhängen meines Phones hat ja wohl keine grosse Priorität. Gibt es hier genauere Regeln, wie man sich die Abfolge der Prioritäten organisert?

Dann habe ich noch eine zusätzliche Zeile in /etc/fstab eingefügt:

/dev/htc     /media/htc     vfat     rw,user,noauto,noatime  0  0

Resultat der Übung: wenn ich das Phone am USB einstecke, dann kann ich es als gewöhnlicher User mit Dolphin öffnen. Sehr gut!

Aber: Beim Einstecken erscheint ein zusätzliches Fenster mit dem Titel:

Authentication is required to mount the device - PolicyKit1-KDE

mit Eingabefeld für das Passwort. Ich gebe dort nichts ein und Dolphin öffnet das Verzeichnis auf der SDcard des Phones trotzdem. Wie kann ich jetzt unterdrücken, dass das Eingabefenster von PolicyKit überhaupt erscheint? Das ist ja wohl völlig unnötig. Arbeiten hier zwei Systeme nebeneinander her?

Wie gesagt, ich war mir nicht 100%ig sicher, aber mit einem USB-Stick würde ich das nicht probieren, zumindest bis Vista wird da die zweite Partition mit FAT/NTFS nicht mal erkannt, wenn die erste als $NICHT_WINDOWS_DATEISYSTEM formatiert wurde.

Ob es an Win7 oder daran liegt, daß Windows allgemein zwischen USB-Stick und “Festplatte über USB angeschlossen” unterscheidet, weiß ich nicht (interessiert mich ehrlicherweise auch nicht).

Wäre nur ärgerlich gewesen, wenn nach der ganzen Partitioniererei (die IMHO allerdings eh unnötig war) dieses Problem auf einmal hinzu kommt.

Jo, das stand nie ausser Frage.

Diese Sucherei nach der Seriennummer ist irgendwie witzig, denn auch da scheint Linux/udev zwischen USB-Sticks und Festplatten an USB (unfreiwillig?) unterscheiden zu können.

udevadm info --query=all /dev/DINGENS |grep -i serial

und

udevadm info --query=all --attribute-walk /dev/DINGENS |grep -i serial

sind bei externen Festplatten an USB nicht vom selben Erfolg gekrönt.

Aber auch das ist eigentlich unnötig, udev bringt in seinen Standardregeln schöne Symlinks mit (/dev/disk/by-irgendwas) und der einfachste Weg einen eindeutigen Mountpunkt zu haben, sind für menschliche Gehirne immer noch Dateisystemlabels, die auch von den “Automountern” (HAL und AFAIK auch udisks) gerne genommen werden, sofern vorhanden.

@voodoo

man polkit-auth

oder

man PolicyKit.conf

@voodoo

man polkit-auth

oder

man PolicyKit.conf

Danke. Ich denke, dass ich im richtigen Garten grabe, aber es bleibt ein Buch mit sieben Siegeln.

/etc/polkit-default-privs.standard enthält:

org.freedesktop.hal.storage.mount-removable                     auth_admin_keep_always:auth_admin_keep_always:yes

Das ist es wohl, was die Authentifizierung durch root verlangt?

Und in /etc/PolicyKit/PolicyKit.conf habe ich für mich alles aufgemacht:

<?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- -->

<!DOCTYPE pkconfig PUBLIC "-//freedesktop//DTD PolicyKit Configuration 1.0//EN"
"http://hal.freedesktop.org/releases/PolicyKit/1.0/config.dtd">

<!-- See the manual page PolicyKit.conf(5) for file format -->

<config version="0.1">

        <match user="vodoo">
                <return result="yes"/>
        </match>

</config>

Aber wie spielt das ganze zusammen? Muss ich da was in /etc/polkit-default-privs.local einfügen?