Linux Açılırken Neler Olur
IBM uyumlu mimariye ( bu ne demek araştırın) sahip bir bilgisayara elektrik verdiğinizde ilk çalışan kod bios üzerindeki kod dur. Bu kod öncelikle donanımla ilgili “power on self test” dediğimiz testleri yapar. Daha sonar işletim sistemini bizim üzerinde belirttiğimiz kurallara göre CD, den veya harddisk ten boot etmeye çalışır.
Tam bu noktada; BİOS bir problem aşmak zorundadır. Boot etmeye çalışır diyoruz. Çünkü; ortada bios üzerine yazılmış küçük bir kod yapısından başka bir şey yoktur. Bios un çalıştırabileceği komutlar sınırlıdır. Bios üzerinde ext3, Fat32, NTFS gibi bir disk formatlarını okuyacak sürücü programları için yeterli yer olmadığı için bios harddiski control edemez.
Bu problemin çözümü için her harddisk üzerindeki ilk 512 byte lık alan MBR (Master boot record/Ana boot kaydı) için ayrılmıştır ve bu bölümün fiziksel adresini bios bilir. Bios power on self test i bitirdikten hemen sonra harddisk üzerindeki başlangıç bölümü olan MBR de kayıtlı kodu ram a yükler ve çalıştırır.
Tabiki bios üzerindeki alan, zaman içerisinde artırılabilirdi fakat bu aşamada başka bir problem vardır. Donanım üzerinde devamlı yazılıp okunmayan bios sizin hangi işletim sistemini kurduğunuzu ve ona ait file system yapısını nerden bilecek?
Belki yukarda belirttiğim işletim system tanıma problemide aşılabilirdi fakat bios üzerinden açılış düşüncesinde, Mühendisler işletim sistemi bağımsız olarak ilk açılışı yapması için bios u görevlendirmişler ve açılışta çıkan donanımsal sorunları işletim sisteminden oluşabilecek arızalardan soyutlamışlar.
Bios MBR ı yükler bu kod diskin ilk 512 byte ında bulunur ve sizin bilgisayara kurduğunuz işletim sistemi tarafından oraya yazılmıştır. Bu kodun içerisinde kısaca asıl açılış kodları için şu adrese git diye bir komut bulunmaktadır.
Bu sayede 1. Yükleyici (MBR içinde bulunan kod) 2. Yükleyiciyi veya işletim sistemi yükleyici diye de adlandırılan (Lilo veya Grub gibi) ön yükleyiciyi yükler.
2. Yükleyiciniz sizin kurduğunuz linux işletim sisteminin BOOT klasörünün altında bulunur
Şekilden de görüldüğü gibi kalilinux işletim sistemi ön yükleyici olarak grub kullanmaktadır. Grub un görevi Linux kernel ının yerini bulmak ve yüklemektir.
Bu arada grub ön yükleyicisi Lilo ön yükleyicisinden farklı olarak ext2 dosya sistemini okuyabilmektedir. Bu sayede ext2 dosya sisteminde tutulan kernel dosyasının disk üzerindeki adresini bulabilir.
Eğer sunucunuzda RAID yapısı var ise /boot partition u RAID yapısından ayrı olarak, ext2 bir disk kısmında (partition) bulunmalıdır.
Linux da kernel dosyasının adı vmlinuz dur ve bu kernel dosyası boot klasörünün altında bulunur.
Bu dosya sıkıştırılmış bir şekilde (gzip, bzip) gibi bir dosya şeklinde disk te tutulmaktadır. Bu sıkıştırılmış kod hiç açılmadan grub tarafından belleğe yüklenir. Yüklenen sıkıştırılmış kodun baş kısmı sıkıştırılmamıştır ve minimum ihtiyaçlarla bilgisayarı yönetecek ve geri kalan sıkıştırılmış kod u belleğe açacak bir kod bulunmaktadır.
Bu yöntem sayesinde grub programının boyutları minimum da tutulmaktadır.
Böylece Grub, Linux kernel ını (vmlinuz) yükleyince çalışan kernel kodu geri kalan sıkıştırılmış kodu belleğe açar ve belleğe kök dosya sistemi olarak adlandırılan initrd mount edilir.
Bu aşamadan sonra GRUB kontrolü çekirdeğe devreder.
Artık işletim sistemi initrd içerisindeki klasör ve dosyaların içlerini okuyabilmektedir.
İnitrd içerisinde asıl işletim sisteminin kök dosya sistemini anlayabilecek sürücü programı gibi asıl işletim sisteminin açılışı sırasında kullanılan dosyalar bulunmaktadır. Bu sürücülerin yüklenmesi ile birlikte geçici işletim sistemi tüm disk alanlarını okumaya başlar.
İşletim sisteminin kernel kodu sayesinde okumaya başladığı dosya sistemi içerisinden
Çalıştırdığı ilk program /sbin/init dir. !!!!!!!!!!!
Linux da çeşitli çalışma seviyeleri (runlevels) bulunmaktadır. Bu çalışma seviyeleri init programı sayesinde seçebiliriz.
Çalışma seviyeleri 0–6 arasında rakamlar ile ifade edilir.
Default seviye genelde 2 dir.
Aşağıda seviyelerin
0 Halt yani kapanış seviyesi
1 Tek kullanıcılı (single user) açılış ekranı windowsdaki güvenli mod gibi düşünebilirsiniz. Minimal açılış sağlar.
2, 3, 4, 5 Çok kullanıcılı (multi user) açılış modlarıdır
3 Komut arayüzlü ve çok kullanıcılı açılış modudur.
5 Grafik arayüzlü ve çok kullanıcılı açılış modududur.
6 Reboot yani tekrar başlatma modudur.
Halt dan farkı sistem kapanırken bazı dosyaları kaydeder ve yeniden açıldığında bu dosyalardan kaldığınız yerden devam edebilirsiniz.
Burada bilmeniz gereken ufak bir şey var.
İnternette ve birçok kitap ta hala açılış ayarlarının etc/inittab dosyasından yapılacağı ile ilgili bilgiler bulunmaktadır.
Fakat etc altına baktığınızda inittab dosyasını göremeyince öğrencilerin kafası karışmaktadır.
Bu konuyu biraz anlatalım istedim.
Kali Linux da /sbin/init altına baktığımızda
Görüyoruz.
Bu durum bize artık bu adreste init isminde bir program olmadığı onun yerine init isminde bir kısayol (windosw jargonu olarak) olduğunu gösteriyor. Bu kısayol çalışınca bizi systemd isminde bir programa götürüyor.
Eskinden sistemin açılışta hangi init seviyesinde başlayacağını kolayca etc/inittab dosyasının içerisindeki initdefault değerine bakarak görebilir ve bu değeri değiştirerek başlangıç seviyesini değiştirebilirdik. Fakat şimdi systemd adında başka bir program işleri biraz değiştirmiş durumda
O zamandan beri başlangıçta hangi servisin çalıştığını
# systemctl komutu ile görebiliyoruz
Eğer başlangıç seviyesini multi-user dan graphic e değiştirmek istersek ozaman
Komutu ile değişiklik yapabiliriz.
ayrıca
Açılış sırasında bir çok log üretilir. Bu log ları görmek istersek açılıştan sonra
Dmesg komutu ile görebiliriz.
Systemd programı çalışmasını tamamladıktan sonra kontrolü kullanıcıya devreder. Yani kullanıcı karşısına gelen arayüz üzerinden çeşitli komutlar girerek veya programları çalıştırarak yapmak istediği işlemleri gerçekleştirir.
Anlık olarak hangi runlevel de olduğunuzu
# runlevel
N 5
Komutu ile görbilirsiniz.
Eğer her açılışta değilde sadece o an çalışma sevyenizi değiştirmek isterseniz.
İnit 5
Şeklinde başka bir çalışma seviyesine geçebilirsiniz.
Sistemi kapatmak için halt veya yeniden başlatmak için restart komutlarını kullanabilirsiniz. Aynı zamanda
İnit 0 ile Linux sisteminizi kapatabilir. İnit 6 komutu ile restart edebilirsiniz.
Yukarıda bahsedilen ve Sistemi kapatmak veya restart etmek gibi aynı işi yapan bir birinden farklı komutlar kafanızı karıştırabilir. Peki neden aynı işi yapan bir den fazla komut var.
Linux ü kapatan ana programın adı shutdown dur. Siz init, reboot veya halt komutlarını kullanabilirsiniz fakat sonuçta tüm bu programlar shutdown programını çağarır.
NOT: İNİT programı üzerine bilmeniz gereken bir şey şudur.
Artık init programı yok bazen init programını systemV veya sysV init modeli altında da duyabilirsiniz. Linux ün başlangıcını gerçekleştiren sysV init servisi farklı Linux dağıtımlarında farklı program isimleri ile karşınıza çıkabilir.
Örneğin:
- systemd –Fedora, OpenSuSE, Arch, RHEL, CentOS, gibi bir çok sürüm de kullanılmaktadır.
- Upstart — Ubuntu GNU/Linux üzerinde kullanılır.
- Mudar — pyton ile yazıldı ve Pardus GNU/Linux üzerinde kullanılır.
- Epoch –basit bir açılış için geliştirilmiştir. Açılış işlemini tek bir treat altında gerçekleştirir.
Bu yüzden Linux ün hangi sürümünü kullanıyorsanız o sürümün hangi başlangıç servis programını kullanığını bilmekte fayda vardır.