Ich habe ein Backup-Skript in Python geschrieben, das das Zielverzeichnis erstellt, bevor das Quellverzeichnis in dieses Verzeichnis kopiert wird. Ich habe es so konfiguriert, dass es /external-backup
als Ziel verwendet wird. Dort mounte ich eine externe Festplatte. Ich habe das Skript nur ausgeführt, ohne dass die Festplatte eingeschaltet (oder gemountet) war, und festgestellt, dass es wie gewohnt funktioniert, obwohl ein Backup auf der internen Festplatte erstellt wurde, auf der bei weitem nicht genügend Speicherplatz vorhanden ist, um sich selbst zu sichern.
Meine Frage lautet: Wie kann ich überprüfen, ob das Volume an der richtigen Stelle bereitgestellt ist, bevor ich darauf schreibe? Wenn ich feststellen kann, dass /external-backup
das nicht gemountet ist, kann ich das Schreiben verhindern.
Die Bonusfrage ist, warum dies erlaubt war, wenn das Betriebssystem weiß, dass das Verzeichnis auf einem anderen Gerät gespeichert werden soll, und was mit den Daten (auf der internen Festplatte) passieren würde, sollte ich dieses Gerät (die externe Festplatte) später mounten? Es ist klar, dass es nicht zwei Kopien auf verschiedenen Geräten auf demselben Pfad geben kann!
Danke im Voraus!
/external-backup
sich nicht auf einem externen Gerät, sondern auf dem übergeordneten Dateisystem. Das System weiß nur, was esmount
sagt, es hat keine Ahnung, was da sein soll. Ein "Einhängepunkt" in einem Unix-Dateisystem ist nichts Besonderes. Es ist nur ein reguläres Verzeichnis.Um eine endgültige Antwort auf etwas zu erhalten, das nur der Kernel sicher kennt, fragen Sie den Kernel:
Diese Datei kann mit beliebigen Tools gelesen / analysiert werden, als wäre es eine normale Datei. Einschließlich Python. Quick-n-Dirty-Beispiel:
quelle
Der einfachste Weg, dies zu überprüfen, besteht darin,
mount
via aufzurufensubprocess
und zu prüfen, ob es dort angezeigt wird. Verwenden Sie für zusätzliche Gutschriftenos.readlink()
den Inhalt von,/dev/disk/by-*
um herauszufinden, um welches Gerät es sich handelt.quelle
mount
bestenfalls schlampig definiert ist. Was bedeutet dannmount
ausgegeben , wenn ich angebracht habe/dev/evil device on tour
an/directory on which I mount devices
? Das Parsen der Ausgabe kann in solchen Fällen unzuverlässig sein ...Bonusantwort. Wenn das externe Gerät nicht gemountet ist, werden die Daten im Pfad in die Root-Partition geschrieben
/external-backup
. Wenn ein externes Gerät gemountet ist, sind die Daten auf der Root-Partition noch vorhanden, aber nicht erreichbar, da sie/external-backup
jetzt auf ein externes Gerät verweisen.quelle
Alte Frage, aber ich dachte, ich würde meine Lösung (basierend auf der Antwort von Dennis Williamson und Ignacio Vazquez-Abrams ) trotzdem beitragen. Da ich es in einer Nicht-Linux-Umgebung verwende, um zu überprüfen, ob Remote-Verzeichnisse bereitgestellt werden, können / proc und mtab nicht verwendet werden und es wurden keine zusätzlichen Überprüfungen implementiert:
Verbesserungen willkommen!
quelle
Die Datei / etc / mtab gibt an, was aktuell gemountet ist. Es gibt einen
getmntent
Anruf, aber ich glaube nicht, dass er in dasos
Modul exportiert wird. Das schnell und dreckig? Öffnen Sie / etc / mtab und teilen Sie. Stellen Sie sicher, dass Ihr Gerät in Spalte 0 vorhanden ist und der Ziel-Mount-Punkt in Spalte 1 korrekt ist.quelle