Disk alanımı ne yiyor?


13

Linux Mint 14 Nadia kullanıyorum. Linux bölümünde 10G vardır. Sistem başladığında du% 80 kullanım bildirir. Daha sonra kullanım% 100'e ulaşıncaya kadar yavaş yavaş büyür ve sistem kullanılamaz hale gelir. (Gün veya hafta sırasıyla olabilir). Yeniden başlattıktan sonra kullanım% 80'e sıfırlanır.

En garip şey du, hiçbir değişiklik göstermemesidir.

İşte bu komutların çıktıları (Windows ve harici sürücü bölümleri ayrılmıştır):

# --- Just after reboot ---

$ df -h     
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.8G  7.3G  2.0G  80% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            428M  292K  428M   1% /dev
tmpfs            88M  1.3M   87M   2% /run
none            5.0M     0  5.0M   0% /run/lock
none            437M  288K  437M   1% /run/shm
none            100M   12K  100M   1% /run/user

$ sudo du -x   -d1 -h /
186M    /opt
512M    /var
11M /sbin
556K    /root
1.3G    /home
613M    /lib
8.0K    /media
4.6G    /usr
16K /lost+found
111M    /boot
39M /etc
4.0K    /mnt
60K /tmp
9.1M    /bin
4.0K    /srv
7.3G    /            # <-- note this


# --- After some time ---

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.8G  9.1G  199M  98% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            428M  292K  428M   1% /dev
tmpfs            88M  1.3M   87M   2% /run
none            5.0M     0  5.0M   0% /run/lock
none            437M   27M  411M   7% /run/shm
none            100M   28K  100M   1% /run/user

$  sudo du -x   -d1 -h /
186M    /opt
511M    /var
11M /sbin
556K    /root
1.4G    /home
613M    /lib
8.0K    /media
4.6G    /usr
16K /lost+found
111M    /boot
39M /etc
4.0K    /mnt
520K    /tmp
9.1M    /bin
4.0K    /srv
7.3G    /              # <-- note this

