Finden Sie heraus, warum ich die Festplattenquote überschreite

7

Ich lutsche an der Systemadministration. Wenn ich also etwas Grundlegendes falsch mache, lass es mich wissen.

Hier ist etwas, das mich verrückt macht. Bei der Arbeit haben wir einen großen NFS-Server, der alle Mitarbeiter unseres Unternehmens bedient. Jeder hat eine bestimmte Anzahl von GBs, auf die er schreiben darf. Ich erhalte häufig Fehler "Kontingent überschritten", weil ich einige Programme ausführe, die viele temporäre Dateien generieren und diese dann löschen, aber bevor sie gelöscht werden können, erreichen sie das Kontingent.

Nachdem ich mit unseren Systemadministratoren gesprochen hatte, stellte ich fest, dass mein Kontingent bereits weit über das hinaus erhöht wurde, was ich für diese Tests benötige, aber es scheint, dass ich dieses Kontingent an anderen Orten als in meinem privaten Ordner ausgeben werde. Der Systemadministrator erklärte mir, dass jede Datei auf dem NFS-Server, die meinen Benutzernamen als Eigentümer hat, auf mein Kontingent angerechnet wird.

Ich wollte eine Liste dieser Dateien erhalten, damit ich viele Dateien löschen kann, die ich nicht mehr benötige. Aber er sagte mir, dass der einzige Weg darin besteht, das gesamte Dateisystem des gesamten Unternehmens zu durchsuchen und die Home-Ordner aller Benutzer zu durchsuchen. dh ein zeitaufwändiger Prozess. Er macht gerade diese Suche.

Was für mich seltsam klingt, ist Folgendes: Wenn Linux mir den Fehler "Kontingent überschritten" gibt, scheint es sofort wissen zu können, dass ich mein Kontingent überschreite. Kein zeitaufwändiger Prozess. Wie kommt es also, dass ich die Liste der Dateien, die auf mein Kontingent angerechnet werden, nicht abrufen kann, ohne lange zu suchen?

Ram Rachum
quelle

Antworten:

9

Ich kann mir zwei Dinge vorstellen, die Ihre Quotenprobleme verursachen könnten.

Zunächst sollten Sie wissen, dass Kontingente implementiert werden, indem Sie eine winzige Datenbank im Dateisystem erstellen, die jedes Mal aktualisiert wird, wenn eine Datei erstellt, geändert oder gelöscht wird. (Tatsächlich gibt es zwei davon, eine für Benutzerkontingente und eine für Gruppenkontingente.) Beim ersten Einschalten der Kontingente wurde diese Datenbank initialisiert, indem die Verwendung jeder Datei im Dateisystem überprüft und die Ergebnisse pro Benutzer und / oder pro aufgezeichnet wurden Gruppe in diesen Dateien. Da sie vom Dateisystemtreiber bei jeder Aktivität auf dem neuesten Stand gehalten werden, kann die aktuelle Kontingentnutzung eines Benutzers schnell nachgeschlagen werden.

Es gibt ein Problem. Die Kontingentdatenbank kann beschädigt werden, wenn das Dateisystem nicht ordnungsgemäß bereitgestellt wird, z. B. wenn das Gerät ausgeschaltet ist. In diesem Fall sollte der Administrator ausgeführt werdenquotacheck , um die Datenbank beim Neustart des Systems zu überprüfen und neu zu erstellen. Dies ist jedoch möglicherweise nicht geschehen. Oder kosmische Strahlung oder Festplattenausfall könnten sie beschädigen.

Fürquotacheck die Ausführung muss das Dateisystem jedoch nicht gemountet oder mindestens schreibgeschützt gemountet sein, damit es nicht verwendet werden kann, während die Kontingentdatenbank neu erstellt wird. Dies kann lange dauern, daher wird dies leider nur selten durchgeführt. Der NFS-Serveradministrator sollte Ausfallzeiten einplanen, um die Dateisystemkontingente zu überprüfen, und in Betracht ziehen, die Verfahren so zu ändern, dass quotachecksie beim Neustart nach einem Absturz immer ausgeführt werden.

Zweitens ist es aufgrund Ihrer Beschreibung möglich, dass Sie das Inode-Kontingent erreicht haben. Kontingente beschränken nicht nur den Speicherplatz, sondern auch die Anzahl der Dateien, die erstellt werden können. Wenn Sie eine große Anzahl temporärer Dateien erstellen, ist dies möglicherweise der Fall. Sie (oder der NFS-Serveradministrator) sollten dies ebenfalls überprüfen . Führen Sie aus, um quota -szu sehen, was die Datenbank Ihrer Meinung nach im Vergleich zu Ihren Grenzwerten verwendet hat.

