Haken Sie sich in das Linux Mount / Umount-Ereignis ein

9

Gibt es eine Möglichkeit, Post-Mount- und Pre-Umount-Skripte unter Linux bereitzustellen?
Ich versuche, einige Skripte auf Speichermedien zu erstellen, wenn sie gemountet sind und bevor sie bereitgestellt werden (z. B. zum Synchronisieren).

Jede Hilfe geschätzt.

Jörg Haubrichs
quelle
Wie wird das Dateisystem gemountet? Dinge werden nicht automatisch gemountet, vermutlich haben Sie ein Programm / Tool, das die Mount für Sie ausführt. Sie müssen feststellen, was das ist, und es ersetzen oder reparieren.
Zoredache
In meinem Fall verwende ich normalerweise das KDE-Subsystem (vermutlich Dolphin, weiß nicht, welche Komponente für den eigentlichen Mount-Befehl verantwortlich ist)
Jörg Haubrichs
1
Ich schrieb über den Umgang mit Automounts mit uDev oder mit HALevt als Antwort auf eine andere Frage. Dies wäre ein Ersatz für das KDE- oder GVFS-Subsystem, aber das Verfahren könnte Ihnen einige Ideen geben, wo Sie suchen müssen. Es hört sich so an, als ob Sie auf die Dbus-Mounts zugreifen möchten (Desktop / Userspace statt Kernel-Ebene).
Quacksalber Quijote

Antworten:

2

Wenn Sie versuchen, dies für Benutzer zu tun, die den Befehl /sbin/mountund aufrufen /sbin/umount, müssen Sie lediglich ein Wrapper-Programm für beide erstellen und das, was Sie möchten, in diese Wrapper-Programme programmieren.

Ein Wrapper-Programm, das /sbin/mountdas Wrapper-Programm ersetzt, das das Real aufruft /sbin/mount(umbenannt in so etwas wie /sbin/mount-realoder /sbin/umount-real). Um zu verhindern, dass jemand das echte Programm aufruft, verwenden Sie Gruppenberechtigungen, um es einzuschränken, und setzen Sie das SGID-Bit in den Wrapper-Programmen.

Wenn Sie den mount(2)Bibliotheksaufruf beheben möchten, ist dies ein Aufwand und wahrscheinlich schwierig und wahrscheinlich nicht ratsam, da dies Probleme bei der Verarbeitung interner Systeme verursachen kann, insbesondere beim Starten und Herunterfahren.

Selbst mit einem Wrapper-Programm müssten Sie es wahrscheinlich gründlich testen, um Systemstörungen zu vermeiden, und entsprechende Anpassungen vornehmen.

mdpc
quelle
Sehr schlechter Rat und ein Wartungshorror, wenn mehrere Programme dies tun würden. Beginnen Sie nicht so.
Lothar
0

Sie können wahrscheinlich den Inotify- Kernel-Hook verwenden, obwohl es sehr schwierig sein kann, ein Pre-Unmount-Ereignis abzufangen, da ich nicht sicher bin, ob ein Inotify-Ereignis gesendet wird, bevor das Verzeichnis umountet wird.

d34dh0r53
quelle
2
Inotify teilt Ihnen mit, dass ein Verzeichnis erstellt wurde (z. B. unter /mediaoder /mnt), jedoch nicht, wenn ein Dateisystem in diesem Verzeichnis bereitgestellt wurde.
Craig McQueen
0

Die einfachste Lösung, die wahrscheinlich für immer funktionieren wird, besteht darin, das /etc/mtaboder abzufragen /proc/mounts. Sobald eine Änderung an dieser Datei vorgenommen wurde, bedeutet dies, dass entweder etwas gemountet oder nicht gemountet wurde. Dann müssen Sie dort nach dem gewünschten Gerät suchen.

Udev ist nicht die beste Lösung, da es Ihnen nur sagt, ob ein Gerät angeschlossen ist. Es wird nicht angezeigt, ob das Gerät tatsächlich bereitgestellt wurde oder nicht. Dies mag manchmal funktionieren, aber es ist eine hackige Lösung, die irgendwann kaputt geht und Sie werden sich die Haare ausreißen.

