Ordnergrösse bei vielen Ordnern ermitteln

Hallo Liste Ich habe hier einen Mailserver (mit Exim), der die Postfächer von rund 2.000 Domains verwaltet. Nun will ich die Grösse der einzelnen Postfächer ermitteln und die User ab einer bestimmten Grösse dann bitten, die Mails nicht so lang am Server zu belassen. Der Exim speichert die Mails hier unterhalb von /opt/<domain>/<user>/Maildir wo ich die Unterverzeichnisse cur, new und tmp habe. Somit interessiert mich die Gesamtgrösse vom Ordner "Maildir" (und natürlich rekursiv darunter). Es würde mir schon reichen, wenn ich diese Postfächer bzw Verzeichnisse in ein simples Textfile schreibe (ein "Maildir"-Ordner mitsamt Grösse pro Zeile), welches ich dann manuell weiterbearbeite. Dazu habe ich als Grösse einmal "200MB und grösser" gewählt und folgenden Ansatz probiert: find /opt/*/*/Maildir -type d -exec du -skh {} \; | grep [2-9][0-9][0-9]M > file.txt Allerdings habe ich bei rund 2.000 Domains und einer dementsprechenden Anzahl von POP-Konten hierdurch eine nicht zu unterschätzende IO-Last am Server, welche ich den Festplatten nach Möglichkeit nicht antun möchte - auch deswegen, weil mir das in weiterer Folge ein Cronjob etwa 1x pro Woche übernehmen soll. Ich habe das "find" vorhin nach etwa 15-20 Minuten abgebrochen, ohne ein einziges Ergebniss zu erhalten. Nun meine Frage: Wie lässt sich dies schöner lösen, um alle Ordner ab einer bestimmten Grösse (zusammen mit der Grösse) zu bekommen? Ein für Anregungen dankbarer Alex -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org

Hallo Alexander, On 10/03/2011 12:46 PM, Alexander Pichler wrote:
Zunächst einmal muss man wohl festhalten, dass Deine Anfrage auf alle Fälle eine IO-Last erzeugen muss. Wenn Du nach 200 MB und größer suchst, dann sind 10 MB pro Postfach offensichtlich nicht unplausibel. 2000 Domains enthalten mindestens 2000 Postfächer, nehme ich an. Also kommst Du in die Größenordnung von 20 GB, die Du regelmäßig in ihrer Größe abschätzen willst. Ganz ohne IO geht das nicht. Mir fallen zwei Lösungen + eine Idee ein. 1. Quota. Richte auf den Maildirs Quota ein. Die dürfen beliebig groß sein, aber das Quota-System schreibt für Dich permanent mit, wieviel Platz wer verbraucht. 2. Cronjob Wieso so ein kompliziertes `find`? Was spricht gegen du -sm /opt/*/*/Maildir gegebenenfalls du -sm /opt/*/*/Maildir | sort -n im Cronjob? Letzteres sortiert Dir die großen Maildirs nach unten, so dass Du leicht sehen kannst, welche größer als 200 MB sind. Dafür kommt die Ausgabe aber erst nachdem alle Verzeichnisse durchsucht wurden. Das kann also dauern. 3. Statistischer Ansatz Wenn Du Lust hast, kannst Du stattdessen auch etwas witzigeres basteln, was die Systemlast einstellbar macht. Wähle in regelmäßigen Abständen (hier ist die Einstellmöglichkeit), ein Postfach per Zufall aus und ermittle seine Größe. Wenn es mehr als 200 MB enthält gib eine Meldung aus. Wenn es weniger als 200 MB enthält, setze ein Gewicht fest, das die Wahrscheinlichkeit steuert, dass dieses Postfach bald wieder auf seine Größe untersucht wird. Wenn das Postfach erst 1 MB groß ist, kann man bis zur nächsten Kontrolle bestimmt länger warten, als wenn es 199 MB groß ist. Das Gewicht kann nichtlinear von der Postfachgröße abhängen und es kann von der Änderung der Postfachgröße seit der letzten Kontrolle abhängen usw. Herzliche Grüße Jan -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org

Am 04.10.2011 09:11, schrieb Jan Handwerker:
Hallo Alexander,
Hallo Jan
Dass es nicht ohne IO-Last gehen wird, war mir bei der Datenmenge von Anfang an klar. Ich wollte den Server trotzdem nach Möglichkeit nicht zu sehr stressen und mit reiner IO-Last zumüllen. Meine Lösung ist dann dahin gegangen, dass ich nach jedem "find" ein "sleep 1" eingebaut hab, wodurch ich immer wieder für kleine Pausen gesorgt habe. Das Ganze hat mir ein Cronjob letzte Nacht um Mitternacht gestartet und die Ergebnisse in eine Datei geschrieben, bis heute Früh war alles fertig.
Mir fallen zwei Lösungen + eine Idee ein. [...]
Deinen Lösungsansatz mit den Quotas werde ich sicher weiterverfolgen, diese Möglichkeit gefällt mir sehr gut. Mittel- bis langfristig wird eine Lösung in dieser Richtung sicher besser sein als meine Variante. Anbei auch ein Danke an Ralf Prengel für deine Antwort direkt an meine Emailadresse anstatt auf die Liste und deinen Vorschlag.
Herzliche Grüße Jan
Danke, Alex -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org

