Linux-Dateisystem, das ältere Dateien altert, wenn die Partition voll ist

7

Ich frage mich, ob es ein Dateisystem gibt, das einer Round-Robin-Datenbank entspricht, die bei einer festen Größe die ältesten Dateien altert. Es ist ziemlich einfach, mit einem einfachen Cron-Job zu implementieren, den ich habe, aber ich gehe davon aus, dass es ein Problem ist, das viele Leute haben, und es gibt vielleicht etwas Besseres. Ich möchte eine Partition oder einen Pool mit fester Größe festlegen, in der ältere Dateien automatisch entfernt oder veraltet werden, wenn der Pool voll ist. Eine Art Umlaufpuffer, der den von der ältesten Datei verbleibenden Speicherplatz für die neuen verwendet und gleichzeitig die Dateiintegrität beibehält.

Meine Cron-Lösung vergleicht die Festplattennutzung mit einem Schwellenwert und entfernt rekursiv die älteste Datei, bis die Festplattennutzung wieder unter dem Schwellenwert liegt. Es ist nicht perfekt, weil man nicht garantieren kann, dass der Schwellenwert niedrig genug ist, um nicht zwischen zwei Cron-Iterationen überholt zu werden. Es maximiert auch nicht die Nutzung des Speicherplatzes aufgrund des Schwellenwerts, der tendenziell prädiktiver Natur ist (wie viel kann ich in einer Minute zwischen zwei Iterationen von crond einfüllen). Zwei Mängel, die ich hoffentlich verbessern kann.

