Der schnellste Weg, um eine große Menge von Unix- und Linux-Dateien zu entfernen

Das Erstellen, Löschen und Ändern von Dateien ist eine der häufigsten Aufgaben für Systemadministratoren . Diese Art von Aufgaben wird in Ihrem Alltag häufig ausgeführt. Es kann schnell gehen, wenn es sich um eine oder zwei Dateien handelt, aber die Sache wird kompliziert, wenn die Anzahl zunimmt.

Wenn die Anzahl der Dateien mehr als 6 Stellen beträgt, müssen wir sehr vorsichtig sein, da dies ewig dauern und sogar das gesamte System zum Erliegen bringen kann. Ich empfehle, zu wissen, wie Sie die Aufgabe angehen und den Befehl verwenden, der für Sie in Abhängigkeit von Ihrem Dateisystem und insbesondere der Anzahl der Dateien geeignet ist.

Wenn wir über die Dateien in Linux sprechen, basiert alles mehr auf den Inodes als auf den Dateien, über die wir sprechen können.

Was ist ein Inodo?

Dies ist eine Datenstruktur, die typisch für Dateisysteme ist, die traditionell in UNIX- ähnlichen Betriebssystemen wie Linux verwendet werden. Ein Inode enthält die Merkmale (Berechtigungen, Daten, Speicherort, aber NICHT den Namen) einer regulären Datei, eines Verzeichnisses oder eines anderen Objekts, das das Dateisystem enthalten kann.

Wie Inodes erstellt werden und ob sie erstellt werden, hängt vom jeweiligen Dateisystem ab. Mehrere Dateisysteme erstellen alle Inodes, wenn das Dateisystem selbst erstellt wird, was zu einer festen Anzahl von Inodes führt. Beispielsweise ist ext3 ein Dateisystem, das dies ausführt. Das Ergebnis ist, dass das Dateisystem über eine bestimmte Anzahl von Dateien verfügt, die gespeichert werden können. Ja – es ist tatsächlich möglich, die Kapazität auf dem Speichermedium zu haben und nicht mehr Daten zu speichern. Wenn Sie mehr Inodes benötigen, müssen Sie das Dateisystem neu erstellen, wobei alle darin enthaltenen Daten verloren gehen.

See also  So deaktivieren Sie automatische Updates Office 2019, 2016

Ein Weg, um die Falle der festen Anzahl von Inodes zu umgehen, ist etwas, das von einigen Dateisystemen verwendet wird und das als Ort und / oder dynamische Erweiterung von Inodes bezeichnet wird. Diese Dateisysteme können grundsätzlich das Dateisystem vergrößern und / oder die Anzahl der Inodes erhöhen.

Zusammensetzung eines Inodo

Denken Sie daran, dass Linux im Allgemeinen mit POSIX kompatibel ist, für das bestimmte Dateiattribute erforderlich sind. Insbesondere

Die Größe der Datei in Byte
  • Geräte-ID
  • Datei Benutzer ID
  • Gruppen-ID der Datei
  • Der Dateimodus, der den Dateityp bestimmt und wie der Eigentümer, die Gruppe und andere (der Rest) auf die Datei zugreifen können
  • Zusätzliche System- und Benutzerflags zum weiteren Schutz der Datei (Hinweis: Dies kann verwendet werden, um die Verwendung und Änderung von Dateien einzuschränken.)
  • Zeitstempel, die angeben, wann der Inode selbst zuletzt geändert wurde (ctime, “change time”), wann der Inhalt der Datei zum letzten Mal geändert wurde (mtime, “modification time”) und wann auf die Datei zuletzt zugegriffen wurde Zeit (atime “Zugriffszeit”)
  • Ein Verbindungszähler, der angibt, wie viele feste Verbindungen auf den Inode verweisen.
  • Zeiger auf Plattenblöcke, in denen der Inhalt der Datei gespeichert ist.

Jedes Linux-Dateisystem, das POSIX unterstützt, muss diese Informationen für jede Datei im Inode enthalten haben oder in der Lage sein, diese Informationen so zu reproduzieren, als ob es Inodes gäbe.

