7. Açılışlar ve Kapanışlar

Ön Bilgi


Start me up
Ah... you've got to... you've got to
Never, never never stop
Start it up
Ah... start it up, never, never, never
You make a grown man cry,
 you make a grown man cry
(Rolling Stones)

Bu bölümde açılış ve kapanışlar esnasında Linux içinde neler olduğu ve bu işlemin düzgün bir şekilde nasıl yapılacağı anlatılmaktadır. Şayet süreçleri düzgün bir şekilde izlemezseniz dosyalar kaybolabilir veya bozulabilir.

7.1. Açılışlar ve kapanışlara genel bir bakış

Bilgisayar sistemine enerji verilmesi ve işletim sisteminin yüklenmeye başlaması olayına önyükleme (booting) denir. İsim, kendini kendini bir bilgisayardan kendi çabası ile çeken bir bilgisayar resminden gelmektedir, fakat eylemin kendisi biraz daha gerçekçidir.

Kendi kendini çekme çabası esnasında ilk önce, işletim sisteminin yüklenmesini ve başlatılmasını sağlayan küçük bir kod parçası yüklenir. Bu kodlara önyükleyici denir. Önyükleyici bir ayrılabilir disk ya da sabit disk üzerinde sabit bir yerde bulunur. Bu iki basamaklı işlemin sebebi, işletim sisteminin büyük ve karmaşık olması, fakat bilgisayarın yükleyebildiği kodların ilk parçasının küçük olması (birkaç yüz byte) ve donanım yazılımların karmaşık hale gelmemesini sağlamaktır.

Bilgisayar mimarilerinde bu önyükleme işlemini farklılık gösterir. PC'ler için; BIOS, sabit diskten önyükleme sektörü diye adlandırılan ilk sektörü okur. Önyükleyici bu sektör içindedir. Böylece işletim sistemi disk üzerinde her nerede ise önyükleyiciden bu bilgi okunup o bölümden yüklenir.

Linux çekirdeği yüklendikten sonra donanım ve aygıt sürücüleri yüklenir ve sonra init çalıştırılır. Kullanıcıların bağlanması ve diğer işlerin yapılması için gereken süreçler init tarafından yüklenir. Bunun ayrıntıları aşağıda anlatılmıştır.

Bir Linux sistemini kapatmak için, ilk önce çalışan süreçlere; işlerini sonlandırıp, kendilerini durdurmaları söylenir. Daha sonra dosya sistemleri ve takas alanı ayrılır ve en sonunda sistemin kapatıldığını söyleyen bir ileti belirir. Şayet bu süreç düzgün bir şekilde takip edilmezse korkunç şeyler olabilir ve genellikle olur; en önemlisi dosya sisteminin tampon belleği içinde bulunan bütün bilgi kaybolmuş ve sistem istikrarsız bir hale dönmüş olabilir. Ve bu nedenle kullanılmaz hale de gelebilir.

7.2. Önyükleme sürecine yakından bakalım

Linux işletim sistemini sabit diskten veya bir CD'den başlatabilirsiniz. "Kurulum ve Başlatma Kılavuzu"nun (Installation and Getting Start Guide) Kurulum bölümü Linux'un nasıl kurulacağını ve nasıl istediğiniz şekilde açılış işlemini gerçekleştirebileceğinizi anlattır.

Bir PC açıldığında BIOS her şeyin sağlıklı bir şekilde çalışıp çalışmadığını anlamak için pek çok test yapar[55] ve daha sonra asıl açılış işlemine geçilir. Bir disk sürücüsü seçip onun ilk sektörünü okur. Seçim sırası genelde BIOS yapılandırmasına bağlıdır. Tercih edilen yol şu şekildedir: İlk önce sabit diske bakılır, orada önyükleme sektörü yoksa CDROM sürücü ve diğer aygıtlara bakılır. Bu ilk sektöre önyükleme sektörü denir, şayet bu önyükleme sektörü bir sabit disk üzerinde ise buna Ana Önyükleme Sektörü (Master Boot Sector - MBR) adı verilir, "Ana" olmasının sebebi, sabit disk üzerinde pek çok bölüm ve her bölümün kendine ait bir önyükleme sektörü olabilmesidir.

