Ich habe versucht, rsnapshot zum Erstellen von Backups zu verwenden, finde es aber unbrauchbar. Es ist zwar in der Lage, ein Verzeichnis (50 GB) in wenigen Minuten zu unterscheiden und zu duplizieren (jede Datei fest zu verknüpfen), und ich kann das gesamte Verzeichnis in etwa einer halben Stunde cp, aber es dauert weit über eine Stunde, um es zu löschen. Selbst bei direkter Verwendung rm -rfv
kann es bis zu einer halben Sekunde dauern, bis eine einzelne Datei erstellt wurde, während die Befehle cp
und link
sofort ausgeführt werden.
Warum ist rm so langsam? Gibt es eine schnellere Möglichkeit, Hardlinks rekursiv zu entfernen? Es macht für mich keinen Sinn, dass das Kopieren einer Datei weniger Zeit in Anspruch nimmt als das Entfernen.
Das Dateisystem, an dem ich arbeite, ist ein externes Speicherlaufwerk, das über USB verbunden ist und fuseblk eingibt (was meiner Meinung nach ntfs bedeutet). Auf meinem Computer läuft Ubuntu Linux.
Ausgabe von oben:
Cpu(s): 3.0%us, 1.5%sy, 0.0%ni, 54.8%id, 40.6%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 8063700k total, 3602416k used, 4461284k free, 557604k buffers
quelle
fuseblk
das Laufwerk gemountet ist, bedeutet dies nicht, dass es sich um ein NTFS-Laufwerk handelt, sondern nur, dass es als FUSE-Blockgerät gemountet ist. Das könnte fast alles sein.Antworten:
Letztlich egal , was Sie tun,
rm
hat laufenunlink
auf jeder einzelnen Datei , die Sie entfernen möchten (auch wenn Sie rufenrm -r
auf das übergeordnete Verzeichnis). Wenn viele Dateien entfernt werden müssen, kann dies sehr lange dauern.Bei der Ausführung sind zwei Prozesse besonders zeitaufwendig
rm -r
:readdir
, gefolgt von,unlink
.Das Auffinden aller Dateien und das anschließende Durchsuchen jeder einzelnen Datei, um sie zu entfernen, kann sehr, sehr lange dauern.
Wenn Sie dies "unbrauchbar" finden, weil es das Verzeichnis für einige Zeit unbrauchbar macht, ziehen Sie in Betracht, das übergeordnete Verzeichnis zu verschieben, bevor Sie es entfernen. Dies gibt den Namen frei, den das Programm wieder verwenden kann, ohne dass dies zu umständlich ist.
Unter der Annahme , dass das Dateisystem wirklich ist NTFS (es aus Ihrer Frage unklar ist), ist NTFS im Allgemeinen ziemlich langsam bei Löschen große Teile von Dateien. Sie könnten erwägen, ein geeigneteres Dateisystem für Ihre Zwecke zu verwenden (die neueren ext-Dateisysteme bieten eine recht gute Löschleistung, wenn Sie keine anderen besonderen Anforderungen haben). FUSE selbst ist im Allgemeinen auch nicht besonders schnell. Sie könnten überlegen, ob Sie dies auf eine Weise tun können, bei der FUSE nicht verwendet wird.
quelle
Warum ist rm so langsam? Ich habe keine Ahnung. Aber ich kenne einen schnelleren Weg:
Update: Diese Antwort auf Serverfault enthält einige Erklärungen. Es sieht so aus, als ob rsync die Dateien in einer bestimmten Reihenfolge löscht, wodurch der Dateisystembaum ausgeglichen bleibt und niemals neu ausgeglichen werden muss. rm löscht einfach die Dateien und führt beim Entfernen zu einem erheblichen Ausgleich. Es gibt einige Informationen über eine Neugewichtung hier .
quelle
rm -rf
?rsync
muss nochunlink()
alle dateien reintest/
, und das ist wohl was die zeit braucht.unlink(2)
im Verzeichnis sein (und daran denken, esfsck
später zu tun ) ...Naja, ich hatte mal ein ähnliches Problem mit deinem. Ich fand, dass Ihr "wa" hoch ist, Sie könnten verwenden
Wenn Sie überprüfen möchten, ob die Auslastung Ihrer Festplatte hoch ist, bedeutet dies, dass die Festplatte ziemlich ausgelastet ist. Überprüfen Sie, ob andere Prozesse kontinuierlich auf die Festplatte schreiben.
Verwenden Sie zur Vereinfachung
um zu überprüfen, ob b hoch oder r < b ist . Das deutet auf etwas Falsches hin. In Ihrer Situation denke ich, dass die Festplatte der ursprüngliche Grund ist.
quelle