Ich führe Debian Squeeze auf einem Plug-Computer aus (also nur SSH, keine GUI) und versuche es so zu bekommen, dass ein eingesteckter USB-Stick automatisch gemountet wird.
Was ich getan habe, ist eine Installation, autofs
die, wie ich erfahre, die automatische Montage übernimmt, vorausgesetzt, sie weiß, wo sich das Gerät befindet /dev
.
Das Problem ist, dass der USB-Stick nicht immer denselben Gerätenamen hat. Manchmal ist es /dev/sdc1
manchmal /dev/sdd1
usw.
udev
Um dem abzuhelfen, muss ich sicherstellen, dass der USB-Stick immer den gleichen Namen hat.
Ich habe folgende Informationen erhalten udevadm
:
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 '/block/sdd/sdd1':
KERNEL=="sdd1"
SUBSYSTEM=="block"
DRIVER==""
ATTR{partition}=="1"
ATTR{start}=="63"
ATTR{size}=="129339"
ATTR{ro}=="0"
ATTR{alignment_offset}=="0"
ATTR{discard_alignment}=="0"
ATTR{stat}==" 31 244 275 190 0 0 0 0 0 190 190"
ATTR{inflight}==" 0 0"
looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0/host8/target8:0:0/8:0:0:0/block/sdd':
KERNELS=="sdd"
SUBSYSTEMS=="block"
DRIVERS==""
ATTRS{range}=="16"
ATTRS{ext_range}=="256"
ATTRS{removable}=="1"
ATTRS{ro}=="0"
ATTRS{size}=="129439"
ATTRS{alignment_offset}=="0"
ATTRS{discard_alignment}=="0"
ATTRS{capability}=="51"
ATTRS{stat}==" 56 727 783 520 0 0 0 0 0 520 520"
ATTRS{inflight}==" 0 0"
ATTRS{events}=="media_change"
ATTRS{events_async}==""
ATTRS{events_poll_msecs}=="-1"
looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0/host8/target8:0:0/8:0:0:0':
KERNELS=="8:0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS=="sd"
ATTRS{device_blocked}=="0"
ATTRS{type}=="0"
ATTRS{scsi_level}=="3"
ATTRS{vendor}==" "
ATTRS{model}=="Flash Disk "
ATTRS{rev}=="2.00"
ATTRS{state}=="running"
ATTRS{timeout}=="30"
ATTRS{iocounterbits}=="32"
ATTRS{iorequest_cnt}=="0x90"
ATTRS{iodone_cnt}=="0x90"
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/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0/host8/target8:0:0':
KERNELS=="target8:0:0"
SUBSYSTEMS=="scsi"
DRIVERS==""
looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0/host8':
KERNELS=="host8"
SUBSYSTEMS=="scsi"
DRIVERS==""
looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1/1-1.2/1-1.2:1.0':
KERNELS=="1-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:v1976p6025d0100dc00dsc00dp00ic08isc06ip50"
ATTRS{supports_autosuspend}=="1"
looking at parent device '/devices/platform/orion-ehci.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}=="80"
ATTRS{bMaxPower}=="100mA"
ATTRS{urbnum}=="383"
ATTRS{idVendor}=="1976"
ATTRS{idProduct}=="6025"
ATTRS{bcdDevice}=="0100"
ATTRS{bDeviceClass}=="00"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="00"
ATTRS{bNumConfigurations}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{speed}=="12"
ATTRS{busnum}=="1"
ATTRS{devnum}=="11"
ATTRS{devpath}=="1.2"
ATTRS{version}==" 1.10"
ATTRS{maxchild}=="0"
ATTRS{quirks}=="0x0"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{authorized}=="1"
looking at parent device '/devices/platform/orion-ehci.0/usb1/1-1':
KERNELS=="1-1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{configuration}==""
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bmAttributes}=="e0"
ATTRS{bMaxPower}=="100mA"
ATTRS{urbnum}=="197"
ATTRS{idVendor}=="1a40"
ATTRS{idProduct}=="0101"
ATTRS{bcdDevice}=="0111"
ATTRS{bDeviceClass}=="09"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="01"
ATTRS{bNumConfigurations}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{speed}=="480"
ATTRS{busnum}=="1"
ATTRS{devnum}=="2"
ATTRS{devpath}=="1"
ATTRS{version}==" 2.00"
ATTRS{maxchild}=="4"
ATTRS{quirks}=="0x0"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{authorized}=="1"
ATTRS{product}=="USB 2.0 Hub"
looking at parent device '/devices/platform/orion-ehci.0/usb1':
KERNELS=="usb1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{configuration}==""
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bmAttributes}=="e0"
ATTRS{bMaxPower}==" 0mA"
ATTRS{urbnum}=="24"
ATTRS{idVendor}=="1d6b"
ATTRS{idProduct}=="0002"
ATTRS{bcdDevice}=="0206"
ATTRS{bDeviceClass}=="09"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="01"
ATTRS{bNumConfigurations}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{speed}=="480"
ATTRS{busnum}=="1"
ATTRS{devnum}=="1"
ATTRS{devpath}=="0"
ATTRS{version}==" 2.00"
ATTRS{maxchild}=="1"
ATTRS{quirks}=="0x0"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{authorized}=="1"
ATTRS{manufacturer}=="Linux 2.6.38.8 ehci_hcd"
ATTRS{product}=="Marvell Orion EHCI"
ATTRS{serial}=="orion-ehci.0"
ATTRS{authorized_default}=="1"
looking at parent device '/devices/platform/orion-ehci.0':
KERNELS=="orion-ehci.0"
SUBSYSTEMS=="platform"
DRIVERS=="orion-ehci"
ATTRS{modalias}=="platform:orion-ehci"
looking at parent device '/devices/platform':
KERNELS=="platform"
SUBSYSTEMS==""
DRIVERS==""
Ich habe versucht, udev
Regeln zu schreiben , um den USB-Stick zu zwingen, den Namen zu übernehmen, /dev/usbstick
aber bisher war ich nicht erfolgreich.
Kann mir jemand helfen, welche Regel ich in meiner Regeldatei angeben muss, damit dieser USB-Stick immer den gleichen Namen erhält?
- Oder gibt es eine viel einfachere Möglichkeit, den fehlenden USB-Stick automatisch zu montieren?
AKTUALISIEREN
OK, also habe ich einige Fortschritte gemacht. Ich habe die folgende Regel hinzugefügt:
SUBSYSTEMS=="scsi", ATTRS{model}=="Flash Disk ", DRIVERS=="sd", NAME="usbstick-%k" RUN+="mkdir /mnt/usbstick-%k; mount /dev/usbstick-%k /mnt/usbstick-%k"
Ich weiß, dass dies noch einige Arbeit in Bezug auf das Hinzufügen / Entfernen erfordert, aber es ist vorerst nur ein grundlegender Test.
Der Effekt davon ist , dass ich jetzt drei neue Geräteknoten bekommen verwalten /dev
, nämlich /dev/usbstick-sdc
, /dev/usbstick-sdc1
und usbstick-sg2
.
Ich habe jedoch festgestellt, dass der Code in diesem RUN
Abschnitt nur einmal ausgeführt wird und nur ein Verzeichnis erstellt mnt/usbstick-sdc
. Ich habe auch festgestellt, dass das Verzeichnis immer leer ist, so dass eindeutig immer noch etwas schief geht! (obwohl ich Fortschritte mache).
/dev/sdc1
seinsdd1
? Und Sie könnenblkid
das Laufwerk eindeutig identifizieren (nun ja , tatsächlich die Partition; es ändert sich, wenn Sie neu formatieren).udev
Regel verwenden sollte, um Geräteknoten für jede Partition zu erstellen, aber ich bin mir nicht sicher, für welche Ebene derudevadm
Ausgabe Regeln erstellt werden sollen!ACTION==
, einerKERNEL==
und einerATTRS{something}==
(es ist völlig machbar - das ist, was ich benutze). Erwägen Sie außerdem, ein einzelnes Skript auszuführen, das aus der Befehlskette in stammtRUN+=
.KERNEL=="sd??", NAME="%k", RUN+="mkdir /mnt/usbstick-%k; mount /dev/usbstick-%k /mnt/usbstick-%k"
- aber nein, das funktioniert natürlich auch nicht. Ich bin jetzt zunehmend frustriert, nachdem ich fast den ganzen Tag damit verbracht habe, herauszufinden, wie man einen USB-Stick bekommt, der angeschlossen ist, um sich selbst zu montieren. Sollte es wirklich so schwierig sein? Die Ausgabe vonudevadm test /sys/block/sdd
ist natürlich praktisch unlesbar, daher kann ich nicht wissen, wo ich falsch liege. Kann mich jemand in die richtige Richtung weisen?Antworten:
Ich dachte, es sollte einen viel einfacheren Weg geben, um solch ein häufiges Problem anzugehen, und das gibt es auch. Folgendes habe ich auf meinem Wheezy / Sid-Server versucht:
USB-Stick einstecken, fertig! Mein Stick ist jetzt über zugänglich
/media/usb
.Übrigens, usbmount hat keine Manpage, bitte lesen Sie
/usr/share/doc/usbmount/README.gz
stattdessen. Es scheint, dass usbmount Ihren Stick standardmäßig mit der Synchronisierungsoption montiert. Es ist möglicherweise viel besser für Ihren Stick, ihn asynchron zu mounten und auszuführensync
oderumount
bevor Sie ihn ausstecken. Das ist konfigurierbar.quelle
pumount
usbmount
Achten SieBeachten Sie, dass Sie nicht nur einen einzelnen Geräteknoten haben können, um ein mögliches Pendrive darzustellen. Was ist, wenn Sie zwei davon anschließen? Oder wenn der Pendrive mehr als eine Partition hat?
Im Allgemeinen verwenden Sie zum Erstellen eines benutzerdefinierten Geräteknotens Folgendes
SYMLINK+=
: grep in den Regeln danach, um zu sehen, wie es verwendet wird :grep SYMLINK /etc/udev/rules.d/*
. Wie bei allen von udev ausgelösten Befehlen können Sie einige sinnvolle Variablen verwenden, die in beschrieben sindman udev
. Möglicherweise stellen Sie fest, dass Sie dem Gerät keinen benutzerdefinierten Namen geben müssen, da Sie den Namen (über die%k
Variable) einem Skript zuordnen können.Schauen Sie sich für die Auto-Mount-Lösung UAM an , das ich in der Antwort auf diese Frage ein wenig beschrieben habe .
quelle
udev
Regeln mit zugehörigen Skripten. Sie können sich die Regeln ansehen und sie einfach an Ihre Bedürfnisse anpassen.udevadm
und mir sagen, auf welches Gerät ich mit meiner Regel eigentlich zielen sollte? Die verschiedenen Beispiele, die ich online gesehen habe, scheinen alle viel kürzere Bäume zu beinhalten, und jedes Beispiel scheint auf eine andere Geräteebene abzuzielen, ohne zu erklären, auf welche und warum.Hier ist, wie ich es kürzlich gemacht habe, und ich bin jetzt ziemlich zufrieden mit diesem Ansatz. Dies ist für Ubuntu 12.04 + Gentoo, aber ich denke, jede Distribution, die die Installation von udev und autofs ermöglicht, sollte funktionieren.
Voraussetzungen: Sie müssen udev + autofs installiert haben.
Schritt 1)
Erstellen Sie die folgende Datei "/etc/udev/rules.d/90-usbsd-auto.rules" (natürlich können Sie einen beliebigen Namen verwenden, solange dieser mit ".rules" endet). ::
Was dies bewirkt: Es werden zwei Symlinks erstellt, einer für die USB-Speichergerätepartition unter "/ dev / usbdisks / <...>".
Der zweite Symlink wird von "/ media / usb / <...>" zu "/ media / autousb / <...>" verlinkt. Dies erfolgt zur Unterstützung von Automountern (siehe Schritt 2).
Um sicherzustellen, dass udev diese Regeln liest, verwenden Sie
Hinweis: Gleicher Name für denselben USB-Stick: Möglich, aber möglicherweise gefährlich: Sie können beispielsweise "$ env {ID_FS_LABEL_ENC}" anstelle von "% k" in den obigen UDEV-Regeln verwenden. Dies verwendet das Volume-Label, um / media / usb / <...> zu erstellen. Was passiert jedoch, wenn Sie zwei USB-Sticks anschließen und beide dasselbe Volume-Label verwenden ...
Mit dieser udev-Regeldatei wird alles so eingerichtet, dass die USB-Speichergerätepartition automatisch bereitgestellt wird. Beachten Sie jedoch, dass das Gerät derzeit NICHT (absichtlich) automatisch bereitgestellt wird. Sobald Sie es verwenden, wird es automatisch bereitgestellt
Schritt 2)
Richten Sie autofs auf automount / media / autousb / <...> ein: Ich habe meiner Datei "/etc/auto.master" (für Ubuntu 12.04) die folgende Zeile hinzugefügt:
Dies bedeutet, dass AutoFS das Gerät nach 60 Sekunden Inaktivität deaktiviert. Je nach Geschmack möchten Sie möglicherweise weniger oder mehr verwenden.
Für Gentoo müssen Sie "/etc/autofs/auto.master" ändern, damit die Verwendung sinnvoll ist
Jetzt habe ich "auto.usb" mit folgendem Inhalt erstellt:
Diese auto.usb muss ausführbar sein, damit autofs dies als (Bash-) Skript verwendet. So zum Beispiel
Was bewirkt das: Dieses Skript teilt AutoFS (/ usr / sbin / automount) mit, wie die USB-Speichergerätepartition gemountet werden soll.
Das Skript verwendet zuerst "/ sbin / blkid", um herauszufinden, welche Art von Dateisystem sich auf der Partition befindet.
Das Skript bietet dann abhängig von der Gerätepartition die richtigen Mount-Optionen.
Hinweis: Ich habe Beispielcode für die Dateisysteme "vfat" (wahrscheinlich am häufigsten für USB-Sticks), "ntfs" und "ext4" eingefügt. Natürlich ist es ziemlich einfach, dies zu erweitern, um mehr Dateisysteme zu unterstützen.
Schritt 3)
Optional ... Um Ihre USB-Sticks (oder Partitionen auf Ihrem USB-Stick) "auszuwerfen" == zu entfernen, erstellen Sie ein Skript unter / sbin / usbeject:
Mit diesem Skript können Sie "sudo usbeject" verwenden, um die Bereitstellung aller gemounteten USB-Gerätepartitionen aufzuheben (indem Sie automount anweisen, die Bereitstellung aufzuheben).
Natürlich können Sie einfach sicherstellen, dass die Partition nirgendwo verwendet wird. Der Automounter hebt dann die Partition nach dem 60-Sekunden-Timeout auf ...
Der eigentliche Trick besteht darin, Symlinks von "/ media / usb" zu "/ media / autousb" zu verwenden:
quelle
Es tut mir leid, meine eigene Frage zu beantworten, und ich danke rozcietrzewiacz für ihren Beitrag, aber ich habe es schließlich geschafft, nach stundenlangem Online-Lesen einige wichtige Fortschritte mit der folgenden Regel zu erzielen :
SUBSYSTEMS=="scsi", KERNEL=="sd[a-h]1", SYMLINK+="removable", RUN+="/bin/mount /dev/removable /path/to/mount"
Dadurch wird die erste Partition eines SCSI-Geräts bereitgestellt. Ich denke, die nächste Frage wird sein, wie mehrere Partitionen bereitgestellt werden, aber das ist ein weiteres Problem für einen anderen Tag.
quelle
removable
Attribut, auf das Sie testen sollten, und nichtblock
aufscsi
.Ich habe festgestellt, dass die beste Antwort tatsächlich veraltet ist, da sie nicht gepflegt wird und nicht auf / von Jessie funktioniert (siehe Kommentar von malat).
Für mich (auf Jessie) hat die Lösung in diesem Blog wie ein Zauber gewirkt.
Dank an "ddumont", aber Veröffentlichung eines Überblicks über seinen Blog / Antwort hier, um mit möglichen Linkfäule in der Zukunft fertig zu werden.
Fügen Sie die folgende Zeile hinzu
/etc/fstab
Sie können dies mit Nano tun:
Erläuterung:
/dev/sr0
ist die Gerätedatei. Sie können auch einen der von udev in / dev / disk / by-id eingerichteten symbolischen Links verwenden. Sie müssen dies entsprechend Ihrer Gerätedatei ändern (sudo fdisk -l
um Geräte aufzulisten)./media/bluray
ist der Einhängepunkt. Sie können einen anderen Einhängepunkt auswählennofail
ist erforderlich, um eine Fehlermeldung beim Booten ohne Disc im optischen Laufwerk zu vermeidenx-systemd.automount
ist die Option, systemd so zu konfigurieren, dass die eingelegte Disc automatisch gemountet wirdGeben Sie noauto nicht an: Dies würde verhindern, dass systemd automatisch eine Disc einbindet, was den Zweck zunichte macht.
Prüfung
Führen Sie den Befehl
journalctl -x -f
in einem Terminal aus, um zu überprüfen, was mit systemd los istLaden Sie die Systemkonfiguration mit neu
sudo systemctl daemon-reload
.Legen Sie eine Disc in Ihr optisches Laufwerk ein
Dann sollte journalctl etwas zeigen wie:
Des Weiteren
Um NTFS-Laufwerke erfolgreich zu mounten, musste ich ntfs-3g (alte ntfsprogs) installieren.
Ich musste hfsprogs nicht installieren, damit ein OSX-formatierter USB funktioniert, aber Sie sollten es selbst überprüfen.
quelle