Dizin boyutu küçültülüyor / sıfırlanıyor mu?


11

Bir dizin girişini daraltmanın bir yolu var mı?

Dovecot maildir dizinlerimin boyutu varsayılan 4096'dan birkaç mega kadar arttı ve disk kotalarıyla uğraşıyor.

Bulduğum tek yol, dizini silmek ve yeniden oluşturmaktır. Bir yerde büyülü bir işlev olmasını umuyorum - el kodlu montajcı dışında her şeye açıkım.

Düzenleme: Gelecek nesiller için,> 4096 yönergelerini bulmak için:

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

Yanıtlar:


6

Milyonlarca dosya içeren bir dizindeki rm'ye bakın ; 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 işlemlerinden kısa sürede küçültmenin (çevrimiçi) yolu yok. Bağlantısız, çeşitli kaynakların e2fsck -Dişe yarayabileceğini öne sürüyor , ancak bu seçenekle hiçbir kişisel deneyim talep edemiyorum.

Daha fazla okuma için bazı referanslar:


1
İlk bağlantı özellikle yardımcı oldu: sorunumu özellikle ele aldı (posta sunucuları) ve Ted
Tso'nun

3

Son zamanlarda daha önce şişirildikten sonra boyutunu küçültmek için bir NFS dizinini silmek ve yeniden oluşturmak zorunda kaldım. Bu süreçte, rsync ve sabit bağlantıları kullanarak bunu yapmanın oldukça etkili bir yolunu buldum. Bu yöntem, aynı içeriğe sahip dizini yeniden oluşturma hedefini gerçekleştirirken, gerçek dosyaların kopyalanmasını önler.

Bakım penceremiz sırasında bu işlemi yapmak için aksaklık süremiz gerektiğinden, yeniden oluşturulmuş dizini mümkün olan en kısa sürede kullanılabilir hale getirmek bizim için önemliydi. Basitlik sizin için daha önemliyse, ilk taşıma komutunu kaynak dizinde 'rm -rf' olarak değiştirin ve diğer 'rm -rf' komutunu atlayın.

Bu komutları daha büyük bir işlemden çıkardım ve dizin adlarını soyutladım, bu yüzden bu çeviride bir hata yapmışsam ö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/

Sonra dizini kaldırıyoruz. Boyuta bağlı olarak, bunu yapmak için daha sofistike bir teknik kullanmanız gerekebilir. Örneğin, boş bir dizini bu dizine eşitlemek için --delete bayrağıyla rsync kullanmak daha verimli olabilir.

rm -rf /tmp/deleteme/

2

Ben böyle yapardım.

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

nerede olddir dizindir küçültmek istediğiniz newdir ve tempname geçici dosya adları şunlardır

cp -aliçeriğine bağlantılar oluşturur olddir içinde newdir ve önümüzdeki üç komutları newdir ve temiz up ile değiş tokuş ediyorlar.


kaygan. cp -l hakkında hiç bilmiyordum
Kevin Buchs
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.