Diese Frage ist ähnlich, aber das Gegenteil von dem, was ich will. Ich möchte, dass externe USB-Laufwerke beim Booten automatisch ohne Anmeldung an Speicherorten wie bereitgestellt werden /media/<label>
.
Ich möchte nicht alle Daten in fstab eingeben müssen, zum Teil, weil es mühsam und nervig ist, aber zum größten Teil, weil ich nicht vorhersagen kann, was ich daran anschließen werde oder wie sich die Partitionen in Zukunft ändern werden.
Ich möchte, dass auf Laufwerke wie MPD zugegriffen werden kann und sie verfügbar sind, wenn ich mich mit SSH anmelde. gnome-mount
Scheint, Dinge nur einzuhängen, wenn Sie lokal in einer grafischen Gnome-Sitzung angemeldet sind.
linux
ubuntu
usb-flash-drive
external-hard-drive
mount
Endolith
quelle
quelle
/usr/local/sbin/udev-automounter.sh mount %k
sollte sein/usr/local/sbin/udev-automounter.sh %k
. Es tut uns leid.\x20
"s " konvertiert . Also ist es nicht schön, aber es wird funktionieren. udev geht nicht gut mit Labels mit Leerzeichen um, aber es gibt eine andere Option, bei der Unterstriche anstelle von\x20
's verwendet werden (so sieht es zumindest gut aus). Es sieht so aus, als müsste das Space-Handling in die Shellscripts gehen.Antworten:
vol_id
Befehls fehl .vol_id
wurde ersetzt durchblkid
. Um das Skript zu reparieren, ersetzen Sie "vol_id" durch "blkid -o udev" imudev-auto-mount.sh
Skript.Ich habe mich schon eine Weile damit beschäftigt und ich denke, ich habe eine funktionierende Lösung gefunden. Dies wurde auf einem Debian-basierten System entwickelt und getestet, daher sollte es auf Ubuntu funktionieren. Ich werde auf die Annahmen hinweisen, die es macht, damit es auch an andere Systeme angepasst werden kann.
/media/LABEL
Verzeichnis, in das das Gerät eingehängt werden soll.gksudo
Ähnliches.Ich habe dies nicht beim Systemstart getestet, aber der einzige Grund, warum ich feststellen kann, dass es möglicherweise nicht funktioniert, ist der Versuch, das USB-Laufwerk zu mounten, bevor das System zum Mounten bereit ist. Wenn dies der Fall ist, benötigen Sie wahrscheinlich eine zusätzliche Optimierung des Mount-Skripts. (Ich wende mich an ServerFault, um zu sehen, ob es Ratschläge gibt, aber nicht viel Interesse daran.)
Also weiter so.
UDEV Referenzen:
Hintergrund (UDEV? Whuzzat?)
UDEV ist das Hotplug-System des Kernels. Dies konfiguriert automatisch die richtigen Geräte und Geräte-Symlinks (z. B.
/dev/disk/by-label/<LABEL>
), sowohl beim Booten als auch für Geräte, die hinzugefügt werden, während das System ausgeführt wird.D-Bus und HAL werden zum Senden von Hardware-Ereignissen an Listener wie Desktop-Umgebungen verwendet. Wenn Sie sich bei GNOME anmelden und eine CD einlegen oder ein USB-Laufwerk anschließen, folgt dieses Ereignis dieser Kette:
Und schon wird Ihr Laufwerk montiert. In einem kopflosen System müssen wir uns jedoch nicht anmelden, um die Vorteile des automatischen Einbaus nutzen zu können.
Udev-Regeln
Da wir mit UDEV Regeln schreiben und Programme beim Einfügen von Geräten ausführen können, ist dies eine ideale Wahl. Wir werden die vorhandenen Regeln von Debian / Ubuntu nutzen, sie den
/dev/disk/by-label/<LABEL>
Symlink für uns einrichten lassen und eine weitere Regel hinzufügen, die das Gerät für uns bereitstellt.Die UDEV-Regeln werden in
/etc/udev/rules.d
(und/lib/udev/rules.d
auf Karmic) aufbewahrt und in numerischer Reihenfolge verarbeitet. Jede Datei, die nicht mit einer Nummer beginnt, wird nach den nummerierten Dateien verarbeitet. Auf meinem System befinden sich HAL-Regeln in einer Datei mit dem Namen90-hal.rules
. Ich habe meine Regeln89-local.rules
so eingefügt, dass sie verarbeitet werden, bevor sie zu HAL gelangen. In erster Linie müssen Sie sicherstellen, dass diese Regeln nach dem auftreten60-persistent-storage.rules
.local.rules
kann gut genug sein.Fügen Sie dies in Ihre neue Regeldatei ein:
Stellen Sie sicher, dass nach
\
, nur einnewline
(\n
) keine Leerzeichen stehen .Wechseln Sie
SUBSYSTEMS=="usb"
zuSUBSYSTEMS=="usb|ieee1394"
für die Firewire-Unterstützung.Wenn das Gerät immer einem bestimmten Benutzer gehören soll, fügen Sie eine
OWNER="username"
Klausel hinzu. Wenn Sie nur die Dateien eines bestimmten Benutzers benötigen, optimieren Sie stattdessen das Mount-Skript.Die Regel lesen
Dadurch wird ein auszuführendes Programm zur Liste der auszuführenden Programme des Geräts hinzugefügt. Es identifiziert USB-Partitionsgeräte anhand von
<LABEL>
und leitet diese Informationen an ein Skript weiter, das die Bereitstellung durchführt. Im Einzelnen entspricht diese Regel:ENV{ID_FS_LABEL_ENC}=="?*"
- eine Umgebungsvariable, die von einer früheren Systemregel festgelegt wurde. Existiert nicht für Nicht-Dateisysteme, deshalb suchen wir danach. Eigentlich möchten wirID_FS_LABEL
den Mount-Punkt verwenden, aber ich habe UDEV nicht davon überzeugt, ihn für mich zu entziehen. Deshalb lassen wir das Mount-Skript damit umgehen.Diese und andere Umgebungsvariablen werden von udev mit dem
vol_id
Befehl ( veraltet ) abgerufen . Es ist ein praktisches Tool, mit dem Sie schnell Details zu einer Partition anzeigen können:ACTION=="add"
- nur Spielereignisseadd
...SUBSYSTEMS=="usb"
- stimmen Sie nur mit Geräten überein, die sich am USB-Bus befinden. Wir verwendenSUBSYSTEMS
hier, weil dies mit den Eltern unseres Geräts übereinstimmt. Das Gerät, an dem wir interessiert sind, wird tatsächlich SUBSYSTEM == "scsi" sein. Durch die Zuordnung zu einem übergeordneten USB-Gerät wird vermieden, dass unser Programm den internen Laufwerken hinzugefügt wird.RUN+="..."
- Keine Übereinstimmung, sondern eine Aktion: Fügen Sie dieses Programm zur Liste der auszuführenden Programme hinzu. Wird in den Programmargumenten%k
auf den Gerätenamen erweitert (z. B.sdc1
nicht/dev/sdc1
) und$env{FOO}
ruft den Inhalt der Umgebungsvariablen FOO ab.Regel testen
Der erste Referenzlink (oben) ist ein exzellentes UDEV-Tutorial, aber etwas veraltet. Die Programme, die (
udevtest
insbesondere) zum Testen Ihrer Regeln ausgeführt werden, wurden durch dasudevadm
Dienstprogramm catch-all ersetzt .Nachdem Sie die Regel hinzugefügt haben, schließen Sie Ihr Gerät an. Nehmen Sie sich ein paar Sekunden Zeit und überprüfen Sie, welchem Gerät es zugewiesen wurde:
Wenn Ihr Wechsellaufwerk enthält
label_Baz
, befindet es sich auf dem Gerätsdc1
. Führen Sie dies aus und schauen Sie sich die Ausgabe gegen Ende an:Suchen Sie
RUN+=
in den letzten Zeilen nach dem Skriptnamen aus unserer Regel (in diesem Beispiel der dritte von unten). Sie können die Argumente sehen, die für dieses Gerät verwendet werden würden. Sie können diesen Befehl jetzt ausführen, um zu überprüfen, ob die Argumente korrekt sind. Wenn es in Ihrer Befehlszeile funktioniert, sollte es automatisch funktionieren, wenn ein Gerät eingefügt wird.Sie können UDEV-Ereignisse auch in Echtzeit überwachen: ausführen
sudo udevadm monitor
(man udevadm
Einzelheiten zu den Schaltern siehe ). Dann schließen Sie einfach ein neues Gerät an und schauen Sie sich die Ereignisse an. (Wahrscheinlich übertrieben, es sei denn, Sie interessieren sich für wirklich einfache Details ...)Regeln neu laden
Sobald Sie überprüft haben, dass die Regel richtig gelesen wird, müssen Sie UDEV anweisen, die Regeln neu zu laden, damit die neue wirksam wird. Wenden Sie eine der folgenden Methoden an (wenn die erste nicht funktioniert, sollte die zweite ... aber versuchen Sie die erste zuerst):
Lauf
sudo udevadm control --reload-rules
Lauf
sudo /etc/init.d/udev reload
neustarten
Skript! Eigentlich 2 Skripte ...
Hier ist das erste Skript. Da das von uns ausgeführte Programm schnell ausgeführt werden muss, wird das zweite Skript nur im Hintergrund ausgeführt. Setzen Sie dies in
/usr/local/sbin/udev-automounter.sh
:Hier ist das zweite Skript. Dies führt zu einer etwas stärkeren Eingabeprüfung. Setzen Sie dies in
/usr/local/sbin/udev-auto-mount.sh
. Möglicherweise möchten Sie die folgenden Mount-Optionen optimieren. Dieses Skript kann jetzt die Partition LABEL selbstständig finden. UDEV sendet nur den DEVICE-Namen.Wenn beim Hochfahren Probleme beim Mounten von Laufwerken auftreten , können Sie
sleep 60
in dieses Skript einen langen Zeitraum einfügen, damit das System Zeit hat, bis das Skript versucht, das Laufwerk zu mounten.Ich habe in den Kommentaren einen Vorschlag zur Überprüfung (Ausführen
ps
, um festzustellen, ob ein Webserver ausgeführt wird) gemacht, aber Sie sollten diesen Vorschlag für Ihr System anpassen. Ich denke, die meisten Netzwerkserver, die Sie möglicherweise verwenden, würden für diesen Zweck ausreichen - nfsd, smbd, apache usw. Das Risiko besteht natürlich darin, dass das Mount-Skript fehlschlägt, wenn der Dienst nicht ausgeführt wird Die Existenz einer bestimmten Datei wäre eine bessere Lösung.Super Bonus Cleanup Script!
Noch ein Drehbuch. Dazu müssen Sie nur das Gerät aushängen und die Mountpoint-Verzeichnisse entfernen. Es wird davon ausgegangen, dass es über Privilegien verfügt, mit denen Sie es ausführen müssen
sudo
. Dieses Skript übernimmt jetzt den vollständigen Mountpunkt in der Befehlszeile, z. B .:Setzen Sie dies in
/usr/local/sbin/udev-unmounter.sh
:quelle
Eine letzte Option, die andere im Internet vorgeschlagen haben, ist
ivman
, aber das scheint davon abzuhängenpmount
, was Sie bereits angegeben haben, funktioniert nicht.pmount
ist aufgegeben undivman
ist fast gleich.Der Ersatz für
ivman
isthalevt
und ist in Karmic verfügbar. Es ist eine Neuimplementierung vonivman
(zu lesen: "beibehalten" und "hängt nicht von pmount ab"). Das Paket ist auf Jaunty nicht verfügbar, obwohl Sie es möglicherweise selbst erstellen können, wenn Sie kein Upgrade planen.Beide Tools befinden sich über den DBus- und HAL-Layern und reagieren auf Ereignisse von diesen. Anscheinend können beide als System-Daemon oder als Mount-Manager für Benutzersitzungen (a la Gnome-VFS) ausgeführt werden. Die
/etc/defaults/{ivman,halevt}
Dateien sind für die Systemeinstellungen zuständig.Hier sind einige Anweisungen zum Optimieren
ivman
der Verwendung von/media/<LABEL>
Mountpunkten. Das geht wahrscheinlichhalevt
einfacher, aber vielleicht helfen sie Ihnen, eine Antwort zu finden.Arbeit mit HALEVT
Update : Um auch automagische CD-Mounts zu erhalten, die meine UDEV-Antwort nicht bietet, habe ich mir das genauer angesehen
halevt
. Ich habe diesen Blog-Beitrag gefunden, der mir geholfen hat, viel über den Prozess zu erklären. Ich musste mein eigeneshalevt
Paket für Debian Lenny kompilieren (zum Glück befanden sich alle Abhängigkeiten im Abschnitt Lenny-Backports). Einmal installiert, war der Prozess meistens nicht schrecklich:/etc/default/halevt
/etc/PolicyKit/PolicyKit.conf
(siehe unten; Quelle )/etc/hal/fdi/policy/preferences.fdi
(siehe unten).eject.hal
Skript aus dem obigen Blogpost auf, ändern Sie es und speichern Sie es in/usr/local/bin
./etc/halevt/halevt.xml
Wenn Sie die HAL- und HALEVT-Dämonen neu starten müssen, um Ihre neuen Konfigurationen zu überprüfen, verwenden Sie diese, um sie in der richtigen Reihenfolge abzurufen:
Schritt 1
Überprüfen Sie das
START_DAEMON=yes
in/etc/default/halevt
.Schritt 2
In
/etc/PolicyKit/PolicyKit.conf
, fügen Sie diese innerhalb der<config></config>
Sektion:Schritt 3
In
/etc/hal/fdi/policy/preferences.fdi
, fügen Sie diese innerhalb der `Abschnitt:Schritt 4
Das Skript ist gut, muss aber ausgeführt werden
/bin/bash
. Einige Systeme können tatsächlich verwenden,/bin/dash
wenn/bin/sh
aufgerufen wird. Ändern Sie daher die oberste Zeile im Skript, um sicherzustellen, dass Sie die richtige erhalten:Schritt 5
Das ist der lustige Teil. Möglicherweise stellt Ihr System
/etc/halevt/halevt.xml
bereits eine Basisversion bereit , sodass Sie diese für Ihren eigenen Gebrauch anpassen müssen. In meinem Fall hat mein System bereits grundlegende Removeables bereitgestellt, aber ich musste die Unterstützung für die CD-ROM-Bereitstellung und die Auswurftaste hinzufügen.Der Blog-Beitrag, den ich erwähnte, enthält ein gutes Beispiel für eine XML-Konfiguration , mit der Sie nach eigenen Optimierungen suchen können. Es geht hauptsächlich darum, einen Gnome-Mount-Ersatz für die
fluxbox
Umgebung des Autors einzurichten , damit sein XML-Beispiel mehr kann, als Sie möchten, aber es ist eine großartige Möglichkeit, ein Gefühl dafür zu bekommen, was Sie tun können. Es gibt auch einige gute Beispiele in/usr/share/doc/halevt/examples
.Ich musste auch rennen,
sudo sh -c "mkdir /var/halevt ; chown halevt:plugdev /var/halevt"
bevor alles funktionieren würde.Hier sind meine Ergänzungen, damit das automatische Laden von CDs / DVDs funktioniert:
Schritt 6
Sobald der System-Halevt-Daemon funktioniert, müssen Sie ihn deaktivieren, wenn Sie sich bei GNOME anmelden, und ihn erneut starten, wenn Sie sich abmelden. (Siehe meine Antwort auf diese Frage für Nicht-GDM-Anmeldemanager.) Dieses Zeug ist theoretisch, da ich es nicht verwende, aber es sollte funktionieren.
In
/etc/gdm/PreSession/Default
, fügen Sie diese das System halevt-Daemon zu stoppen:In
/etc/gdm/PostSession/Default
, fügen Sie diese das System halevt-Daemon neu zu starten:quelle
Mit der Zeit erscheinen einfachere Lösungen.
Diese Lösung basiert auf dem udevil-Softwarepaket, das für diesen Zweck geschrieben wurde und keine Änderungen an den udev-Regeln erfordert. Es ist wahrscheinlich vorzuziehen (für neue und alte Benutzer) als eine einfache Lösung.
Das
devmon
Skript von udevil macht die ganze Magie, während es nur von udev und glib abhängt. Funktioniert fast sofort, ohne dass eine Erstkonfiguration erforderlich ist.Alles, was ich auf meiner Workstation getan habe, war, devmon folgendermaßen aufzurufen
rc.local
:devmon 2>&1 >> /var/log/devmon &
Zu Ihrer Bequemlichkeit möchten Sie dies möglicherweise in ein Init-Skript einbetten, anstatt
rc.local
ein automatisiertes Toolpleaserun
zu verwenden, um es zu erstellen: https://unix.stackexchange.com/ a / 124609/42673Nachdem es ausgeführt wurde, wird der Speicher, den ich einstecke, überprüft (es wird nach Partitionen gesucht und wenn gefunden, werden die Dateisystembezeichnungen überprüft) und dann in bereitgestellt
/media/FILESYSTEM_LABEL
.Konnte sich nichts Einfacheres vorstellen, als vielleicht, dass das (in) berühmte System diese Funktionalität irgendwann in die Zukunft integrieren würde.
udevil Auf einen Blick ( github.io/udevil )
Skript: devmon ( igurublog / script-devmon )
quelle
Die Antwort von quack quixote funktioniert unter Ubuntu Lucid Lynx (10.04) nicht - es gibt keinen
/sbin/vol_id
Befehl.Anstatt ausgefallen zu sein und udev zu verwenden, fügen Sie dies in Ihre /etc/rc.local ein und machen Sie Folgendes:
quelle
Für Debian-basierte Systeme (z. B. Ubuntu usw.) gibt es das Paket usbmount , das USB-Laufwerke automatisch für Sie bereitstellt . Grundsätzlich wird ein udev-basierter Ansatz verwendet, wie bereits beschrieben. Es handelt sich lediglich um eine einfache Paketinstallation. Es scheint, dass der ursprüngliche Autor des Pakets keinen Dampf mehr hat, aber Ubuntu / Debian scheint es immer noch zu warten (ich denke, es ist nicht so komplex) - es ist also immer noch in den neuesten Releases verfügbar.
Die installierten Skripts können so konfiguriert werden (/etc/usbmount/usbmount.conf), dass die entsprechenden Mountpunkte bereitgestellt werden.
quelle
So spülen Sie die ausgezeichneten Anweisungen von quack quixote zum Entfernen aus:
Fügen Sie der zuvor erstellten udev-Regeldatei (/etc/udev/rules.d) die folgende Zeile hinzu. "
Als nächstes erstellen Sie das folgende Skript und chmod es ausführbar (/usr/local/sbin/udev-autounmounter.sh) mit dem folgenden Inhalt:
Zum Schluss das Unmount-Skript selbst (udev-auto-unmount.sh):
Bei den anderen Anweisungen wird das Verzeichnis bei udev-Ereignissen automatisch angezeigt und ausgeblendet.
quelle
if [ -n "$device_is_mounted" ]; then
sollte seinif [ -z "${MOUNTPT}" ]; then
, sollte es nicht?Vielleicht möchten Sie Pysdm ausprobieren
quelle
Sie können versuchen,
su username -c gnome-volume-manager
/etc/rc.local einzugeben. Es könnte ausreichen, einfach den Gnome-Volume-Manager laufen zu lassen.Bearbeiten: Es scheint, dass der Gnome-Volume-Manager nicht mehr Teil der Standarddistribution ist, selbst auf dem Ubuntu-Desktop.
Wenn Sie es jedoch installieren, funktioniert es möglicherweise weiterhin. Es ist einen Versuch wert. Wenn es nicht funktioniert, entfernen Sie es erneut.
Es gibt auch das
usbmount
Paket, das macht, was Sie wollen, aber möglicherweise normale Automounting stören.quelle
Meine bearbeiteten Nachträge für die auf udev basierende Lösung von quack quixote wurden abgelehnt, deshalb werde ich sie hier einfügen. Bitte beziehen Sie sich zuerst auf seinen Beitrag.
Wenn Sie möchten, dass Ihre udev-Regel funktioniert, wenn ein Gerät über das SCSI-Subsystem angeschlossen ist (das sowohl USB- als auch FireWire- und eSATA-Geräte enthält), ändern Sie zunächst die SUBSYSTEMS-Übereinstimmung in der udev-Regel in
SUBSYSTEMS=="scsi"
.Bedenken Sie jedoch, dass dies so ziemlich alles automatisch mounten wird, einschließlich interner Laufwerke, wenn Sie diese während des Systembetriebs per Hotplug verbinden, sodass es möglicherweise nicht Ihren Wünschen entspricht.
Zweitens ist hier das Skript, das ich verwende und das alle Skripte in diesem Beitrag ersetzt. Es bereinigt auch automatisch erstellte Mountpunkte in / media /, sobald das gemountete Block-Gerät entfernt wird - es sind keine manuellen Eingriffe erforderlich. Anstatt ein anderes Skript aufzurufen, um es im Hintergrund auszuführen, stellt es sich selbst in den Hintergrund, wenn es nicht von einem Terminal ausgeführt wird (z. B. wenn es über udev ausgeführt wird).
Es verwendet inotifywait, um zu warten, bis das gemountete Gerät verschwindet, und entfernt dann das von ihm erstellte Verzeichnis. Daher müssen inotify-tools auf Ihrem System installiert sein. Auf Debian basierende Distributionen (einschließlich Ubuntu)
sudo apt-get install inotify-tools
sollten ausreichen.Sie werden feststellen, dass ich Geräte ohne Synchronisierung einbinde und schreibgeschützt bin. Das liegt nur daran, dass mein Anwendungsfall in 99% der Fälle das Lesen von einem externen Laufwerk ist. Wenn ich darauf schreiben muss, bin ich trotzdem auf dem Server aktiv und kann problemlos einen
mount -o remount,rw <mountpoint>
Befehl ausgeben . Bearbeiten Sie nach Ihren Wünschen :)quelle
halevt
scheint kein aktuellesapt-get
fähiges Paket für moderne Versionen zu sein.Versuchen Sie, die Konfiguration über den Mountmanager vorzunehmen, damit Sie die Daten nicht manuell eingeben müssen.
Es sollte ein Teil des Ubuntu-Repository sein.
quelle
Wenn Sie jeweils nur ein Laufwerk aktiviert haben, können Sie dies einfach in Ihrer
/etc/fstab
Datei bearbeiten . Etwas in der Art von:Dies sollte es beim Booten einhängen und für alle mit Dauerwellen zugänglich machen. Wenn Sie mehr als ein Laufwerk haben, können Sie dies dennoch tun mit:
quelle