Ich habe ein fehlerhaftes Programm geschrieben, das versehentlich ungefähr 30 Millionen Dateien unter / tmp erstellt hat. (Der Bug wurde vor einigen Wochen eingeführt und erzeugte ein paar Unterverzeichnisse pro Sekunde.) Ich konnte / tmp in / tmp2 umbenennen und jetzt muss ich die Dateien löschen. Das System ist FreeBSD 10, das Root-Dateisystem ist zfs.
In der Zwischenzeit ist eine der Festplatten im Spiegel defekt, und ich habe sie ausgetauscht. Das Laufwerk verfügt über zwei 120 GB SSD-Festplatten.
Hier ist die Frage: Der Austausch der Festplatte und die Neusilberung des gesamten Arrays dauerten weniger als eine Stunde. Dateien löschen / tmp2 ist eine andere Geschichte. Ich habe ein anderes Programm geschrieben, um die Dateien zu entfernen, und es kann nur 30-70 Unterverzeichnisse pro Sekunde löschen. Das Löschen aller Dateien dauert 2-4 Tage.
Wie ist es möglich, dass das Resilbern des gesamten Arrays eine Stunde dauert, das Löschen von der Festplatte jedoch 4 Tage dauert? Warum habe ich so schlechte Leistung? 70 Löschungen / Sekunde scheinen eine sehr sehr schlechte Leistung zu sein.
Ich könnte den Inode für / tmp2 manuell löschen, aber das wird den Speicherplatz nicht freigeben, oder?
Könnte dies ein Problem mit zfs sein, oder den Festplatten oder was?
df -h
und zpool list
und zfs list
.
rm -rf /tmp2
wird den Job nicht machen?
/tmp
sollte ein tmpfs
Dateisystem sein und wird im Speicher abgelegt.