Gibt es eine Möglichkeit, 100-GB-Dateien unter Linux zu löschen, ohne IO / Load zu beschädigen?

8

Ich habe eine riesige Protokolldatei, die ich auf einem Produktionswebserver löschen muss. Ich mache mir Sorgen, dass das System dadurch gecrawlt wird, wenn ich es unter Linux verwende. Irgendwelche brillanten Ideen?

Aktualisieren:

Dateisystem: ext3

Partition: / var (hauptsächlich Protokolle und MySQL-Daten)

Die Protokolldatei wird nicht mehr beschrieben. (Es werden keine zusätzlichen Daten angehängt.)

Webserver ist LAMP (viele E / A)

objektorientierter
quelle
1
Duplikat von serverfault.com/questions/128012/… ? Was ist Ihr zugrunde liegendes Dateisystem?
Ben DeMott
ext3 - in der Hoffnung auf etwas mehr , dass ionice inspirierende Kraft der Arbeit ... ich in der Manpage (lesen linux.die.net/man/1/ionice ) und es klingt wie das richtige Werkzeug ... Ich möchte eine Person mit Erfahrung Ich fühle mich nicht sehr abenteuerlustig, wenn es um Produktionsserver geht.
Objektorientiert
Hat einer von diesen das Problem gelöst?
ewwhite
Nein, ich habe die Behandlung des Problems bisher verzögert. Ich werde dieses Thema aktualisieren, nachdem ich eine der vorgeschlagenen Methoden ausprobiert habe. Ich neige dazu, die Datei auf Null zu setzen.
objekt

Antworten:

12

Es kann schneller sein, die Datei auf Null zu setzen / abzuschneiden, als sie zu entfernen. Ich erwähne dies auch, weil es sich um eine wirklich große Protokolldatei handelt, daher muss eine enorme Menge an Prozessaktivität darauf geschrieben werden. Versuchen Sie, : > /path/to/logfile.logwenn Sie nicht in der Lage sind, die Produktionsdienste zu stoppen und zu starten.

ewwhite
quelle
Vielen Dank! Ich konnte den Prozess zum Schreiben in die Datei stoppen, sodass keine zusätzlichen Daten an die Datei angehängt werden.
objekt
Gehen Sie voran und setzen Sie es auf Null.
ewwhite
Tolle Idee, danke! Hat beim Abschneiden einer 2-GB-Datei absolut NULL io genommen, wodurch der Server normalerweise 20 Sekunden lang angehalten wird.
Shane N
Das Abschneiden einer Datei auf null Byte muss dieselbe Arbeit leisten, um die Blöcke freizugeben, wie das Löschen der Datei. Durch mehrmaliges Abschneiden von jeweils ein paar MB kann sich die Last jedoch über einen langen Zeitraum verteilen, wenn zwischen den einzelnen Kürzungen Ruhezustände eingefügt werden.
Kasperd
10

ionice -c3 rm yourfile.logist Ihr bester Schuss, dann gehört rm zur Leerlauf-E / A-Klasse und verwendet E / A nur, wenn ein anderer Prozess dies nicht benötigt. ext3 ist beim Löschen großer Dateien nicht herausragend und Sie können nicht viel dagegen tun. Ja, der Befehl rm verlangsamt Ihr System. Das Ausmaß der Langsamkeit und die Dauer des Löschens kann man nur erraten, es hängt so sehr von der Hardware, der Kernelversion und den Einstellungen für die Erstellung des ext3-Dateisystems ab.

Für Protokollserver und andere Server mit großen Dateien verwende ich normalerweise XFS, da es mit ihnen sehr schnell ist.

Janne Pikkarainen
quelle
1
Danke Janne. Ich mache mir Sorgen, dass es nicht viel Leerlaufzeit gibt? Ich halte ionice -c2 -n7 rm big.logdas für angemessener.
objekt
Ich habe keine Ahnung, ob Ihr Server viel freie Festplatten-E / A-Zeit hat oder nicht. Aber welcher von Ihnen ist für Sie wichtiger: 1) Zeit zum Entfernen der Datei oder 2) Ihr Server bleibt während des Löschens ~ reibungslos?
Janne Pikkarainen
Methode mit geringster Störung ist das Ziel. Mein Punkt hier ist, dass das Ding ein Webserver ist (LAMP um genau zu sein), also ist das Geschäft IO. Ich sehe die Festplatten einfach nicht sehr oft im Leerlauf sitzen. Ich mache mir Sorgen, dass das Entfernen einer riesigen Datei Tage oder länger dauern würde, wenn das System auf Zeiträume von null E / A wartet.
objekt
IONICE ist hier der Kicker. Ich habe stundenlang versucht herauszufinden, was meinen Server verlangsamt, während ich eine beträchtliche Anzahl von Dateien gelöscht habe. "find. -type f -delete -print" verwendete 99,9% meiner E / A und andere Prozesse stapelten sich, weil sie ihre E / A nicht abschließen konnten.
Nick Woodhams
1

Eine alternative Lösung besteht darin, separate Festplatten zu haben und zwischen diesen zu wechseln. Wenn Sie sich also auf einer Festplatte angemeldet haben, wechseln Sie zur anderen, und Sie können dann viele E / A-Vorgänge verwenden, um Inhalte zu entfernen, ohne die aktive Festplatte zu belasten.

Hans-Henrik Stærfeldt
quelle