Pithikos
quelle
"hacky" ist normalerweise für die meisten Situationen gut genug. Die reale Welt wird von "hackigen" Lösungen betrieben. Wenn Sie das nicht wissen, haben Sie keine reale Erfahrung mit Computersystemen. Bitte speichern Sie Ihre Meinung für sich und halten Sie sich an die Fakten. Vielen Dank.
Natxo Asenjo
1
@natxoasenjo deshalb gibt es gute und schlechte Entwickler.
Pithikos
Bitte kommen Sie zurück, wenn Sie Erfahrungen in der realen Welt gesammelt haben. Was Sie vorschlagen, ist, ein Skript / Programm zu schreiben, um Dateien abzufragen, und Sie denken, dass dies eine bessere Idee ist, als eine gut getestete API als udev zu verwenden. Wer ist der schlechte Entwickler? ;-)
Natxo Asenjo
Übrigens macht das Schreiben von udev-Regeln Sie nicht zum Entwickler, höchstens zum Systemadministrator Ihres Computers.
Natxo Asenjo
1
@natxoasenjo Nun, wenn Sie nicht sehen, dass die "Real World" -Programme aufgrund von Hackish-Lösungen ständig kaputt gehen, sind Sie entweder blind oder haben keine "Real World-Erfahrung". Udev funktioniert einwandfrei, hat aber nichts mit dem Ein- und Aushängen zu tun. Und bitte hören Sie auf, daraus einen Forenthread darüber zu machen, wer ein Programmierer ist. Hilft niemandem.
Pithikos
0

Sie könnten eine udev-Regel schreiben, um das zu tun. Ich habe gebrauchte so etwas wie dies für die automatischen Sachen auf ein USB - Laufwerk sichern. Lustige Sachen.

natxo asenjo
quelle
1
udev scheint jedoch kein Ereignis für mount / unmount zu haben. Es wird nur ausgelöst, wenn Sie ein Gerät verbinden / trennen. Und dein Link funktioniert nicht ..
Pithikos
das wurde vor 4 Jahren beantwortet. Ich bin nicht verantwortlich für diese Seite. Aber Sie könnten einen Blick auf archive.org werfen ... ja, es ist immer noch da und es wird als Übung für den Leser hinterlassen. In Bezug auf Ihren Kommentar zu udev können Sie mit udev Regeln schreiben und Aktionen ausführen, wenn diese übereinstimmen. Es ist alles was du brauchst.
Natxo Asenjo
2
Es geht darum, anderen Menschen zu helfen, über das Thema zu stolpern. Es geht nicht um Punkte oder andere Ego-Boosts. Selbst wenn ein Benutzer all diese Probleme hat, ist die Lösung dort veraltet. Sie verschwenden also die Zeit der Leute ohne Nutzen (mit Ausnahme der 1-2 Up-Votes, die Sie haben).
Pithikos
2
@natxoasenjo die anderen Benutzer sind korrekt, und genau aus diesem Grund empfehlen wir Antworten, genügend Informationen aus verknüpften Ressourcen zu zitieren oder zu paraphrasieren, damit die Antwort für sich allein steht, wenn die Links ausfallen. Eine gute Antwort hier hätte tatsächlich ein Beispiel dafür gezeigt, wie eine udev-Regel erstellt wird, um ein Skript vor / nach dem Mounten / Mounten auszuführen.
nhinkle
1
@natxoasenjo Ich habe den Beitrag besucht, weil Ihr Kommentar von einem nicht verwandten Benutzer als unhöflich oder unhöflich gekennzeichnet wurde. Stack Exchange hat bestimmte Erwartungen an Antworten. Eine davon ist, dass sie mehr als einen Link zu einer externen Quelle enthalten müssen. Ihre Antwort erfüllt diese Anforderung nicht. Sie haben eine Meinung darüber, was "vollkommen in Ordnung" ist, was nicht den Erwartungen von Stack Exchange für eine gute Antwort entspricht. Bitte nehmen Sie sich etwas Zeit, um zu lesen, wie man antwortet .
nhinkle