AW: Wie USB-Stick dauerhaft in Igel einbinden?
ein kleiner usb stick ist vermutlich nicht mals so schnell (oder langsam?) wie die compact flash also könnte es passieren dass das system ausgebremst werden würde. eigentlich unwarscheinlich weil in ein logfile immer nur kleine stücke geschrieben werden aber es gibt auch wirlich super langsame usb sticks die genau das erreichen würden deshalb bin ich mit solchen aussagen "das kann nicht passiern" eher vorsichtig
aber wie jensebub schon sagte haben sowohl usb sticks als auch compact flash / sd / ssd eine ähnliche technik aber keine unendliche lebensdauer um so mehr sie mit lese/schreib zyklen belastet werden.. normalerweise würden dann defekte speicher zellen abgeschaltet und nicht mehr genutzt werden wodurch diese medien dann immer kleiner werden aber im schlimmsten fall betrifft das "am anfang" liegende zellen die vom dateisystem wichtige informationen enthalten und dann wär das aktuell installierte system erst mal kaputt und müsste neu installiert werden..
um aber trotzdem auf die überschrift ein zu gehen:
damit usb geräten immer wieder den selben "/dev/" port beziehungsweise namen kriegen nutzt man: udev
die meisten geräte haben eine sogenannte "
iSerial " über die sie (eigentlich) eindeutig zu identifizieren sind..
bei mir sähe das zum beispiel so aus:
Code:
root@raspberrypi:~# lsusb -v|grep iSerial
...
Bus 001 Device 006: ID 0204:6025 Chipsbank Microelectronics Co., Ltd CBM2080 Flash drive controller
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0204 Chipsbank Microelectronics Co., Ltd
idProduct 0x6025 CBM2080 Flash drive controller
bcdDevice 1.00
iManufacturer 1 USB 2.0
iProduct 2 Flash Drive
iSerial 3 [COLOR=#ff0000]2315460062920201[/COLOR]
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 6 SCSI
bInterfaceProtocol 80 Bulk-Only
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
es gäbe aber auch noch andere merkmale die man für udev nutzen könnte um ein angeschlossenes usb gerät eindeutig zu identifizieren zum beispiel idVendor oder idProduct was aber vorraussetzen würde das man von diesem geräte typ nicht mehrere nutzt (wie es zum beispiel bei smartcard readern der fall wäre da die alle die selbe Vendor und Product kennung haben..)
wenn noch kein udev installiert hat muss sich das erst installieren: apt-get install udev
danach geht man wie folgt vor:
1) rules file erstellen: nano /etc/udev/rules.d/90-usb.rules
2) in die datei mit den geräte spezifischen daten die folgende zeile einfügung :
Code:
SUBSYSTEMS=="usb", ATTRS{serial}=="[COLOR=#ff0000]2315460062920201[/COLOR]", ACTION=="add", SYMLINK+="USBstick"
3) udev neu starten: /etc/init.d/udev restart
4) usb stick herraus ziehen. ein paar sekunden warten und wieder einstecken und dann prüfen ob der angegebene SYMLINK auch in /dev/ auftaucht:
Code:
root@raspberrypi:~# ls -la /dev/USB*
lrwxrwxrwx 1 root root 4 Okt 3 12:46 /dev/USBstick -> sda1
root@raspberrypi:~#
(denn udev legt nur eine verknüpfung an)
wenn das der fall ist kann das usb gerät künftig immer über diesen dev port angesprochen werden.
ACTION=="add" sorgt dafür das die regel nur zutrifft wenn das gerät neu angeschlossen wird ansonsten würde die rule auch ausgeführt werden wenn man es herraus zieht..
man kann das aber auch insofern erweitern das udev das gerät auch automatisch in ein bestimmtes verzeichniss mounten würde.
dazu gibt es mehrere möglichkeiten aber ich beschreib mal hier nur die aus meiner sicht einfachste:
dazu muss man sich ein Script file erstellen was das mounten und unmounten übernehmen würde
also zunächst das Script erstellen:
nano /bin/stick
Code:
#!/bin/bash
FROMdevice="[COLOR=#ff0000]/dev/USBstick[/COLOR]"
TOdir="[COLOR=#ff0000]/mnt/USBstick[/COLOR]"
mountOPT=""
#
[ -z "$1" ] && echo "Usage: $0 [mount|umount]" && exit 0
if [ $1 == "mount" ]; then
[ ! -d $TOdir ] && mkdir -p $TOdir
mount $mountOPT $FROMdevice $TOdir
elif [ $1 == "umount" ]; then
umount $TOdir
fi
exit 0
(die
rot markierten variablen kannst du nach belieben anpassen. wenn das laufwerk bestimmte mount options wie zb "-t vfat" benötigt dann kannst du das in mountOPT="" eintragen)
script ausführbar machen: chmod 755 /bin/stick
die udev rules datei müsste dann auch noch erweitert werden: nano /etc/udev/rules.d/90-usb.rules
Code:
SUBSYSTEMS=="usb", ATTRS{serial}=="[COLOR=#ff0000]2315460062920201[/COLOR]", ACTION=="add", SYMLINK+="USBstick", RUN+="/bin/stick mount"
SUBSYSTEMS=="usb", ATTRS{serial}=="[COLOR=#ff0000]2315460062920201[/COLOR]", ACTION=="remove", RUN+="/bin/stick umount"
wir brauchen 2 rule einträge da das laufwerk sonst nicht umounted wird und es dann jede minute haufenweise fehlermeldungen im /var/log/syslog geben würde..
problematisch wird das allerdings wenn das laufwerk mehrere partitionen hat die alle gemounted werden sollen dann müssten die rules und die scripts anders aussehen aber da gehe ich erst drauf ein wenn das hier wirklich jemand wissen will..
/edit: ein weiteres beispiel (funktioniert auch mit mehreren partitionen) wurde zwischenzeitlich hier beschrieben:
Talk USB Stick Platten automatisch mit iSerial einbinden