Bir sabit diskten açılış yapılırsa önce MBR içindeki kodlar bölümleme tablosunu inceler, açılabilir olarak işaretlenmiş etkin bölümü bulur, o bölümden önyükleme sektörünü okur ve daha sonra bu önyükleme sektörü içindeki kodları çalıştırır. Bu önyükleme sektörü içerisinde bulunan kodlar, bölüm içerisindeki çekirdeği okur ve onu başlatır. Ayrıntılar çeşitli olmakla birlikte; sadece çekirdek için ayrı bir bölüme sahip olmak genellikle pek kullanışlı olmaz. Çekirdek için ayrı bir bölüm açılırsa, önyükleme sektörü içerisindeki kodlar gerekli bilgileri zincirleme bir halde okuyamaz ve dosya sistemi onları hangi sektörlere koydu ise oraları bulmak zorunda kalır. Bu sorunu çözmenin pek çok yöntemi vardır ama en genel kabul göreni grub'dır. Bunun konumuzla bir alakası yoktur, ama grub belgelerine bakmanız yararlı olabilir.

Grub ile açılış işleminde, grub yapılandırmasının bulunduğu disk okunur ve buradan öntanımlı çekirdeğin yeri okunarak çekirdek yüklenir. Grub ile çeşitli yapılandırmalar mümkündür. Çekirdekler arasında seçim yapılabilir, farklı işletim sistemlerini yüklenebilir ve açılış esnasında kullanıcının bu işletim sistemlerinden birisini seçmesi sağlanabilir.