Ich suche nach einer eleganteren Lösung, ähnlich wie die Round-Robin-Datenbank ( http://linux.die.net/man/1/rrdtool ) dies transparent handhabt, jedoch für Dateisysteme.

user153222
quelle
Was ist mit dem Überladen des Befehls mv, um die Überprüfung und Löschung (nach Bedarf) durchzuführen, bevor Dateien in die Partition verschoben werden?
Bereitstellung einer alternativen Methode zur Erreichung des Ziels, die hoffentlich einige nützliche Kommentare auslöst.
Gibt es einen Verdienst bei der Betrachtung von Logrotate? Ich glaube, Sie können Regeln für jede Art von Dateien schreiben, aber wie Sie sicherstellen können, dass sie rechtzeitig (bei Bedarf) ausgeführt werden, um mehr Dateien zu speichern.
1
Ich stimme dir nicht zu. Dateisysteme werden mit verschiedenen Funktionen erstellt. Einige führen eine De-Deplucation durch, andere erlauben verteilten Speicher. Ich brauche einen, der die Nutzung des Speichers mit fester Größe maximiert und den verbleibenden Speicherplatz intelligent nutzt, indem die älteste Datei entfernt wird, um die neuen zu speichern.
1
Ich stimme dem Benutzer 153222 oben zu. tmpfsist ein hervorragendes Beispiel für ein Dateisystem, das Informationen definitiv nicht auf belastbare Weise speichert, aber unter bestimmten Umständen aufgrund seiner Funktionsweise sehr nützlich ist. Sie verwenden ein Tool, um einen Bedarf zu decken, und ich kann mir leicht Bedürfnisse vorstellen, denen ein ringgepuffertes Dateisystem gut dienen würde. Ich bin mir keineswegs sicher, dass dies eine schlechte Frage ist, und ich hoffe, dass sie nicht geschlossen wird.
MadHatter

Antworten:

5

Es gibt viele HSM- Systeme ( Hierarchical Storage Management ), die hauptsächlich auf SAN-Systeme ausgerichtet sind. Diese migrieren Dateien von schnelleren Festplatten zu langsameren Festplatten auf Band, wenn ihre letzte Zugriffszeit älter wird. Wenn Sie ein SAN haben, möchten Sie vielleicht eines davon suchen. Die meisten, die ich kenne, sind kommerzielle Lizenzen, wie beispielsweise das von uns verwendete IBM Tivoli HSM. Vielleicht möchten Sie sich aber auch OHSM ansehen .

Wenn Sie nur alte Dateien löschen möchten, löscht ein einfacher Cron-Job wie z. B. find /data -atime +30 -exec rm {} \;Dateien, auf die in einer bestimmten Zeit nicht zugegriffen wurde (stellen Sie jedoch sicher, dass das Dateisystem nicht mit der noatimeOption bereitgestellt ist !). Dies wäre sehr riskant. Es sei denn, Sie hatten ein gutes Online-Backup-System.

Steve Shipway
quelle
Dies ist so ziemlich das, was ich jetzt habe, aber nicht ganz ausreichend, um zu gewährleisten, dass das Dateisystem nicht zwischen zwei Cron-Iterationen
5
Ich würde sagen, dass du es falsch machst. Fügen Sie dem Dateisystem entweder viel Festplatte hinzu, erhöhen Sie die Häufigkeit Ihres Cron oder suchen Sie einen anderen Weg. Wenn Sie regelmäßig eine nicht angegebene Datenmenge wie diese löschen müssen, liegt wahrscheinlich ein Problem mit dem Füllsystem vor. Ich gehe davon aus, dass es sich um ein temporäres Dateisystem handelt. In diesem Fall sollten die Prozesse, die darauf schreiben, so geschrieben werden, dass sie besser nach sich selbst bereinigen, und Sie sollten wahrscheinlich die Größe des Dateisystems erhöhen.
Steve Shipway
Ich schätze den Kommentar Steve, aber ich habe ein berechtigtes Bedürfnis nach einem Dateisystem, das Dateien auf "bestmögliche Weise" aufbewahrt. Unter normalen Bedingungen werden die Dateien regelmäßig von einem Remote-Prozess entfernt. Im Falle eines Kommunikationsausfalls möchte ich, dass der Pool so weit wie möglich erhalten bleibt und alles, was von oben fällt, altert und die neuesten Dateien bis zur Kapazität des Pools aufbewahrt werden. Ich suche nach einer automatisierten Möglichkeit, wie dies in rrdtool geschehen kann. Meine alternativen Lösungen sind in Ordnung, aber dann muss ich einen Schwellenwert festlegen, der sicherstellt, dass ich den Pool nicht zu schnell
1
Also - das Dateisystem wird ein bisschen wie eine Warteschlange verwendet, und wenn es voll ist, möchten Sie lieber den ältesten Eintrag als den neuesten verlieren? Das macht Sinn. Dies ist jedoch wirklich etwas, das von der Anwendung verwaltet werden sollte, die darauf schreibt ... Ich würde sagen, dass Sie (a) die FS-Größe erhöhen sollten, damit das Risiko eines Problems geringer ist, und (b) Sie wahrscheinlich a schreiben können Einfaches Perl-Skript zum Abfragen des freien FS-Speicherplatzes und Löschen von Dateien in umgekehrter Reihenfolge des Alters bis zum freien Speicherplatz> X. Dies kann jedoch schwieriger sein, wenn die Verzeichnisstruktur komplexer ist.
Steve Shipway
Genau wie eine Warteschlange ja. FS kann nicht erhöht werden (es ist ein RAMDISK). Ich habe bereits das Äquivalent des oben erwähnten Perl-Skripts, suche aber nach einer eleganteren Lösung, falls es eine gibt. Die Verzeichnisstruktur ist in diesem Fall flach, aber wenn ein solches Dateisystem vorhanden wäre, würde ich hoffen, dass die Warteschlange auch in komplexen Hierarchien noch funktioniert.
0

Ich kann nur hoffen, dass es kein solches Dateisystem gibt (flüchtige Suchen scheinen nicht viel Interesse zu wecken). Das klingt nach einer Verschwörung für einen schrecklichen Traum ...

Wie auch immer, ich nehme an, die kurze Antwort lautet: Nichts dergleichen existiert.

Und ich hoffe sehr, dass das stimmt :(


Was Ihren Cron betrifft ... wenn Sie sich nur Sorgen über überlappende Cron machen ... Verwenden Sie eine Sperrdatei. Dann ist Ihre einzige Sorge: "Kann meine Anwendung dieses Dateisystem füllen, bevor cron erneut ausgeführt wird?"

Daniel Widrick
quelle
Ich mache mir keine Sorgen über überlappende Cron, aber ich mache mir Sorgen, dass die Partition gefüllt wird, bevor der Cron-Daemon wieder ausgeführt wird.
Ein schrecklicher Traum ist für mich kein gültiger Kommentar: rrdtool wird aus einem bestimmten Grund beendet. Und stellen Sie sich vor, Sie müssen Dateien anstelle von Daten in einer Datenbank speichern ... Nicht so weit hergeholt.
Interessant, wie manche Leute sich darauf konzentrieren, meine Bedürfnisse zu erraten, anstatt Lösungen zu empfehlen ... rrdtool hat die Fähigkeit, ältere Daten mithilfe einer Analogie mit sich bewegenden Fenstern zu altern, wobei eine feste Größe beibehalten wird. So möchte ich, dass sich die Partition verhält. Ich brauche keine SQL-Funktionen.
4
Die zweite Vermutung der Notwendigkeit kommt von jahrelangen Menschen, die uns XY-Probleme bringen. Dies ist hier nicht unbedingt der Fall, aber da Sie nicht beschreiben, was Sie tatsächlich tun, gehen wir davon aus, dass dies bei ungewöhnlichen Anforderungen der Fall ist. meta.stackexchange.com/questions/66377/what-is-the-xy-problem
Grant
Sehr gut, danke für den Link. Ich glaube nicht, dass dies hier der Fall ist. Ich beschreibe zuerst meine Bedürfnisse, so gut ich kann. Ich biete auch die Lösung, die ich habe, und die zwei Mängel, die ich zu überwinden versuche. Ich verstehe wirklich nicht, warum manche dies mit "minimalem Verständnis" kennzeichnen würden -> in meinem Kopf eindeutig nicht der Fall. Ich bin auch nicht einverstanden mit Ihrer Aussage, dass ich nicht beschreibe, was ich tue. Ich gebe den Anwendungsfall in den obigen Kommentaren an.