Linux'ta delicesine büyük bir klasörü silmek nasıl


1

Yanlışlıkla sunucuyu kırabilecek kadar genişleyen bir önbellek klasörümüz var. Sunucuda 8 GB RAM var ve rmiçindeki tüm dosyaları silmek için basit bir komut çalıştırdığımda , RAM'in tamamını tüketiyorum ve 5 saat sonra hala silmiyorum.

Bu yüzden kullanmaya çalışıyoruz, findancak 12 saat çalıştıktan sonra da başarısız oluyor. Şimdi son 24 saatten itibaren bir findwith perlifadesi çalışıyor ve klasör hala silinmiyor aslında tek bir dosya silinmiyor.

Biz ne zaman lsüst klasör, bu klasör boyutu etrafında gösterir 1GB, sadece dosyalar kaç milyon olduğunu merak ediyorum.

Öyleyse benim sorum, dosyaları listelemeden silebilmemizin bir yolu var mı, bu yüzden sadece bir liste yapmadan içindeki klasörü veya dosyaları siler (aka getdir()sistem çağrıları gibi arama yapma)

Gerçekten şimdi ondan kurtulmak için sunucuyu biçimlendirmeyi düşünüyorum.

DÜZENLE:

Ben kullandım findile -deleteve ile-exec rm -f {}

EDIT2:

Bu makaleye dayanarak şu anda perl komutunu çalıştırıyoruz (bu komutun halen çalıştığı yaklaşık 24+ saattir), ancak bize görülebilen klasör boyutunda hiçbir şey yapılmadı.


Ops Aynı sayfayı gönderiyordum :-) Bazı sorular ve notlar: hangi filesistem hangi (dahili?), Hangi seçeneklerin monte edilmiş? Sunucu çalışıyor mu? Dizini taşımaya (yeniden adlandır) ve yeniden oluşturmaya çalıştınız mı (başka bir dosya sisteminde bile)? Sistem çalışıyorsa bu, yeni dosyalar yazma veya değiştirme istekleri ve diskteki trafiğe bağlı bazı darboğazlardan kaçınmalıdır. Sunucu daha nice -n 18önce (veya her neyse) kullanımdaysa , CPU isteklerini azaltabilirsiniz. Unutmayın ki, yorumlardan birinde, rm -rf directory/ bir klasörde milyarlarca dosya için daha hızlı çalıştığı belirtiliyor ...
Hastur

Not Eğer dosya isimleri hakkında bilginiz varsa (yani, hangi isimleri, yani ortak bir ön ek ve rastgele bir parçayı kastediyorum), perl ifadelerini ve diğer çözümü, bir alt dosya alt kümesinde kullanabilir ve kimin daha hızlı çalışacağını test edebilirsiniz. bu diskte. Eğer sistem kapalıysa, o dizinden başkasını başka bir yere kopyalamak için imkanınız var ve o kadar uzun değil ... gerçekten diskleri tekrar biçimlendirmeyi düşünebilirsiniz. Bize bildirin ...
Hastur

@Hastur Yeni yazma veya değiştirme işlemlerini önlemek için boş klasörü yeniden adlandırıp yeniden yarattık. Plesk'imiz var ve bizim için web sitelerini ve veritabanını barındırıyor.
Sumit Gupta,

Sistem çalışıyor ve evet biçimlendirme aslında demek oluyor ki, bu sunucuyu çöpe atmak ve tüm dosyaları başka bir makineye aktarmak (ki bu bizim son seçeneğimiz). Sistemi çevrimdışına alamayız. Aslında bu makaledeki tüm komutu çalıştırıyoruz, çoğunu 4-5 saat veriyoruz, ancak hiçbir şey bu dosyalara dokunmuyor. Şimdi perl'in ne beklediğini ve ne olduğunu görmek için emir aldık, 24 belki 36 saat geçti ve bu emir hala arka planda bir şeyler yapıyor.
Sumit Gupta,

Yeni dizinde bu 24+ saatte kaç geçici dosya oluşturuldu? Bundan sisteme sormadan, eski dizine erişim isteği hakkında bir fikriniz olabilir. Taşınırsanız (aynı dosya sisteminde) veya tutamaçları açık olan bir dosyayı silerseniz , dosya hala kullanılabilir . Önbellek dir'in yeni bir FS / diskte yapılması eskisine gönderilen istekleri azaltır. Bu önbellek dizininin iç içe geçmiş bir yapısının gelecekteki planlaması için, bu cevabı Gilles'dan okumak ilginç olabilir .
Hastur

Yanıtlar:


2

Bir seçenek -deleteanahtarını kullanmak olacaktır find. Zaten kullandığını söylediğini biliyorum find, ama tam olarak nasıl kullandığını söylemedin. Normalde bu her dosyayı dener ve numaralandırır, ancak aşağıdaki komutu kullanarak, dosyaları buldukça silmeleri gerektiğine inanıyorum:

find . -type f -print -delete( -printÇıktı almak istemezseniz ve elbette cdklasörünüze kaldırabilir veya doğru klasör adını girebilirsiniz)

En azından bir denemeye değer.

Düzenleme - işte @ unix üzerinden başka bir sorudan öneri

mkdir empty_dir
rsync -a --delete empty_dir/    yourdirectory/

Peki, diğer stackoverflow cevabına dayanarak bunu denedim, ancak yine yazdırmak için dizin dosyaları arasında listelemek zorunda ve bu yüzden buna değer değil.
Sumit Gupta,

@SumitGupta Başka bir öneri daha eklendi - bul komutunu onsuz da deneyebilirsiniz -print, ilerlemeyi görmemek sakıncası yoksa isteğe bağlıdır.
Jonno

1

Çeşitli önerileri denedikten sonra, benim için işe yarayan, ihtiyacım olan dosyaları yedeklemek, montajı biçimlendirmek ve geri yüklemek oldu. Elbette bu, yedeklemek istediğiniz dosyaların büyüklüğüne bağlıdır. Ancak, yine de sadece dosya sistemlerinizi yedeklediğinizi varsayabilirsiniz - bu durumda kolayca biçimlendirebilir ve geri yükleyebilirsiniz.


Bizim için çalışmanın bir yolu yukarıdaki klasör yapısını silmek ve yapının yerini
Solar Mike

Eğer yapabilirsen bu güzel bir öneri. Ancak Büyük Fiziksel sunucuda, her zaman bir seçenek değildir. İşlemin tamamlanmasını beklemek zorundasınız. :).
Sumit Gupta,
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.