Umgang mit Lese-/Schreibvorgängen auf USB-Laufwerken in Skripten ohne Sudo-Berechtigungen

Umgang mit Lese-/Schreibvorgängen auf USB-Laufwerken in Skripten ohne Sudo-Berechtigungen

Ich entwickle eine Anwendung, die irgendwann auf ein USB-Laufwerk schreiben muss. Die Anwendung wird mit Nicht-Superuser-Berechtigungen ausgeführt und ich dachte, die beste Möglichkeit, auf das Laufwerk zu schreiben, wäre, es mit der Flush-Option zu mounten, sobald das Laufwerk eingesteckt wird. Auf diese Weise muss ich theoretisch keinen Umount-Vorgang mit dieser Udev-Regel durchführen:

ACTION="add", KERNEL="sd*[0-9]", SUBSYSTEMS="usb", RUN+="/bin/sh mymountscript.sh '%E{DEVNAME}'"

Das Mount-Skript versucht, den Befehl folgendermaßen aufzurufen:

mount -o --flush $1 /media/my-user/my-usb-unit

Aber ich bekommedieser Mount-Fehler:

mount: wrong fs type, bad option, bad superblock on /dev/sdb1,
       missing codepage or helper program, or other error

Das Merkwürdige daran ist, dass ich diesen Fehler nur erhalte, wenn ich versuche, es über die Udev-Regel zu mounten. Wenn ich es mymountscript.shselbst aufrufe, wird die Einheit ordnungsgemäß im Punkt gemountet.

Abgesehen von einer Lösung für dieses Problem würde ich gerne wissen, ob es riskant ist, es auf diese Weise zu tun (ich verstehe, dass es riskant ist, weil ich das Laufwerk nach dem Schreiben der Datei nicht aushänge). Wenn ich es anders mache, bräuchte ich das Anwendungsskript (das im Auftrag des Benutzers ausgeführt wird), um das Gerät selbst einhängen/aushängen zu können. Dazu müsste ich den Gerätenamen irgendwo speichern, wenn es eingefügt wird, und der Anwendung außerdem Einhängeberechtigungen erteilen.

Das Betriebssystem ist Xubuntu 16.04.

Antwort1

Meine Problemumgehung hierfür bestand darin, es folgendermaßen zu handhaben:

  1. Eine Udev-Regel für die Aktion „USB eingesteckt“.

  2. Die in der Zwischenzeit kommenden Skripte mounten/unmounten das Laufwerk selbst.

  3. Eine Udev-Regel für die Aktion „USB entfernt“.

USB wird eingesteckt

Ich führe ein Skript aus, das nur den Gerätenamen in einer Datei speichert. Ich kann jedes andere Skript an diese Regel anhängen:

ACTION=”add”, KERNEL=”sd*[0-9]*”, SUBSYSTEMS=”usb”,  RUN+=”/bin/sh my-usb-inserted.sh”,  RUN+=”/bin/sh myownscript.sh” 

Hier myownscript.shwird das Gerät mitMenge, das Standardbenutzern das Mounten/Unmounten von Wechseldatenträgern ermöglicht. Ich kann danach beliebige andere Skripte aufrufen, solange ich die Einheit in jedem davon unmounte, bevor das nächste sie verwendet.

USB wird entfernt

Hier entfernt ein einfaches Skript die von erstellte Datei my-usb-inserted.sh, sodass wir wissen, dass in den Skripten kein Flash-Gerät eingefügt ist.

ACTION=”remove”, KERNEL=”sd*[0-9]*”, SUBSYSTEMS=”usb”,  RUN+=”/bin/sh usb-removed.sh” 

Bei dieser Problemumgehung wurde nicht berücksichtigt, dass mit mehr als einem USB-Laufwerk gearbeitet werden muss.

Siehe auch:

verwandte Informationen