Hi.
Ich schreibe gerade ein kleines BASH-Script.
Ich bin an einem Punkt, wo ich erkennen muss, ob nach die extern USB-Festplatte existiert.
Normalerweise wird sie nicht abgestöbselt doch aufgrund der tatsache, dass ich sie mit einem Spezialprogramm (und weder hdparm noch sowas wie sdparm geht dafür) in den standby versetzt wird, passiert es ab und zu dass sie aus dem System verschwindet.
In diesem fällen würde ich gerne die Geräteneuinitiierung einleiten indem ich einfach neustarten.
Bei der minütlichen Überprüfung sollte auf gar keinen Fall die Platte anspringen.
außer dmesg auswerten ist mir noch nix besseres einfallen. In diesem Fall funktioniert das aber leider nicht
Hat jemand zufällig eine Idee (evtl. mit Boardmitteln)?
Gruß
PS:
Ich nutze einen 2.6. Kernel.
BASH: testen ob noch was an /dev/sda hängt
hi,
mit einem original-Sarge-Kernel und einer USB-Maus funktioniert hier sowas:
Das /sys-Filesystem ist ja nicht wirklich auf der Platte und "test -d"
sollte eigentlich Bash-intern sein, also geht's vielleicht sogar.
viel Erfolg!
mit einem original-Sarge-Kernel und einer USB-Maus funktioniert hier sowas:
Code: Alles auswählen
#!/bin/bash
DEVICE="1-2" # z.B.; je nach dem, wo das Teil angeschlossen ist
if test -d /sys/bus/usb/devices/$DEVICE ; then
echo "noch da"
else
echo "verschwunden"
fi
sollte eigentlich Bash-intern sein, also geht's vielleicht sogar.
viel Erfolg!
Beware of programmers who carry screwdrivers.
Also ich hab mir das mal genauer angeschaut:cosmac hat geschrieben:hi,
mit einem original-Sarge-Kernel und einer USB-Maus funktioniert hier sowas:Das /sys-Filesystem ist ja nicht wirklich auf der Platte und "test -d"Code: Alles auswählen
#!/bin/bash DEVICE="1-2" # z.B.; je nach dem, wo das Teil angeschlossen ist if test -d /sys/bus/usb/devices/$DEVICE ; then echo "noch da" else echo "verschwunden" fi
sollte eigentlich Bash-intern sein, also geht's vielleicht sogar.
viel Erfolg!
ls /sys/bus/usb/devices/1-1/
1-1:1.0 bcdDevice manufacturer
bConfigurationValue bmAttributes maxchild
bDeviceClass bus product
bDeviceProtocol configuration serial
bDeviceSubClass devnum speed
bMaxPower driver version
bNumConfigurations idProduct
bNumInterfaces idVendor
cat /sys/bus/usb/devices/1-1/*
1 00 00 00 2mA 1 1 0000 c0 2 0641 059f LaCie 0 LaCie HardDrive USB 10000E000B247EB0 480 2.00
cat /sys/bus/usb/devices/1-2/*
1 00 00 00 500mA 1 1 0100 80 3 b113 1005 0 USB Flash Drive 060C00110EB5400 480 2.00
1-2 ist /dev/sda
1-1 ist /dev/sdb
Ich habe die einzelnen Werte beider miteinander verglichen, konnte aber leider keine eindeutige Zuweisung finden.
Sind evtl. irgendwo die Verlinkungen gespeichert, so dass ich 1-2 eindeutig z.B: sda zuordnen kann?
( Leider rotiert dies durch an- und abstöpseln auch ab und zu. )
Gruß
an der Bash lsusb eingeben ergibt:
Bus 004 Device 001: ID 0000:0000
Bus 002 Device 004: ID 045e:0084 Microsoft Corp.
Bus 002 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000
Daraus sollte das:
lsusb | awk 'match($0, "045e:0084") {print "Ist Vorhanden" } '
helfen können, wobei 045e:0084 die Nummer deines Devices sein sollte.
Bus 004 Device 001: ID 0000:0000
Bus 002 Device 004: ID 045e:0084 Microsoft Corp.
Bus 002 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000
Daraus sollte das:
lsusb | awk 'match($0, "045e:0084") {print "Ist Vorhanden" } '
helfen können, wobei 045e:0084 die Nummer deines Devices sein sollte.