(Not: Hazırda bekletme modunu kullanıyorum. Hazırda bekletme modundan sonra kullanım aynı kalır ve yeniden başlatıldıktan sonra% 80'e sıfırlanır.)

Alanı neyin yediğini nasıl izlerim?

Bu soruyu okudum . Hala karanlıktayım. Bu davranıştan hangi programın sorumlu olduğunu nasıl öğrenebilirim?

Düzenlemeden sonra : bulundu. Alan, tarafından görülen çekirdek günlüğü tarafından talep edilir dmesg. Makinem saniyede 5 oranında hata ürettiği için dolar. ( Bu hata ile ilgilidir .) Benzer bir soruna sahip gelecek okuyucuların - yavaşça doldurulan disk alanını doldurmalarına izin verin - nedeni aramayı dudeneyin dmesg.


1
Büyük dosyaları | dizinleri bulmak için ncdudüz üzerinden tercih ederim du. Herhangi bir şey yapmanıza izin vermeden önce tüm dizin ağacını tarar; belirli bir yoldan geçmek isteyebilirsiniz (örneğin, ncdu /varhatta sadece ncdu ~)
Blacklight Shining

Bu sitede zaten birkaç iyi cevap .
Sparhawk

Yanıtlar:


15

Tekrarlanan yürütme

sudo du -x   -d1 -h /

(dizin ağacından aşağı) size alanın nerede kullanıldığını söylemelidir. Bu muhtemelen hangi uygulamanın buna neden olduğunu daha fazla araştırma yapmadan açıklar.

görünmez dosyalar

Eğer dudaha sonra bu dosyaları göstermez olasılıklardan biri dosyaları silinir. Bir dosya (veya daha doğrusu: dosya adı kullanımdayken adı, yani bir dizindeki girişi) silinebilir. Bu dosyayı işaret eden geçerli bir dosya tanımlayıcı olduğu sürece birimdeki alanı kaplar (boş bir dosya değilse ...).

cat >file &
ls -l file
rm file
ls -l file
# PID of cat is 19834
ls -l /proc/19834/fd
lrwx------ 1 hl hauke 64 11. Feb 19:16 0 -> /dev/pts/0
l-wx------ 1 hl hauke 64 11. Feb 19:16 1 -> /crypto/home/hl/tmp/file (deleted)
lrwx------ 1 hl hauke 64 11. Feb 19:15 2 -> /dev/pts/0

Bu dosyaları şununla bulabilirsiniz find:

find /proc/ -mindepth 3 -maxdepth 3 \
-regex '/proc/[1-9][0-9]*/fd/[1-9][0-9]*' -type l -lname '*(deleted)' \
-printf '%p\n     %l\n' 2>/dev/null

Sorununuza neden olan tek bir büyük dosya veya daha küçük dosyalar olabilir. Sistemimde şu anda yaklaşık 30 dosya var (sadece beş işleme ait). ls -lbu dosyaların boyutunu gösterir ancak bu değeri almak mümkün görünmemektedir find.

İşlem öldürüldükten sonra, alan dftekrar dosya sistemi ( ) tarafından kullanılabilir hale gelir .


Bu sorumu ele almıyor. dutüketilen alanda değişiklik olmadığını bildirir: başlangıçta 7.3G ve zaman geçtikten sonra 7.3G. dfraporlar 7.3G başlangıçta ücretsiz ve zaman geçtikçe 10G'ye kadar. Sorunu bulamıyorum du.
Arry

@Arry Gerçekten çok hızlı okudum.
Hauke ​​Laging

8

Gibi bir şey kullan

lsof -s | grep deleted | sort -k 8

hangi işlemlerin silinen dosyaları açık tuttuğunu görmek için. Önemli alanlar ikinci (PID) ve sekizinci (sondan üçüncü; dosya boyutu).

(Çoğaltılan satırlara dikkat edin, bunları iki kez saymayın. PID'yi ve dosya yolunu (son alan) veya inode numarasını (ikinci ila son alan) kontrol edin.)

Bundan sonra, muhtemelen suçlu olan bir süreç bulursanız, nasıl düzeltileceğini görebiliriz.


İyi bir öneri, ancak benim makinemde bu komut sadece 2k boyutunda 2 açık silinen dosyayı rapor ediyor, bu da zaman zaman bazı başıboş süreçler tarafından tüketilen 2.7G'den çok daha fazla ağlıyor.
Arry

Bu harika bir öneriydi ve gerçekten de ana soruya benzer bir sorunu çözmeme yardımcı oldu. Df ve du komutları arasında büyük bir fark vardı. Benim özel durumumda, dönen günlükleri ve günlükleri ileten bir hizmetim var (bu örnekte logtash). Logstash hizmeti, silinmiş olsa bile döndürülen günlükleri açık tutuyordu. Bu du ve df arasındaki tutarsızlığa neden oluyordu. Logstash hizmeti yeniden başlatıldıktan sonra disk alanı doğru bir şekilde ortaya çıktı.
aemus

Süresiz olarak büyüdüğüm ve sonunda diskimi dolduran yalnızca bir ek dosyası yazma işlemim vardı. Sonra o dosyayı rm karar verdi ama süreç dosya tanımlayıcıyı kapatmadı, bu yüzden bir şekilde hala kullanılıyor oldu. Süreci yeniden başlatmak ve AOF boyutunu sınırlamak sorunumu çözdü.
aviggiano

Bunun kök ayrıcalıkları gerektirdiğini belirtmek gerekir. Ayrıca, sudo lsof -s | grep deleted | sort -hk7sayısal bir tür elde ederdim . -H olmadan, sıralama numaraları ile komik sözcüksel şeyler yapar.
Derek

Bu harika şeyler. Yukarı-olarak
teknik okul

4
find / -size +10000k -print0 | xargs -0 ls -l -h

Dan 10MB + daha dolduruyor yinelemeli şeyi bulmak için bunu kullanın /(root) ve ile çok sayıda detayları ile görüntülemek ls -liçinde xargs. 1000000 (2 ekstra sıfır) yazarsanız, örneğin 1GB + alabilirsiniz.

du / -h --max-depth=1 | sort -h

Ayrıca du'yu kullanabilir ve elle manuel olarak kazabilirsiniz.


1

Bu olduğunda, her zaman belirli alt dizinlere odaklanıyorum. Çoğu Linux dağıtımının bağlı olduğu FHS yapısı, bunu göz önünde bulundurarak düzenlenmiştir.

Önce bakın /var, ardından /home.

$ sudo du -x -d1 -h /var  | sort -hr`

$ sudo du -x -d1 -h /home | sort -hr`

Odağınızı bu konumlardan herhangi birindeki alt dizinlere daraltabilirsiniz. Oraya bakmaktan yorulduktan sonra genellikle /rootadresindeki diğer alt dizinlere geçiyorum /.

Red Hat tabanlı bir dağıtımsa, yumgüncellemeleri gerçekleştirmek için kullanılan önbellek çok fazla yer kaplıyor olabilir. Bu komutu temizlemek için kullanabilirsiniz:

$ yum clean packages

Kullanan diğer dağıtımlar aptbenzer bir şey yapabilir apt-get clean.

Ben de /dizinin üst kısmında bu komutu çalıştırmak , bu konum bazen başıboş günlük dosyaları için kaynak olabilir.

$ ls -la /

Nokta dosyalarına özellikle dikkat edin! .blahÖrneğin isimler .



0

Neredeyse aynı bir durum var.

Benim durumumun nedeni VMware idi. Aynı makinedeki diğer VMwares'lerden biri, disk alanlarını tüketti. Bu yüzden disk alanı kullanımım% 100 idi.

Komşu VMware'den büyük dosyaları sildikten sonra düzgün çalışıyor.

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.