Soru Dizin boyutunu küçültmek / sıfırlamak?


Bir dizin girişini küçültmenin bir yolu var mı?

Benim dovecot maildir dizinleri varsayılan 4096 Birkaç mega ve disk kotaları ile uğraşıyor.

Bulduğum tek yol, dizini silmek ve yeniden oluşturmaktır. Bir yerlerde büyülü bir işlev olduğunu umuyorum - El kodlu assembler haricinde her şeye açıkım.

Düzenle: Kimlilik için, direkleri bulmak> 4096:

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

10
2018-04-28 00:05


Menşei


Ayrıca bkz. stackoverflow.com/questions/4303008/... - oliver


Cevaplar:


Ayrıca bakınız milyonlarca dosya içeren bir dizinde rm; Teğetsel olarak ilgili, ama orada tartışıyoruz.

Bildiğim kadarıyla, en azından ext2 / 3'te, hayır, onları silme + yeniden oluşturma kısaltmak için hiçbir (çevrimiçi) yol yoktur. Sökülen, birkaç kaynak önermek e2fsck -D Bu seçenekle kişisel deneyim istemediğim halde işe yarayabilir.

Daha fazla okuma için bazı referanslar:


6
2018-04-28 00:40



İlk bağlantı özellikle yardımcı oldu: özel olarak sorunumu çözdü (posta sunucuları) ve Ted Tso'nun diyalogda tartılması gerçeği oldukça havalı;) - mikewaters


Son zamanlarda daha önce şişirilmiş sonra boyutunu küçültmek için bir NFS dizini silmek ve yeniden oluşturmak zorunda kaldım. Bu süreçte, rsync ve hard linkleri kullanarak bunu yapmak için oldukça verimli bir yol buldum. Bu yöntem, aynı dosyaların bulunduğu dizini yeniden oluşturma amacını gerçekleştirirken, gerçek dosyaları kopyalamayı önler.

Bakım operasyonumuz sırasında bu işlemi yapmak için aksama sürememiz gerektiğinden, yeniden oluşturulmuş dizinin mümkün olan en kısa zamanda hazır hale getirilmesi bizim için önemliydi. Basitlik sizin için daha önemliyse, ilk hareket komutunu kaynak dizinde bir 'rm -rf' olarak değiştirin ve diğer 'rm -rf' komutunu atlayın.

Bu komutları daha büyük bir süreçten çıkardım ve dizin isimlerini soyutladım, o yüzden bu çeviride bir hata yapsam özür dilerim.

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/

Daha sonra, dizini kaldırırız. Boyutu bağlı olarak, bunu yapmak için daha karmaşık bir teknik kullanmanız gerekebilir. Örneğin, boş bir dizini bu dizine eşitlemek için rsync'i --delete bayrağı ile kullanmak daha verimli olabilir.

rm -rf /tmp/deleteme/

3
2018-05-15 19:35





Bunu böyle yapardım.

cp -aloldirnewdir&& mvolddirtempname&& mvnewdirolddir&& rm -rtempname

nerede olddir küçültmek istediğiniz dizindir newdir ve tempname geçici dosya isimleri

cp -al içeriğine bağlantılar oluşturur olddir içinde newdir ve sonraki üç komut onları yenile ile değiştirip temizler.


1
2018-01-25 23:09