PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bei Anschluss USB Festplatte automatisch Script ausführen?



Poison Nuke
16.02.14, 18:14
Hio,

wie kann man das bei Debian Wheezy realisieren, dass automatisch ein Script gestartet wird, wenn eine USB-HDD angeschlossen wird?

Das Problem ist, im etc/udev/rules.d ist außer der 70-persisten-net... nichts weiter drin. Müsste da nicht normalerweise nach dem ersten Anschließen der HDD eine udev rule erstellt werden?


In /lib/udev/rules.d finde ich auch kein Script, das einen Eintrag für die HDD enthält und für mich stellt sich eh die Frage, welches von beiden Verzeichnissen wäre überhaupt das richtige dafür, und welche Datei?

nihili
16.02.14, 19:12
das einfachste wäre wohl wenn dein dateimanager eh im hintergrund läuft, die meisten haben da was eingebaut.
ansonsten läuft auf vielen systemen noch ein dämon der sich ums automounten kümmert - bei mir ist es udevil/devmon.
die haben dann schon optionen dafür.

hört sich etwas schwammig an, aber es ist halt von deiner desktopumgebung abhängig.

nopes
16.02.14, 19:14
Zum Thema udev und Debian siehe hier (https://wiki.debian.org/udev).

Poison Nuke
16.02.14, 19:16
es ist eine eine Server-Installation als NAS.

Die USB-Platte ist auch dauerhaft angeschlossen.
Ich will das durch das Einschalten der HDD automatisch die HDD gemounted wird und ein rsync startet und nach Abschluss diese wieder unmountet.

so muss ich erstmal an Rechner ran wo der Key drauf ist und mich per SSH verbinden, und entweder einen Screen offen lassen oder einen Job triggern.

Poison Nuke
16.02.14, 19:29
Zum Thema udev und Debian siehe hier (https://wiki.debian.org/udev).

ok, stellt sich nur die Frage, warum kein udev-eintrag automatisch angelegt wird, funktioniert bei allen anderen Geräten ja auch automatisch.

Weil manuell einen Eintrag erstellen ist nicht ohne.
Zudem, ist es egal in welche Datei man das schreibt? So wirklich schlau bin ich aus dem Artikel auch noch nicht geworden.

nopes
16.02.14, 19:30
Was ist den hier nicht klar?
The rules files (which amount to more configuration for udevd) are taken from /run/udev/rules.d, /etc/udev/rules.d or /lib/udev/rules.d (debian puts most of the rules in /lib/udev/rules.d). If a file with the same name is present in more than one of these directories then the latter(s) file will be ignored. Files in there are parsed in alpha order, as long as the name ends with ".rules". When the config file or rules files are changed, then the udevd daemon should be restarted (or, as mentioned further down this page, you can use the udevadm program).

Many of the files in /etc/udev/rules.d are links to files elsewhere. I'm guessing that's so that when the rules files are edited, the editor backups aren't left lying around where they might be used in the next restart of the udevd daemon. Also, since the links can have different names from the original files, then they can be ordered without having to worry about what names they have (as with the init scripts).Gut ist halt kein Skript da, mach halt selber einen, siehe dazu hier (http://reactivated.net/writing_udev_rules.html), für dich wohl insb. das hier (http://reactivated.net/writing_udev_rules.html#external-run).

[EDIT]Evt lohnt auch eine Suche nach "Linux-Server mit Debian" bei Google Books (http://books.google.de/) (ja ich weiss böses Google, aber deren Dienst sind schon beeidruckend ;)), da wird das recht ausführlich behandelt.

Poison Nuke
16.02.14, 19:55
hm, irgendwas mache ich wohl noch falsch. Habe eine neue Datei angelegt (Rechte wie alle anderen), und udevd neugestartet.
Aber nach dem Anschließen der HDD passiert nichts. Kein Symlink und das Script läuft erst recht nicht. Fehlerausgaben sind im syslog aber auch keine zu sehen:


Device Boot Start End Blocks Id System
/dev/sdc1 2048 1465149167 732573560 83 Linux
[nas]/lib/udev/rules.d> cat /dev/u
uinput urandom
[nas]/lib/udev/rules.d> tail 79-persisten-USB.rules
KERNEL=="sd*", SUBSYSTEMS=="scsi", ATTRS{serial}=="201311210379", ATTRS{model}=="WD7500BVPT " , SYMLINK+="usbhd%n", RUN+="/root/USBbackup.sh"
[nas]/lib/udev/rules.d>

nopes
16.02.14, 20:00
Dann Zeig mal die Ausgabe von:
udevinfo -a -p /sys/block/sdc[EDIT1]
Wenn es da ärger gibt probiere:
udevadm info -a -p /sys/block/sdcJedenfalls vermute ich, das was bei den ATTRS nicht passt.
[EDIT2]
Warum machst du es eigentlich so kompliziert, reicht es nicht einfach KERNEL entsprechend ausfüllen, warum die Regex da?

Poison Nuke
16.02.14, 20:03
Kommando nicht gefunden :X

Poison Nuke
16.02.14, 20:05
ah, das also. Wurde umbenannt.

udevadm info -a -p ....



looking at device '/devices/pci0000:00/0000:00:14.0/usb4/4-3/4-3:1.0/host3/target3:0:0/3:0:0:0/block/sdc':
KERNEL=="sdc"
SUBSYSTEM=="block"
DRIVER==""
ATTR{range}=="16"
ATTR{ext_range}=="256"
ATTR{removable}=="0"
ATTR{ro}=="0"
ATTR{size}=="1465149168"
ATTR{alignment_offset}=="0"
ATTR{discard_alignment}=="0"
ATTR{capability}=="50"
ATTR{stat}==" 165 0 1320 88 0 0 0 0 0 88 88"
ATTR{inflight}==" 0 0"
ATTR{events}==""
ATTR{events_async}==""
ATTR{events_poll_msecs}=="-1"

looking at parent device '/devices/pci0000:00/0000:00:14.0/usb4/4-3/4-3: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}=="WESTERNDIGITAL"
ATTRS{model}=="WD7500BVPT "
ATTRS{rev}=="1AA0"
ATTRS{state}=="running"
ATTRS{timeout}=="30"
ATTRS{iocounterbits}=="32"
ATTRS{iorequest_cnt}=="0xcb"
ATTRS{iodone_cnt}=="0xcb"
ATTRS{ioerr_cnt}=="0x1"
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:14.0/usb4/4-3/4-3:1.0/host3/target3:0:0':
KERNELS=="target3:0:0"
SUBSYSTEMS=="scsi"
DRIVERS==""

looking at parent device '/devices/pci0000:00/0000:00:14.0/usb4/4-3/4-3:1.0/host3':
KERNELS=="host3"
SUBSYSTEMS=="scsi"
DRIVERS==""

looking at parent device '/devices/pci0000:00/0000:00:14.0/usb4/4-3/4-3:1.0':
KERNELS=="4-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{supports_autosuspend}=="1"

looking at parent device '/devices/pci0000:00/0000:00:14.0/usb4/4-3':
KERNELS=="4-3"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{configuration}==""
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bmAttributes}=="c0"
ATTRS{bMaxPower}==" 0mA"
ATTRS{urbnum}=="632"
ATTRS{idVendor}=="174c"
ATTRS{idProduct}=="55aa"
ATTRS{bcdDevice}=="0100"
ATTRS{bDeviceClass}=="00"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="00"
ATTRS{bNumConfigurations}=="1"
ATTRS{bMaxPacketSize0}=="9"
ATTRS{speed}=="5000"
ATTRS{busnum}=="4"
ATTRS{devnum}=="4"
ATTRS{devpath}=="3"
ATTRS{version}==" 3.00"
ATTRS{maxchild}=="0"
ATTRS{quirks}=="0x0"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{authorized}=="1"
ATTRS{manufacturer}=="01234567890123456789012345678901234567890123"
ATTRS{product}=="External HDD"
ATTRS{serial}=="201311210379"

looking at parent device '/devices/pci0000:00/0000:00:14.0/usb4':
KERNELS=="usb4"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{configuration}==""
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bmAttributes}=="e0"
ATTRS{bMaxPower}==" 0mA"
ATTRS{urbnum}=="109"
ATTRS{idVendor}=="1d6b"
ATTRS{idProduct}=="0003"
ATTRS{bcdDevice}=="0302"
ATTRS{bDeviceClass}=="09"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="03"
ATTRS{bNumConfigurations}=="1"
ATTRS{bMaxPacketSize0}=="9"
ATTRS{speed}=="5000"
ATTRS{busnum}=="4"
ATTRS{devnum}=="1"
ATTRS{devpath}=="0"
ATTRS{version}==" 3.00"
ATTRS{maxchild}=="4"
ATTRS{quirks}=="0x0"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{authorized}=="1"
ATTRS{manufacturer}=="Linux 3.2.0-4-amd64 xhci_hcd"
ATTRS{product}=="xHCI Host Controller"
ATTRS{serial}=="0000:00:14.0"
ATTRS{authorized_default}=="1"

looking at parent device '/devices/pci0000:00/0000:00:14.0':
KERNELS=="0000:00:14.0"
SUBSYSTEMS=="pci"
DRIVERS=="xhci_hcd"
ATTRS{vendor}=="0x8086"
ATTRS{device}=="0x1e31"
ATTRS{subsystem_vendor}=="0x1458"
ATTRS{subsystem_device}=="0x5007"
ATTRS{class}=="0x0c0330"
ATTRS{irq}=="43"
ATTRS{local_cpus}=="00000000,00000000,00000000,00000000,00000000,00000 000,00000000,00000000,00000000,00000000,000000 00,00000000,00000000,00000000,00000000,00000003"
ATTRS{local_cpulist}=="0-1"
ATTRS{numa_node}=="-1"
ATTRS{dma_mask_bits}=="64"
ATTRS{consistent_dma_mask_bits}=="32"
ATTRS{enable}=="1"
ATTRS{broken_parity_status}=="0"
ATTRS{msi_bus}==""

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

nopes
16.02.14, 20:11
Wenn das nicht läuft, weiß ich auch nicht weiter (habe mir die Doku aber auch nur seit meinen 1. Post hier durchgelesen):
KERNEL=="sdc", RUN+="/root/USBbackup.sh"

Poison Nuke
16.02.14, 20:17
hm, ok der Symlink ist da. Aber das Script startet nicht.
und so aktuell ist das ganz schön gefährlich, weil wenn das Script dann startet, und es ist mal was anderes angeschlossen, dann wars das mit den Daten, da ein rsync mit --delete in dem Script aktiv ist.

Jetzt wäre erstmal interessant, warum das Script nicht startet und wo überhaupt die Fehlermeldung hingehen in so einem Fall.. weil in den Logs sehe ich auch nix.

nopes
16.02.14, 20:20
Naja du hast nach udevtest bzw. "udevadm test" zum "Simulieren", zum Thema logs steht was im genannten Buch - das du bist du sicher weißt, dass er den gewünschten Skript startet nichts löscht hatte ich unterstellt, den Skript dann tauschen ist ja wohl das kleinste Problem ;)

