Kurzversion : rm -rf mydir
Mit mydir
(rekursiv) 2,5 Millionen Dateien dauert es auf einem meist inaktiven Computer ungefähr 12 Stunden.
Weitere Informationen : Die meisten Dateien, die gelöscht werden, sind feste Links zu Dateien in anderen Verzeichnissen (das zu löschende Verzeichnis ist tatsächlich die älteste Sicherung von rsnapshot
; der rm
Befehl wird tatsächlich von gegeben rsnapshot
). Es werden also hauptsächlich Verzeichniseinträge gelöscht - der Dateiinhalt selbst ist nicht viel; es ist in der Größenordnung von einigen zehn GB.
Ich bin mir nicht sicher, ob btrfs
das der Schuldige ist. Ich erinnere btrfs
mich, dass das Backup vor Beginn der Verwendung ebenfalls sehr langsam war , aber ich bin nicht sicher, ob die Langsamkeit beim Löschen lag.
Die Maschine ist ein Intel Core i5 2,67 GHz mit 4 GB RAM. Es hat zwei SATA-Festplatten: eine hat das Betriebssystem und einige andere Dinge, und die Sicherungsdiskette ist eine 1 TB WDC WD1002FAEX-00Z3A0
. Das Motherboard ist ein Asus P7P55D.
Bearbeiten : Die Maschine ist ein Debian-Keuchen mit Linux 3.16.3-2~bpo70+1
. So wird das Dateisystem gemountet:
root@thames:~# mount|grep rsnapshot
/dev/sdb1 on /var/backups/rsnapshot type btrfs (rw,relatime,compress=zlib,space_cache)
Bearbeiten : Die Verwendung rsync -a --delete /some/empty/dir mydir
dauert ca. 6 Stunden. Eine deutliche Verbesserung gegenüber rm -rf
, aber immer noch zu viel, denke ich. ( Erklärung, warum rsync
schneller ist alsrm
: "[M] ost-Dateisysteme speichern ihre Verzeichnisstrukturen in einem btree-Format. Die Reihenfolge [in], in der Sie Dateien löschen, ist ... wichtig. Sie müssen vermeiden, den btree beim Ausführen der Verknüpfung neu auszugleichen .... rsync -a --delete
... löscht in der richtigen Reihenfolge ")
Bearbeiten : Ich habe eine andere Festplatte angehängt, die 2,2 Millionen Dateien (rekursiv) in einem Verzeichnis hatte, aber unter XFS. Hier einige Vergleichsergebnisse:
On the XFS disk On the BTRFS disk
Cached reads[1] 10 GB/s 10 GB/s
Buffered reads[1] 80 MB/s 115 MB/s
Walk tree[2] 11 minutes 43 minutes
rm -rf mydir[3] 7 minutes 12 hours
[1] Mit hdparm -T /dev/sdX
und hdparm -t /dev/sdX
.
[2] Zeit, die find mydir -print|wc -l
unmittelbar nach dem Start benötigt wird.
[3] Auf der XFS-Festplatte war dies kurz nach dem Gehen mit dem Baum find
. Auf der BTRFS-Festplatte handelt es sich um die alte Messung (und ich glaube nicht, dass der Baum zwischengespeichert wurde).
Es scheint ein Problem mit zu sein btrfs
.
btrfs
? Dies ist natürlich möglich, aber denken Sie, dass es relevant sein könnte? Im Moment kann ich mich nicht erinnern, warum ich mich entschlossen habe, es zu versuchenbtrfs
.btrfs
weil ich die transparente Komprimierung wollte. Jetzt:rsnapshot
verwendet harte Links. Es gibt keine Option, keine festen Links zu verwenden. Die Hardlinks überschneiden sich also mitbtrfs
der Copy-on-Write-Funktionalität, aber ich kann nicht viel dagegen tun.Antworten:
Nun, dies ist immer noch ein Btrfs-Problem. Es ist bekannt, dass das Löschen vieler kleiner Dateien im Vergleich zu anderen Dateisystemen ziemlich lange dauert.
Wenn Sie es nicht mögen, können Sie entweder warten, bis der Upstream es behoben hat, oder zu einem anderen Dateisystem wechseln, das es besser macht.
Ihr Hauptfehler ist jedoch die Verwendung eines alten Kernels (3.16, ja, es war bereits uralt, als Sie gepostet haben) mit btrfs. Btrfs ist ein Dateisystem, das sich noch in der Entwicklung befindet. Sie sollten daher immer bei der neuesten und besten Kernel-Version bleiben, um mit den Verbesserungen in Kontakt zu treten. Wenn Ihre Distribution keine Backports ausführt, können Sie dies entweder selbst tun oder Sie sind geschraubt.
Btrfs hat in Kernel-Version 3.19 viele Leistungsverbesserungen erzielt - dies ist die Mindestversion, die Sie in der Produktion verwenden sollten. Ihre Kernel-Version 3.16 ist ohne Backports einfach zum Kotzen.
Denken Sie auch daran, dass er laut Chris Mason Btrfs inzwischen als stabil, aber noch nicht produktionsbereit ansieht.
quelle
btrfs
. Zu hochgespielt, während seine Entwicklung ewig zu dauern scheint.Ich bin ein bisschen zu spät zu dieser Party, aber hier ist ein Trick, um extrem große btrfs-Bäume sehr schnell zu löschen:
Der Kernel wird im Hintergrund Speicherplatz zurückfordern, sodass Sie nicht sofort über den verfügbaren Speicherplatz verfügen. Der Vorgang sollte jedoch viel schneller sein als das Löschen von Benutzerland.
quelle
Sie können das Verzeichnis umbenennen und dann das umbenannte Verzeichnis in einem Hintergrundprozess löschen. Dies wird den Löschvorgang nicht beschleunigen. Dies würde es dem Programm jedoch ermöglichen, mit einem leeren Verzeichnis fortzufahren, während der Löschvorgang auf der Seite ausgeführt wird.
Ich bin nicht sicher, ob dies in Ihrem Anwendungsfall funktionieren wird. Dies hängt davon ab, ob das Programm erst fortgesetzt werden kann, wenn sich die Festplatte im Leerlauf befindet (dh einige schwere Festplattenoperationen ausführen). Es hängt davon ab, ob das Programm die Festplatte mit vielen Daten füllen wird.
quelle