Alternative zu find -mtime

Alles was sonst Nirgends passt
dante
Posts: 128
Joined: 2010-04-20 12:50

Alternative zu find -mtime

Post by dante » 2011-07-06 15:16

Hi zusammen,

nur mal ein kurzer Brainstorming-Anstoß:

Auf einer Box werden unter /tmp XML-Files abgelegt. Ab und an lösche ich alle Dateien älter 4 Tage, weil sonst Platte voll.

Mein Kommando:

Code: Select all

find /tmp -type f -name "tmp_*" -mtime +4 -exec rm {} \;


Da dort immer um die 500.000 Dateien rumschwirren, dauert das ziemlich lange (> 1h).

Kann ich das irgendwie schneller erledigen? Mittels ls, grep, rm, stat oder ähnlichen Verdächtigen?

Gruß
dante

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Alternative zu find -mtime

Post by Joe User » 2011-07-06 15:22

Etwas schneller geht es mit xargs:

Code: Select all

find /tmp -type f -name tmp_\* -mtime +4 -print0 | xargs -0 rm

Bei ~500k Files in einem Verzeichnis wird es allerdings immer recht lange dauern. Abhilfe schafft hier das Verteilen auf mehrere Unterverzeichnisse und die richtige Wahl des Filesystems für /tmp
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

dante
Posts: 128
Joined: 2010-04-20 12:50

Re: Alternative zu find -mtime

Post by dante » 2011-07-06 15:30

Leider habe ich die Kiste nicht aufgesetzt, das FS ist ext4 (+LVM) und es gibt nur den / Mountpoint (!!).

Vielleicht werde ich das mal umbauen, für /tmp nehme ich dann welches FS? IMHO lagert sich tmpfs ja im RAM aus, ich denke mal das wäre dann eher kontraprodukiv (zumal wir manchmal diese XMLs brauchen).

ddm3ve
Moderator
Moderator
Posts: 1187
Joined: 2011-07-04 10:56

Re: Alternative zu find -mtime

Post by ddm3ve » 2011-07-06 15:39

Bei 500 000 und mehr files würd er aber u.U. in den Fehler laufen, dass die Argumentenliste zu lange ist.
(Wenn er xargs verwendet)

Wie sieht der Gebrauch der XMLs aus?
Wird das automatisiert ggf. nochmals angezogen oder wäre eine manuelles auspacken zumutbar?
Dann würde ich diese täglich in ein archiv packen.
Das wiederum lässt sich dann deutlich schneller bereinigen als die 500 000 Dateien selbst.
Last edited by ddm3ve on 2011-07-06 15:51, edited 1 time in total.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Alternative zu find -mtime

Post by Joe User » 2011-07-06 16:57

Für viele kleinere Files eignet sich XFS als Filesystem sehr gut.

Gerade wegen der langen Argumentliste ist xargs zu bevorzugen:
http://en.wikipedia.org/wiki/Xargs

Hier im RootForum oder in seinem Blog hatte isotopp noch einige andere Vorteile von xargs aufgelistet, ich finde es nur leider gerade nicht wieder.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

ddm3ve
Moderator
Moderator
Posts: 1187
Joined: 2011-07-04 10:56

Re: Alternative zu find -mtime

Post by ddm3ve » 2011-07-06 23:50

Ich habe es gerade getestet. Hast recht bzw. wiki hat recht xargs ruft rm mit den max. möglichen Argumenten auf.

Es wird aber nicht paralell gelöscht sonden nach und nach.
Es läuft also nur ein rm Prozess zur gleichen zeit bei folgendem Befehl

find . -type f | xargs rm

Ich habe im Vorfeld 500 000 Dateien angelegt die jweils nur deren Zahl als inhalt haben, angelegt.
Die Löscherei läuft seit ca. 5 Minuten ist von 500 000 beginnend bei 429291 angekommen. Wurden also etwas mehr als 70 000 bisher gelöscht. War nur eine SATA Platte aber xfs.

dante
Posts: 128
Joined: 2010-04-20 12:50

Re: Alternative zu find -mtime

Post by dante » 2011-07-07 08:10

Ich seh schon, viel schneller wirds also auf Grund der Quantität der Dateien auch nicht 8-[

Dann muss ich wohl damit leben, aber ich werd auch nochmal nen Test bezüglich find -exec und find | xargs machen.

Bis dahin schonmal vielen Dank.
dante

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Alternative zu find -mtime

Post by Joe User » 2011-07-07 12:11

Wenn es möglich ist, dann lege für /tmp eine eigene XFS-Partition an und nimm die xargs-Variante zum Aufräumen. Viel schneller gehts dann mit echten Dateisystemen leider nicht mehr.
tmpfs müsste zwar nochmal etwas schneller sein, dafür ist der Inhalt halt bei einem Reboot oder Stromausfall oder RAM-Defekt futsch.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

dante
Posts: 128
Joined: 2010-04-20 12:50

Re: Alternative zu find -mtime

Post by dante » 2011-07-11 15:07

Heute musste ich wieder die Daten wegschaufeln.
Ich hab natürlich vergessen vorher mal die Dateizahlen zu vergleichen, aber der Indikator "Platte voll" sollte aussagekräftig genug sein.

Die Kombination von find + xargs hat den ganzen Mist innerhalb weniger Minuten weggebaggert (eben 1x find + 1x rm und nicht 1x find + n-mal rm).

Vielen Dank für eure Hilfe.
Beim Neuaufsetzen der Systeme werde ich an ein anderes FS denken.

Gruß
dante