Linux çekirdeği belleğe okunduktan sonra ya da adına ne dersin deyin, gerçekte başlatıldıktan sonra, kabaca aşağıdaki olaylar gerçekleşir:

  • Linux çekirdeği diskte sıkıştırılmış olarak tutulur. Bu nedenle ilk önde kendi kendini çözer. Bu, çekirdeğin başlangıcındaki küçük bir yazılımla yapılır.

  • Şayet Linux'un tanıdığı ve çeşitli metin kipleri bulunan bir ekran kartınız varsa, Linux size hangi metin kipinde çalışmak istediğinizi sorar. Çekirdek derlemesi sırasında bir video kipi girilebilir ve böylece daima bu kip kullanılır.

  • Bundan sonra çekirdek diğer donanımları denetler (sabit disk, ağ bağdaştırıcısı, ekran kartı vb) ve bazı donanım sürücülerini uygun bir şekilde yapılandırır ve bunu yaparken buldukları ile ilgili bir çıktı verir.

    Bu çıktı sistemdeki donanımlara, kullanılan işletim sistemi çeşidine ve yapılmış olan ayarlara göre değişiklik gösterebilir.

  • Daha sonra çekirdek kök dosya sistemini bağlamayı deneyecektir. Dosya sistemi türü otomatik olarak bulunur. Kök dosya sisteminin bağlanması esnasında bir terslik olursa, örneğin: çekirdek içinde uygun dosya sistemi sürücüsü yoksa, çekirdek PANİKLER ve sistemi kapatır. Aslında yapabileceği başka da bir şey yoktur zaten.

    Kök dosya sistemi genellikle salt okunur bir şekilde bağlanır. Bu dosya sistemi bağlı durumdayken, dosya sisteminin sınanmasını sağlar. Oku-yaz kipinde bağlanmış bir dosya sistemi üzerinde sınama yapmak hiç de iyi bir fikir değildir. Burada bahsedilen sınama işlemi fsck ile yapılır.

  • Bundan sonra çekirdek, init (/sbin/init) sürecini başlatır (daima süreç numarası olarak 1'i alır). init pek çok ufak tefek iş yapar. Aslında yaptıkları ne şekilde ayarlandığına bağlıdır. init bölümünde daha ayrıntılı bilgi bulabilirsiniz. En azından, çok gerekli olan birkaç artalan sürecini çalıştırır.

  • init daha sonra çok kullanıcılı kipe geçer, sanal konsollar ve seri bağlantılar için agetty(8) uygulamasını çalıştırır. agetty(8), kişilerin sanal konsollar veya seri hatlar üzerinden sisteme bağlanmasını sağlar. init ayrıca nasıl ayarlandığına bağlı olarak diğer uygulamaları da çalıştırır.

  • Bütün bunlardan sonra açılış işlemi bitmiş olur, artık sistem açık ve normal çalışma kipine geçmiş haldedir.

7.3. Kapanışla ilgili ayrıntılar

Bir Linux sistemini kapatırken, doğru süreci izlemek çok önemlidir. Şayet bunu doğru yapmazsanız, dosya sisteminiz değersiz bir çöp yığınına dönebilir. Bunun sebebi, Linux'un bir kerede doğrudan değil de daha sonra yazan (write-back) bir disk önbellekleme sistemine sahip olmasıdır. Bu performans artışı sağlamakla birlikte bazı sorunları da yanında getirmektedir. Şayet bir kapris anında enerjiyi keserseniz, önbellekte bulunan ama henüz diske yazılmamış olan bütün bilgiler yok olup gidecektir.

Başka bir sebep de, galeyana gelip artalanda çalışan pek çok sürecin olduğu, çok işlevli bir sistemin açma/kapama düğmesine vurursanız, bu tam bir yıkım olabilir. Sistemi uygun bir şekilde kapatarak, artalanda çalışan bütün uygulamaların verilerini kurtardığından emin olabiliriz.

Bir Linux sistemini kapatmak için gereken komut shutdown'dır[56]. Genellikle bunu yapmak için iki yoldan birisi kullanılır.

Tek kullanıcısı olduğunuz bir sistemde alışılmış yöntem: çalıştığınız bütün uygulamalardan çıkmak, bütün sanal konsollardan çıkıp, root kullanıcı olarak tekrar girmek (şayet hali hazırda root olarak bağlıysanız orada beklemek - ama kök dizininin veya root'un ev dizininin (/root dizini) dosya sistemlerinin ayrılması sırasında bir sorunla karşılaşmasını önlemek için, o dizinlerden başka dizinlere geçin) ve daha sonra shutdown -h now komutunu verin (now parametresi yerine bir artı işaretiyle birlikte dakikaları belirten sayılar da kullanabilirsiniz. Böylece, genellikle çok kullanıcılı bir sistemde kapanma işlemi istenen süre kadar ertelenmiş olur).

Ayrıca, shutdown -h +süre uyarı komutunu kullanabilirsiniz. süre sistemin ne kadarlık bir süre sonra kapatılacağını, uyarı ise kapatma sebebini belirten küçük bir uyarı metnidir.

# shutdown -h +10 'Yeni bir disk ekliyoruz. Sistem 3 saat kapalı kalacak.'
#

Bu herkesi, sistemin 10 dakika sonra kapatılacağını ve verilerini kaybedebilecekleri konusunda uyarır. Bu uyarı X uçbirimleri dahil birilerinin bağlı olduğu bütün uçbirimlere gönderilir. Ve birkaç kez daha uyarı gider. Kapanma anı yaklaştıkça uyarılar sıklaşır.

Broadcast message from root (ttyp0) Wed Aug  2 01:03:25 1995...

Yeni bir disk ekliyoruz. Sistem 3 saat kapalı kalacak.
The system is going DOWN for system halt in 10 minutes !!

Erteleme süresi sonunda gerçek kapatma işlemi başlayınca; kök dosya sistemi hariç bütün dosya sistemleri ayrılır, halen bağlı kullanıcı olsa bile bütün kullanıcı süreç ve uygulamaları öldürülür, artalan süreçleri kapatılır, bütün dosya sistemleri ayrılır ve her şey tatlıya bağlanmış olur. Bu yapılırken, init makineyi kapatabileceğinizi söyleyen bir ileti yayınlar. Bundan sonra yapmanız gereken tek şey sabit disk ve enerji ışığının sönmesini beklemektir.

Bazen, nadiren iyi sistemlerde bile, düzgün bir kapanış yapmak mümkün olmaz. Örneğin; şayet çekirdek paniklemişse, çöker ve hatalı davranmaya başlar, bu durumda yeni bir komut vermek imkansız olabilir. Düzgün bir şekilde kapatmanız mümkün olmayınca yapabileceğiniz tek şey, başınıza kötü bir şey gelmemesini ummak ve sistem enerji düğmesine basmaktır. Şayet sorun biraz daha büyükse (örneğin birisi baltası ile klavyenize vurduysa) ve çekirdekle update halen düzgün bir şekilde çalışıyorsa, update'in işlevini yapması ve önbellekte bulunan bilgileri yazılmaya zorlaması için birkaç dakika beklemek daha uygun olacaktır. Ondan sonra enerjiyi kesebilirsiniz.

Bazı insanlar sync komutunu 3 kere ard arda kullanıp disk G/Ç'larının bitmesini bekleyip sistemi kapatmayı tercih eder. Şayet çalışan bir uygulama yok ise bu işlem shutdown komutu ile aynı işi yapmış olur. Bununla beraber bu işlem sırasında dosya sistemleri ayrılmadığı için ext2fs "temiz dosya sistemi" bayrağı ile ilgili hatalar ortaya çıkabilir. Bu nedenle üçlü sync komutu ile sistemi kapatmak tavsiye edilmez.

Bilginize

Üçlü sync'in sebebi, komutların ayrı ayrı yazıldığı Unix'in ilk zamanlarında disk G/Ç işlemlerinin bitmesi için yeterli zamanı kazanmaktı.

7.4. Sistemin yeniden başlatılması

Sistemi yeniden başlatmak için sistemi kapatıp, elektriği kesip, sonra tekrar vererek de yapabilirsiniz. Daha basit bir yol ise, sadece kapatmak yerine, shutdown komutunun sistemi yeniden başlatmasını sağlamaktır. Bunu -r seçeneğini kullanarak yapabiliriz. Örneğin; shutdown -r now yazmanız yeterlidir.

Pek çok Linux sistemi ctrl+alt+del tuşlarına aynı anda basılmasıyla yeniden başlatma işlemini yapabilmektedir. Bu shutdown -r now komutunu çalıştırmış olur. Bu ctrlaltdel(8) tuşları yapılandırılabilir. Çok kullanılıcılı bir sistemde bir miktar erteleme vermek uygun olacaktır. Başkalarının fiziksel olarak ulaşabilecekleri yerlerde bulunan sistemlerde bu tuşların işlevi kapatılabilir.

7.5. Tek kullanıcı kipi

shutdown komutu sistemi tek kullanıcılı hale getirmek için de kullanılabilir. Böylece sisteme sadece konsoldan root bağlanır ama başkaları bağlanamaz. Bu yöntem, sistem normal çalışırken yapılamayan, sistem yöneticisi görevlerini yapmak için yararlı olabilir.

7.6. Kurtarma Diskleri

CD'den çalışan sistemlerle açılış yaparak sistem kurtarılabilir. Yapacağınız böyle bir ISO indirip CD'ye yakmaktır.



[55] Buna kısaca POST (Power On Self Test), açılışta kendi kendini sınama adı verilir.

[56] Ç.N.: Son çıkan bazı donanımlar açma-kapama düğmesine dokunmadan işletim sistemi tarafından tamamen kapatılabilmektedir. Bunun için kullanılan komut poweroff'tur