[EDIT]Mal so ganz naive, der UDEV-Dienst läuft aber und du hast ihn auch nach der Regeländerung bzw. Aufnahme neugestartet, oder?

Poison Nuke
17.02.14, 00:55
keine Ahnung warum, aber nach einigen probieren ging es dann auf einmal.
Ich hatte zwischenzeitlich ein paar Rules probiert und festgestellt, dass das Attribut "serial" zweimal vorkommt mit unterschiedlichen Werten. Ich vermute daran wird es gelegen haben, weil dadurch keine Übereinstimmung zustande kam in der Rule.

Aber auch als ich nur noch die Modellnummer eingetragen hatte (darf halt meine zweite Festplatte vom gleichen Typ dann nicht einfach anschließen), ging es die ersten paar male nicht.

Nach ein paar mal triggern und ausschalten der HDD und wieder einschalten hatte es aber funktioniert.

Hab es nun ein paar mal getestet, nun läuft es so wie gewollt. Festplatte anschließen, das script gibt ihr 5 Sekunden, dann wird gemountet und rsync und dann sync und umount und dann kann ich sie wieder ausschalten.


Mich wundert am meisten, dass es rein gar keine Einträge im Log gibt.
Das Logverhalten steht auf "err", also sollten ja zumindest solche Fehler geloggt werden dachte ich :confused:

naja, es läuft jetzt zumindest.