On 04.10.2011 13:26, Alexander Pichler wrote:
Hallo, schau dir mal 'ionice' an. Grüße ....Volker -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org

Am 05.10.2011 12:17, schrieb Volker Poplawski:
Hallo,
Hallo Volker
schau dir mal 'ionice' an.
Danke! Ich schätze, genau das habe ich gesucht.
Grüße ....Volker
LG, Alex -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org

Hallo Alexander, On 10/03/2011 12:46 PM, Alexander Pichler wrote:
Zunächst einmal muss man wohl festhalten, dass Deine Anfrage auf alle Fälle eine IO-Last erzeugen muss. Wenn Du nach 200 MB und größer suchst, dann sind 10 MB pro Postfach offensichtlich nicht unplausibel. 2000 Domains enthalten mindestens 2000 Postfächer, nehme ich an. Also kommst Du in die Größenordnung von 20 GB, die Du regelmäßig in ihrer Größe abschätzen willst. Ganz ohne IO geht das nicht. Mir fallen zwei Lösungen + eine Idee ein. 1. Quota. Richte auf den Maildirs Quota ein. Die dürfen beliebig groß sein, aber das Quota-System schreibt für Dich permanent mit, wieviel Platz wer verbraucht. 2. Cronjob Wieso so ein kompliziertes `find`? Was spricht gegen du -sm /opt/*/*/Maildir gegebenenfalls du -sm /opt/*/*/Maildir | sort -n im Cronjob? Letzteres sortiert Dir die großen Maildirs nach unten, so dass Du leicht sehen kannst, welche größer als 200 MB sind. Dafür kommt die Ausgabe aber erst nachdem alle Verzeichnisse durchsucht wurden. Das kann also dauern. 3. Statistischer Ansatz Wenn Du Lust hast, kannst Du stattdessen auch etwas witzigeres basteln, was die Systemlast einstellbar macht. Wähle in regelmäßigen Abständen (hier ist die Einstellmöglichkeit), ein Postfach per Zufall aus und ermittle seine Größe. Wenn es mehr als 200 MB enthält gib eine Meldung aus. Wenn es weniger als 200 MB enthält, setze ein Gewicht fest, das die Wahrscheinlichkeit steuert, dass dieses Postfach bald wieder auf seine Größe untersucht wird. Wenn das Postfach erst 1 MB groß ist, kann man bis zur nächsten Kontrolle bestimmt länger warten, als wenn es 199 MB groß ist. Das Gewicht kann nichtlinear von der Postfachgröße abhängen und es kann von der Änderung der Postfachgröße seit der letzten Kontrolle abhängen usw. Herzliche Grüße Jan -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org

Am 04.10.2011 09:11, schrieb Jan Handwerker:
Hallo Alexander,
Hallo Jan
Dass es nicht ohne IO-Last gehen wird, war mir bei der Datenmenge von Anfang an klar. Ich wollte den Server trotzdem nach Möglichkeit nicht zu sehr stressen und mit reiner IO-Last zumüllen. Meine Lösung ist dann dahin gegangen, dass ich nach jedem "find" ein "sleep 1" eingebaut hab, wodurch ich immer wieder für kleine Pausen gesorgt habe. Das Ganze hat mir ein Cronjob letzte Nacht um Mitternacht gestartet und die Ergebnisse in eine Datei geschrieben, bis heute Früh war alles fertig.
Mir fallen zwei Lösungen + eine Idee ein. [...]
Deinen Lösungsansatz mit den Quotas werde ich sicher weiterverfolgen, diese Möglichkeit gefällt mir sehr gut. Mittel- bis langfristig wird eine Lösung in dieser Richtung sicher besser sein als meine Variante. Anbei auch ein Danke an Ralf Prengel für deine Antwort direkt an meine Emailadresse anstatt auf die Liste und deinen Vorschlag.
Herzliche Grüße Jan
Danke, Alex -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org

On 04.10.2011 13:26, Alexander Pichler wrote:
Hallo, schau dir mal 'ionice' an. Grüße ....Volker -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org

Am 05.10.2011 12:17, schrieb Volker Poplawski:
Hallo,
Hallo Volker
schau dir mal 'ionice' an.
Danke! Ich schätze, genau das habe ich gesucht.
Grüße ....Volker
LG, Alex -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
participants (3)
-
Alexander Pichler
-
Jan Handwerker
-
Volker Poplawski