Paul Richards, Jörg Wunsch, and Robert Watson tarafından yazılmıştır.
Geliştirme çekirdeğine çalışırken uç durumlarda , aşırı yüklemelerde , onbinlerce bağlantıda , limiti aşan kullanıcısayısında ,yüzlerce jail(8) kullanımında yada FreeBSD-STABLE üzerinde aygıt sürücülerinin yeni özelliklerini kullanırken çekirdek göçebilir. Bu durumda "Kernel Panic " uyarısıalırsınız. Bu bölümde bu duruma sebep olan hatalara nasıl ulaşabileceğimizi anlatacağız.
Çekirdeğin çökmesi durumunda sistem kaçınılmaz olarak yeniden başlatılacaktır. Sistemin yeniden başlatılmasısonucu hafızada ve takas (swap) bölümünde bulunan veriler silinecektir.Hafızada bulunan bu bilgileri korumak için çekirdek takas (swap ) bölümünü geçici depolama alanıolarak kullanır.Göçmenin ardından anabellekte bulunan veriler buraya kaydedilir.Sistem yeniden başlatıldıktan sonra çekirdeğin burada bulunan görüntüsü incelenerek hatalarıayıklanabilir.
Not: Geçici depo bölümü olarak kullanılan takas (swap) aygıtıburada hala swap sistemi ile devam edecektir. Bu yüzden non-swap aygıtlar mesela CDRW gibi aygıtlar desteklenmez. Swap aygıtıdemek harddisk'te swap için ayrılmışbölüm demektir.
Çekirdeğin çökmesine ilişkin çeşitli tiplerde dökümler mevcuttur. Tam hafıza dökümü anabelleğin bütün verilerini tutarken , mini dökümler sadece çekirdeğe ait sayfaların kaydedilmesini sağlar.Bunun yanında yazı halinde gelen dökümler interaktif yada betik ile tanımlanmışhata ayıklama programınıkullanarak elde edilen çıktılarıtutar.FreeBSD 7.0 için mini dökümler varsayılan düzendir. Birçok durumda tam hafıza dökümünde görebileceğimiz bütün bilgileri bize verecektir.Çünkü bir çok problem çekirdeğin durumlarınıgözlemleyerek giderilebilir.
Çekirdeğin içeriğini döküm aygıtına yazdırmadan önce bu aygıtın yapılandırılmasıgereklidir.Çekirdeğe dökümün nereye yapılacağını bildirmek için komutu ile aygıt belirtilir.Eğer döküm takas (swap) bölümüne gerçekleştirilecek ise bu komuttan önce komutu ile swap bölümü ayarlanmalıdır. Genellikle dosyasıiçinde bulunan dumpdev değişkenin swap bölümünün yoluna ayarlanmasıile yada AUTO değeri kullanarak bu mesele halledilebilir.Bu tavsiye edilen yöntemdir.FreeBSD 6.0 için varsayılan değer AUTOdur.
Alternatif olarak döküm aygıtıçekirdek konfigrasyon dosyasında
config(5)satırınıkodlayarak belirtilebilir.Bu yöntem artık eskimişolup sadece çekirdek
dumpon(8)
        kullanılmadan önce göçmüşise kullanılabilir.İpucu: /etc/fstab dizininde yada komutu ile swap aygıtlarını görüntüleyebilirsiniz.
Önemli: Çekirdek göçmeden önce
rc.conf(8)dosyasında dumpdir değişkeninin ayarlanmış olmasına dikkat edin.
# mkdir /var/crash # chmod 700 /var/crash
Çekirdeğin dökümü yapıldıktan sonra swap aygıtıbağlamadan bu dökümün açılmasıgerekir. Döküm aygıtından döküme erişebilmek için
savecore(8) programınıkullanırız.Eğer
dumpdevdeğişkeni rc.conf(5) dosyasında ayarlanmışise bu komut çoklu kullanıcısistemi ile başlatıldığında otomatik olarak çalışacaktır.Dosyanın yerleştirileceği adres yine bu dosyada bulunan
dumpdirdeğişkeni ile belirtilen yer olacaktır. Bu değer varsayılan olarak /var/crash dizinidir ve dökümler vmcore.0 olarak adlandırılır.
Daha önceden bir vmcore.0 dosyasıoluşturulmuşise çekirdek noktanın ardından gelen sayıyı1 arttırarak yeni dökümlerin bu dosyanın üzerine yazılmasınıönleyecektir (vmcore.1 gibi). Hata ayıklarken büyük ihtimalle siz en son yapılan dökümü inceleyeceğinizden sayıdeğeri en yüksek olan dökümü açmalısınız.
İpucu: Eğer yeni çekirdeği test ediyorsanız fakat sistemi çalışır tutmak için farklıbir çekirdeği başlatıyorsanız boot satırında -s kullanarak tek kullanıcılımodda başlatın ve aşağıdaki adımlarıuygulayın.
# fsck -p # mount -a -t ufs # make sure /var/crash is writable # savecore /var/crash /dev/ad0s1b # exit # exit to multi-user
Bu komutlar çekirdek dökümünü /dev/ad0s1b bölümünden alır ve /var/crash dizini altına kaydeder. Bunu gerçekleştirmek için /var/crash dizininde yeterli yeriniz olduğundan emin olmalısınız. Bizim kullandığımız swap bölümü /dev/ad0s1b olarak tanımlıise de siz kendi sisteminizde gerekli bölümü yazmalısınız.