Dateien unter Linux löschen

Die Geschwindigkeit, mit der eine Datei verschoben, geändert oder gelöscht wird, hängt von der Anzahl der Inodes und dem zu verwendenden Befehl ab.

Testumgebung generieren

Wir werden ein kleines Labor erstellen, ein Verzeichnis erstellen und darin 500.000 Dateien generieren, und wir werden sie mit einigen Befehlen beseitigen und die Geschwindigkeit sehen.

See also  So scannen Sie mit Nmap offene Ports in Ihrem VPS

Wir erstellen das Verzeichnis:

 $ mkdir test 

Wir erstellen 500000 TXT-Dateien mit einer einfachen Bash-Schleife im aktuellen Verzeichnis.

 $ für i in $ (Seq. 1 500000); Echotest durchführen >> $ i.txt; fertig 

Es wird bereits erstellt.

Mit dem Befehl rm

Wir beginnen mit dem einfachsten Befehl unter Linux

 $ Zeit rm -f * 

Da es sich um eine sehr große Anzahl von Dateien handelt, hilft uns der Befehl rm bei dieser Aufgabe nicht, den Fehler auszulösen.

 -bash: / bin / rm: Argumentliste zu lang 

Verwenden des Befehls “Suchen”

Dieses Mal werden wir den gleichen Test durchführen, aber find mit dem Argument -exec verwenden

 $ time find / test / -type f -exec rm {} ; echte 14m51.735s Benutzer 2m24.330s sys 9m48.743s 

Wir können sehen, dass der Befehl in fast 15 Minuten ausgeführt wurde.
Wir werden denselben Befehl find verwenden, jedoch mit der Option -delete

 $ time find / test / -type f -delete echte 5m11.937s Benutzer 0m1.259s sys 0m28.441s 

Wir sehen, dass er wieder in der Lage war, alle Dateien zu löschen, aber diesmal viel schneller in etwas mehr als 5 Minuten. Dies ist eine hervorragende Zeit, wenn man bedenkt, dass es fast eine halbe Million Dateien gibt.

Perl verwenden

Dieses Mal werden wir die Perl-Sprache verwenden, um alle Dateien im Verzeichnis zu löschen.

 time perl -e 'for (<*>) {((stat) [9] <(unlink))}' echte 1m0.488s Benutzer 0m7.023s sys 0m27.403s 

Es ist extrem schnell im Vergleich zu den vorherigen, aber der Verbrauch ist etwas hoch, um mit diesem Befehl vorsichtig zu sein. Ich verwende Perl, um Dateien zu löschen, aber in Skripten, die manchmal ohne viel Verkehr laufen, oder Sie können das System aufgrund von Ressourcenmangel aufhängen.

See also  So beheben Sie den Fehler 0X80240FFF mit Windows 10-Updates

Verwenden von RSYNC

Zum Abschluss verwenden wir das Tool Nummer 1 für die RSYNC-Sicherung, das zwar Ihrer Meinung nach nicht zum Löschen von Dateien verwendet werden kann. Für diesen Test synchronisieren wir den Testordner mit einem völlig leeren neuen.

 $ time rsync -a - leeres Debug / test / echte 2m52.502s Benutzer 0m2.772s sys 0m32.649s 

Wir sehen, dass alle Dateien in fast 3 Minuten gelöscht werden und die verwendeten Ressourcen im Vergleich zu den vorherigen geringer sind.

Schlussfolgerungen
Wir haben verschiedene Optionen gesehen, die je nach Fall angewendet werden können. Wenn Sie mit Filtern suchen, kann die Verwendung von Perl ein Problem sein, wenn Sie es überhaupt nicht beherrschen. Der Befehl find mit der Option -delete ist recht schnell, ich hoffe, es hilft Ihnen in der Zukunft und wenn sie eine andere Methode haben, lassen Sie es in den Kommentaren.

administrator

Leave a Reply

Your email address will not be published. Required fields are marked *