Michael Hampton
quelle
1
Danke für deine Antwort. Ich habe nachgesehen quota -sund die Anzahl der Dateien ist unbegrenzt. Das ist also ausgeschlossen. Ich erzählte meinem Systemadministrator davon quotacheckund er wurde sauer auf mich und sagte, dass sie es nicht ausführen können, weil das System rund um die Uhr ohne Ausfallzeiten betriebsbereit sein muss, damit sie es nie aushängen können. (Obwohl es letzte Woche einen Stromausfall gab und er während der Geschäftszeiten eine Stunde lang ausfiel, habe ich ihn nicht erwähnt, da ich nicht wollte, dass er wütender wird.) Er sagte, er sei zuversichtlich, dass es keine Korruption gibt. Also werde ich wohl warten, bis der langsame Check beendet ist.
Ram Rachum
Klingt so, als wären die Kosten höher, um diese Ausfallzeit zu haben, da Benutzer, die ihr Kontingent unerwartet erfüllen, das System sowieso nicht nutzen können!
Pysis
@ RamRachum Jetzt bin ich ziemlich zuversichtlich, dass die Korruption da ist . Ich bin mir nicht sicher, warum er sagen würde, dass es unwahrscheinlich ist. Es ist derzeit das wahrscheinlichste Szenario. Wenn sie es wirklich nie aushängen können, sollten sie wahrscheinlich überhaupt keine Quoten durchsetzen.
Michael Hampton
1

Abgesehen von der Korruptionsmöglichkeit, die @MichaelHampton vorschlägt, sind hier einige Grundlagen:

  • Überprüfen Sie unter / tmp. Manchmal sind einige Prozesse chaotisch oder werden unterbrochen oder beendet - Sitzungsdateien, Installationsprogramme / Entpackungen, Druckaufträge und dergleichen. Suchen Sie nach gesperrten oder versteckten (Punkt-) Dateien. Wenn Sie etwas finden, löschen Sie es nicht einfach, sondern verwenden Sie Zeitstempel, um herauszufinden, was es wann erstellt hat.

  • Auch ps -edalfund Ihre Prozessliste überprüfen und alle seine Datei Argumente, und sehen , ob etwas Geheimnis ist unerwünscht große Dateien oder in unerwarteten Bereichen zu schaffen.

  • "Es scheint, als würde ich dieses Kontingent an anderen Orten als in meinem Home-Ordner ausgeben." Nun, wissen Sie ungefähr, welches Verzeichnis welchen Speicherplatz belegt, oder es ist völlig blind?

  • Finden Sie heraus, ob Sie viele kleine Dateien / Verzeichnisse oder einige große Dateien oder beides haben. Versuchen Sie, eine schnelle Schätzung mit a du -sh ...oder durchzuführen. find -size <threshold> ...Um festzustellen, ob neuere Dateien erstellt werden, toucheine Sentinel-Datei, wenn Sie sich abends abmelden, und am nächsten Tag, find ... -newer SENTINELum festzustellen, ob etwas erstellt wurde. Sie könnten das cron, um mitten in der Nacht zu rennen.

  • Ich denke, eine total ausfallsichere Methode wäre, wenn alles andere fehlschlägt (was unmöglich vorstellbar ist), dass sie vorübergehend ein zweites Homedir für Sie erstellen und schrittweise über Ihr Setup klonen, notieren, welche Anwendungen Sie aktivieren, und dann sehen wenn die Dinge boomen. (Binärsuchtriage, wissen Sie.)

smci
quelle
2
Beachten Sie auch, dass ein Prozess, der eine große Datei erstellt, diese nicht schließt und noch ausgeführt wird ... Durch das Löschen der Datei wird der Speicherplatz erst wiederhergestellt, wenn der Prozess beendet wird. Wenn der Prozess einen anderen Prozess gabelte, der die geöffnete Datei geerbt hat, muss dieser Prozess beendet werden. Mit lsof können Sie Ihre Prozesse untersuchen und feststellen, ob gelöschte Dateien geöffnet sind.
Rrauenza
Oh und auf NFS glaube ich, dass diese geöffneten und gelöschten Dateien als .nfs [a-z0-9] + temporäre Dateien angezeigt werden.
Rrauenza
@rrauenza: Ja, warum habe ich gesagt, überprüfen Sie alle Prozesse in ps -edalfoder versuchen Sie nicht, daraus zu schließen, welcher Prozess oder welche Anwendung plötzlich dazu führt, dass diese Dateien neu erstellt werden.
smci