Zmniejszyć / zresetować rozmiar katalogu?


11

Czy istnieje sposób na zmniejszenie pozycji katalogu?

Moje katalogi maildir dovecot zwiększyły swój rozmiar z domyślnego 4096 do kilku megabajtów, i to jest bałagan z przydziałami dysku.

Jedyny sposób, który znalazłem, to usunięcie i ponowne utworzenie katalogu. Mam nadzieję, że gdzieś jest magiczna funkcja - jestem otwarty na wszystko, z wyjątkiem ręcznie kodowanego asemblera.

Edycja: Dla potomnych, aby znaleźć kierunki> 4096:

 find / -type d -size +4k -printf "%s\t%p\t%i\n" | sort -nr

Odpowiedzi:


6

Zobacz także rm w katalogu z milionami plików ; stycznie spokrewnione, ale omawiamy to tam.

O ile mi wiadomo, przynajmniej na ext2 / 3, nie, nie ma (online) sposobu, aby zmniejszyć je bez usuwania + odtwarzania. Wiele źródeł sugeruje e2fsck -D, że nie został zamontowany, ale nie mogę twierdzić, że korzystam z tej opcji.

Niektóre odniesienia do dalszego czytania:


1
Pierwszy link był szczególnie pomocny: konkretnie dotyczył mojego problemu (serwerów pocztowych), a fakt, że Ted Tso
włączył

3

Niedawno musiałem usunąć i ponownie utworzyć katalog NFS, aby zmniejszyć jego rozmiar po wcześniejszym rozdęciu. W trakcie tego procesu znalazłem dość wydajny sposób, aby to zrobić za pomocą rsync i twardych linków. Ta metoda pozwala uniknąć kopiowania rzeczywistych plików, jednocześnie osiągając cel ponownego utworzenia katalogu z tą samą zawartością.

Ponieważ potrzebowaliśmy przestoju, aby wykonać tę operację podczas naszego okna konserwacji, udostępnienie przebudowanego katalogu tak szybko, jak to możliwe, było dla nas ważne. Jeśli prostota jest dla Ciebie ważniejsza, zmień pierwsze polecenie przeniesienia na „rm -rf” w katalogu źródłowym i pomiń inne polecenie „rm -rf”.

Wyodrębniłem te polecenia z większego procesu i wyodrębniłem nazwy katalogów, więc przepraszam, jeśli popełniłem błąd w tym tłumaczeniu.

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/

Następnie usuwamy katalog. W zależności od rozmiaru może być konieczne użycie bardziej wyrafinowanej techniki. Na przykład użycie rsync z flagą --delete do synchronizacji pustego katalogu z tym katalogiem może być bardziej wydajne.

rm -rf /tmp/deleteme/

2

Zrobiłbym to w ten sposób.

cp -aloldir newdir && mvolddir tempname && mvnewdir olddir && rm -rtempname

gdzie olddir to katalog, który chcesz zmniejszyć newdir, a nazwa tymczasowa to tymczasowe nazwy plików

cp -altworzy linki do zawartości olddir w newdir, a następne trzy polecenia zamieniają je newdir i oczyszczają.


przysiek. nigdy nie wiedziałem o CP-1
Kevin Buchs
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.