BASH: testen ob noch was an /dev/sda hängt

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
K.I.T.T.
Beiträge: 104
Registriert: 14.11.2005 11:33:38

BASH: testen ob noch was an /dev/sda hängt

Beitrag von K.I.T.T. » 05.03.2006 00:48:16

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.

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Beitrag von cosmac » 05.03.2006 02:31:43

hi,

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
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!
Beware of programmers who carry screwdrivers.

DeletedUserReAsG

Beitrag von DeletedUserReAsG » 05.03.2006 03:32:38

Ein anderer, einfacher Ansatz wäre, die lsusb-Ausgabe auf den Identifikationsstring des Controllers zu prüfen.

cu

K.I.T.T.
Beiträge: 104
Registriert: 14.11.2005 11:33:38

Beitrag von K.I.T.T. » 05.03.2006 10:49:44

cosmac hat geschrieben:hi,

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
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!
Also ich hab mir das mal genauer angeschaut:

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ß

maxzwei
Beiträge: 3
Registriert: 01.03.2006 08:59:03

Beitrag von maxzwei » 14.03.2006 13:29:29

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.

Antworten