Bazı kontrol dışı günlükleriniz var. Her gün deli gibi silmek yerine, hızlı büyüyen dosyayı veya dosyaları bulun ve buna neyin sebep olabileceğini araştırmak için içeriye bakın . Belki bir program, bazı koşulları günlüğe kaydeden bir döngüde dönüyor. Bu programı devre dışı bırakın, günlüğe kaydetmeyi devre dışı bırakın veya şikayet ettiği durumu düzeltmeye çalışın.
Bir dosya gözünüzün önünde büyüyorsa ve hangi programın yazdığını bilmiyorsanız, bunu kolayca bulabilirsiniz. İşte bir örnek. Kim /var/log/syslog
açıldı? Şu fuser
komutu kullanıyoruz:
# fuser /var/log/syslog
/var/log/syslog: 602
Sadece bir süreç /var/log/syslog
açık. Süreç 602'dir. Bu nedir? Bize ile rahatsız etmeyelim ps
ve grep
fakat bakmak /proc
doğrudan dosya sistemi:
# ls -l /proc/602/exe
lrwxrwxrwx 1 root root 0 Mar 29 17:45 /proc/602/exe -> /usr/sbin/rsyslogd
Aha, öyle rsyslogd
. Biz sürpriz değil rsyslogd
sahiptir /var/log/syslog/
açık.
Bu yöntemin çalışması garanti edilmez. Bunun nedeni, programların dosyalara yazmak için dosyaları açık tutması gerekmemesidir. Bir dosyayı açan, ona ekleyen ve daha sonra kapatan bir işleminiz olduğunu varsayalım. Biraz daha zor bir soruşturmanız olacak. Eğer fuser
şans eseri "kırmızı elle" yakalamak kadar birçok kez koşabilir . Bu sürecin kendisi hızla varoluş içine girip çıkabilir. Başka bir sorun, birden çok işlemin dosyayı açabilmesidir, ancak yalnızca bir tanesi dosyayı büyütür. Bu durumda, sistem çağrılarını izleyebilirsiniz.
# fuser /var/log/huge-annoying-file
/var/log/huge-annoying-file: 1234 23459
Hata! İki süreç açık: 1234 ve 23459. Bakalım ne yapıyorlar:
# strace -p 1234
Process 1234 attached - interrupt to quit
select(1, NULL, NULL, NULL, {9, 922666}
Hiçbir şey yapmıyor, sadece bir select
çağrıyı engelliyor . İzi kırmak için Ctrl-C:
select(1, NULL, NULL, NULL, {9, 922666}^C <unfinished ...>
Bir sonrakini kontrol edin:
# strace -p 23459
write(5, "Useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
^C
Hata! Bu sürekli yazıyor. Kötü olan olmalı. Hatta sürecin yazdığı dosya tanımlayıcı 5'in aslında büyük dosya olup olmadığını kontrol edebiliriz:
# ls -l /proc/23459/fd/5
lr-x------ 1 root root 64 Apr 3 23:39 /proc/23459/fd/5 -> /var/log/huge-annoying-file
Bozuk bir dosya sisteminiz olduğundan şüphelenmiyorum, ancak tam denetimi zorlamak için DVD önyükleme yapmanız gerekmez.
İlk olarak, dosya sisteminizin maksimum bağlama sayısı ayarını gözden geçirin. Df komutunu kullanarak bölümünüzü tanımlayın. Burada bir Ubuntu sistemi örneği:
# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 18062108 5499320 11645284 33% /
udev 392152 4 392148 1% /dev
tmpfs 159768 768 159000 1% /run
none 5120 0 5120 0% /run/lock
none 399416 200 399216 1% /run/shm
/dev/sr0 43668 43668 0 100% /media/VBOXADDITIONS_4.1.4_74291
/
Dosya sisteminin kurulu olduğunu görebilirsiniz /dev/sda1
. Yani /dev/sda1
kök bölümü (ve bu özel sistemindeki tek bölüm) depolama cihazıdır.
Bu dosya sisteminin bazı özelliklerine bakalım. Monte edilmiş olsa bile bunu yapmak güvenlidir. Komut çok fazla çıktı verir. İşte bir alıntı:
$ dumpe2fs /dev/sda1
dumpe2fs 1.42 (29-Nov-2011)
Filesystem volume name: <none>
Last mounted on: /
[ ... SNIP ... ]
Last mount time: Fri Mar 29 17:45:18 2013
Last write time: Tue Mar 5 09:08:03 2013
Mount count: 22
Maximum mount count: 22
[ ... SNIP ... ]
Hey bak, montaj sayısı maksimum montaj sayısına eşittir. Bir dahaki sefere yeniden başlattığımda dosya sistemi kontrolü yapılacak. Önemli olan, montaj sayısının pozitif bir değer olmasıdır. Sizinki sıfırsa, bunu kullanarak 22 gibi bir pozitif değere değiştirin tune2fs -c 22 /dev/whatever
. Sıfır, bölümün kaç kez monte edildiğine bakılmaksızın hiçbir zaman bir denetimin zorlanmadığı anlamına gelir. Nadiren yeniden başlatılan sistemlerin değerleri düşük olmalıdır. Yılda bir kez çalışan bir sunucu muhtemelen her yeniden başlattığında bir fsck kullanabilir. Tarih tabanlı kontrol aralıklarını da ayarlayabilirsiniz.
Şimdi bir kontrolü zorlamak için, gerçek sayıyı maksimuma eşit veya daha büyük olacak şekilde geçersiz kılabilir ve ardından yeniden başlatabilirsiniz . Yani sermaye ile bitti C
: tune2fs -C 1234 /dev/whatever
. Şimdi bölüm, bir veya iki basamaklı maksimumdan daha büyük olan çek olmadan 1234 kez monte edilmiş gibi görünüyor.
sudo du -sh /var/* ~/.xsession-errors
Lütfen çıktıyı eklemek için yayını düzenleyebilir misiniz ? (aptalca bir şey varsa havaya uçmayı beklediğim bu iki yer). Aksi takdirde, Eliah ile birlikteyim - bu disk sorunlarının bir göstergesidir. Bunu ciddiye al.