Lösung 1:
Siehe auch rm in einem Verzeichnis mit Millionen von Dateien; tangential verwandt, aber wir besprechen es dort.
Soweit mir bekannt ist, gibt es zumindest auf ext2/3 keine (Online-)Möglichkeit, sie kurz vor Löschen + Neu erstellen zu verkleinern. Unmounted, mehrere Quellen empfehlen e2fsck -D
könnte funktionieren, obwohl ich keine persönlichen Erfahrungen mit dieser Option machen kann.
Einige Referenzen zum Weiterlesen:
- http://linux.derkeiler.com/Mailing-Lists/Kernel/2009-05/threads.html#06569
- http://fedoraforum.org/forum/showthread.php?t=120654
Lösung 2:
Ich musste kürzlich ein NFS-Verzeichnis löschen und neu erstellen, um seine Größe zu verringern, nachdem es zuvor aufgebläht war. Dabei habe ich einen ziemlich effizienten Weg gefunden, dies mit rsync und harten Links zu tun. Diese Methode vermeidet das Kopieren der eigentlichen Dateien, erreicht aber dennoch das Ziel, das Verzeichnis mit demselben Inhalt neu zu erstellen.
Da wir für diesen Vorgang während unseres Wartungsfensters eine Ausfallzeit in Anspruch nehmen mussten, war es für uns wichtig, das neu erstellte Verzeichnis so schnell wie möglich verfügbar zu machen. Wenn Ihnen die Einfachheit wichtiger ist, ändern Sie den ersten Befehl zum Verschieben in ein 'rm -rf' im Quellverzeichnis und überspringen Sie den anderen 'rm -rf'-Befehl.
Ich habe diese Befehle aus einem größeren Prozess extrahiert und die Verzeichnisnamen abstrahiert, also entschuldigen Sie, wenn ich bei dieser Übersetzung einen Fehler gemacht habe.
mkdir /tmp/holding_dir/
rsync -ai --delete --link-dest=/path/to/source_dir/ /path/to/source_dir/ /tmp/holding_dir/
mv /path/to/source_dir/ /tmp/deleteme/
mv /tmp/holding_dir/ /path/to/source_dir/
Später entfernen wir dann das Verzeichnis. Abhängig von der Größe müssen Sie möglicherweise eine ausgefeiltere Technik anwenden, um dies zu tun. Beispielsweise kann es effizienter sein, rsync mit dem Flag --delete zu verwenden, um ein leeres Verzeichnis in dieses Verzeichnis zu synchronisieren.
rm -rf /tmp/deleteme/
Lösung 3:
Ich würde es so machen.
cp -al
Alter neues Verzeichnis
&&
mv
altes Verzeichnis tempname
&&
mv
neues Verzeichnis altes Verzeichnis
&&
rm -r
tempname
wo olddir ist das Verzeichnis, das Sie newdir verkleinern möchten und tempname sind temporäre Dateinamen
cp -al
erstellt Links zum Inhalt von olddir im neuen Verzeichnis und die nächsten drei Befehle tauschen sie mit newdir aus und bereinigen.