Der beste Weg, um zu verhindern, dass sich das Root-System füllt, wenn ein Mount fehlschlägt?

16

Wir haben einen internen Webserver (virtualisiert, Hosting von ReviewBoard, aber nicht überaus relevant) und einen relativ konsistenten Fehlermodus, bei dem fehlgeschlagene NFS-Bereitstellungen zu einer Auffüllung führen. Die Distribution ist Ubuntu (fragen Sie nicht). Wenn eine Lösung von einer anderen Distribution abhängt, ist die Implementierung langsamer.

Sicherungen werden in / mnt / backup / ausgeführt, das auf einem NFS-Mount auf einem anderen System ausgeführt werden soll. Wenn die Bereitstellung fehlschlägt oder abbricht, werden leider Sicherungen auf dem Root-Dateisystem durchgeführt. Wie Sie sich vorstellen können, dauert es nicht lange, bis / voll ist, und dann beginnen die Dienste, fehlzuschlagen.

Eine Reihe möglicher Lösungen wurde diskutiert.

  1. Überwachen Sie / mnt / backups und stellen Sie sicher, dass es nicht root ist. Vielleicht ein Cronjob.

  2. Verwenden Sie / mnt / protected / backups und hängen Sie / protected zuerst in ein kleines Dateisystem ein, möglicherweise in eine lokale Datei, damit die Wahrscheinlichkeit, dass es fehlschlägt, sehr viel geringer ist.

  3. Chmod a-rwx / mnt / backups (der Einhängepunkt des Root-Dateisystems). Ich bin mir nicht sicher, ob das Mounten über einen geschützten Director funktioniert.

  4. Erstellen Sie im gemounteten Baum ein Verzeichnis mit dem Namen "Backups" und anschließend einen Softlink "ln - s / mnt / backup / Backups / Backups". Die Verwendung von / Backups für Backups schlägt fehl, wenn / mnt / backup nicht bereitgestellt wird, da der lokale Baum das Unterverzeichnis nicht enthält.

  5. Durchführen einer Überprüfung, ob das Verzeichnis im Sicherungsskript korrekt eingebunden ist.

Ich bin an jeglichem Feedback zu diesen Ansätzen, Vor- und Nachteilen oder zusätzlichen Techniken interessiert, die Menschen als Standardmethode zum Schutz des Root-Dateisystems vor dieser Art von Gemeinheit verwenden.

Peter
quelle

Antworten:

13

Nummer 5 - Machen Sie einen Test in Ihrem Backup-Skript, um sicherzustellen, dass das Verzeichnis eingehängt ist, bevor Sie fortfahren. Das Skript sollte fehlschlagen, wenn der Mount nicht verfügbar oder vorhanden ist. Oder stellen Sie einfach sicher, dass die Daten eingehängt sind, bevor Sie die Sicherung ausführen.

Probieren Sie den mountpointBefehl aus, der prüft, ob ein angegebenes Verzeichnis ein Mountpunkt ist:

mountpoint -q /mnt/backups || mount /mnt/backups

ewwhite
quelle
Hmm, ich schätze, ich würde hinzufügen || echo "Mount / mnt / backups fehlgeschlagen" 2> & 1 Oder vielleicht nur dort vorhanden. Trotzdem danke!!!
Peter
22

Die fehlersicherste Lösung besteht darin, den Einhängepunkt nicht beschreibbar zu machen. Dies wäre Ihre Lösung Nr. 3. Es gibt jedoch einen zusätzlichen Schritt, den Sie ausführen sollten. chattr +i /mnt/backups. Dies liegt daran, dass root auch ohne Berechtigungen weiterhin in das Verzeichnis schreiben kann. Mit chattr +i(setzt unveränderliches Flag) kann nicht einmal root darauf schreiben. Sobald der Mount gemountet ist, spielen die Berechtigungen keine Rolle mehr, da sie sich auf das Remote-Verzeichnis und nicht auf das lokale Verzeichnis beziehen.

Patrick
quelle
1
Das ist ein ziemlich netter Trick - nie daran gedacht, mit ‚chattr‘
warren
1
Ich verwende diese Technik für alle meine Einhängepunkte.
3dinfluence
1
Ich habe es mit encfseinem Fuse-Dateisystem versucht . Es gibt Fehler:fusermount: user has no write access to mountpoint
Strg-Alt-Delor
Dies ist die Lösung, die ich normalerweise verwende, und ich denke, sie sollte die akzeptierte Antwort sein.
Shodanshok
3

Was ewwhite gesagt hat. Außerdem wäre eine zusätzliche Überwachung des Zustands des Basissystems keine schlechte Idee.

So etwas wie Monit kann prüfen, wie viel Speicherplatz noch frei ist . Wenn Sie sich eingehend mit der Systemüberwachung befassen möchten, können Sie sich Nagios ansehen, aber Monit ist ein Leichtgewicht und wird die Grundlagen schaffen.

Da Sie Ubuntu verwenden, befindet sich Monit bereits in Repo. Sie können also "sudo apt-get install monit" ausführen und dann in den Konfigurationsdateien nachsehen, um Warnungen an den richtigen Ort zu senden, die richtigen Dienste zu überwachen usw Hier ist ein kurzes Tutorial .

cjc
quelle
1

Hier ist ein Einzeiler, den Sie als Cron-Job ausführen können. Dabei wird davon ausgegangen, dass sich der betreffende Mount in fstab befindet:

if mountpoint -q /mnt ; then : ; else mount /mnt ; fi
Dan
quelle
0

Für eine längerfristige Lösung: Sie sind sich nicht sicher, wie Sie dies unter Ubuntu tun sollen (ich bin RH-zentriert) oder ob es sich lohnt (wenn Sie nur eine Maschine haben), aber eine Methode, die sich seit vielen Jahren für uns bewährt hat, besteht darin, eine separate Logik zu erstellen Volumes, Dateisysteme und sogar Volume-Gruppen auf Servermaschinen. Standardmäßig erstellen wir logische LVM-Volumes für /, / tmp. / usr, / usr / local, / opt, / home, / var, Swap Space und eine separate Partition für / boot. Dieser Ansatz erschwert es Dateisystemen besonders, das System zu füllen und zu deaktivieren. Tatsächlich macht es dieser Ansatz fast unmöglich, das Dateisystem / zu füllen. Natürlich müssen Sie immer noch / tmp, / var beobachten. Wenn wir Daten speichern müssen, erstellen wir dafür eine völlig andere Volumengruppe. Dieser Ansatz hat auch andere Vorteile: Dateisysteme nach Belieben erweitern, verschieben, neue erstellen usw.

Ank
quelle
Sie können also verhindern, dass das Dateisystem voll wird, wenn ein Mount fehlschlägt, indem Sie weitere Mounts hinzufügen? Was?
Patrick