Debian Amerikan malımıdır, insanlığa mı aittir, milli midir yoksa Red Hat’çiler daha mı milliyetçi çocuklardır? Ya da Arch Linux hakkında daha fazla yazarsam, Pamela Anderson’ı Google’da arayan kitleyi çekebilir miyim? Elbette dünya bu sorulara yanıt filan aramıyor. Senelerdir “forum” ve “liste” denen nuh nebiden kalma, çöp Internet teknolojilerini takip etmiyorum. Lütfen forum ve liste de açmayın, Internet’i çöplüğe çevirmeyin (Pozitif PC forumunu en yakın zamanda kapatıyoruz).
Gelgelelim, seneler önce forumları “magazin” anlamında zaman zaman takip etmişimdir. Debian kitlesi, UNIX aleminin “daha bir elit” adamları olarak bilinir. Artık onlar da ideolojik tartışmalardan sıkılmış görünüyorlar. Son yıllarda konular daha teknik ve “para” içerikli. Bu arada, özgür yazılım geliştiriciler rahatsız, top tüfekleri yok ama yakında Internet ve bilgisayar dünyasının (üretken olmayan) dinamizmi durma noktasına gelebilir. Bunun hakkında yazacağım, biri bana hatırlatsın!
Derdimiz “Linux geç açılıo abi”
Benim böyle bir derdim olmadı; zira uptime ortalamam 7-9 gün arası. (Bayağı sağlam bir sistem diyebilirsiniz, bu kadar uzun süre açık kalan yerli hosting firması sunucusu bile azdır herhalde). Onun için, ekstradan 10-20 saniye beklerken kanser olmuyorum. Gerçi ben MTV çocuğu da değilim.
Debian forumlarında zamanında enteresan bir tartışma vardı; enteresan diyorum, çünkü zeki görünen birçok adam, Linux kernelinin monolitik olup olmadığını uzun süre tartışmıştı. “Hem monolitik, hem modüler” diyerek kısaca noktayı koyayım. Eğer başarabilip tüm sürücüleri kernele entegre ederseniz, muhtemelen 5-6 MB boyutlarında (sıkıştırılmış) monolitik bir kerneliniz olur. Beceremezseniz, modül olarak yüklemek zorundasınız; o zamanda kerneliniz modüler olur.
Eğer Linux kerneli monolitik olsaydı, initrd ve initramfs denen şeyle uğraşmak zorunda kalmayacaktık. Hızlı açılan dağıtımla yavaş açılan dağıtım arasındaki en ciddi farklardan biri, bu initrd ya da initramfs’in ne kadar iyi oluşturulduğuyla ilgili. Bu arada, artık hemen hemen tüm dağıtımlar initramfs kullanıyor ve herhalde birsüre sonra, initrd’yi kimse hatırlamayacak. 2.4 serisiyle devam edenler hariç; zira initramfs 2.6x serisinde desteklenmekte.
initramfs ne işe yarar? Kernel kendini boot ettiği ilk anda, bootloader sıkıştırılmış kerneli RAM’de belli bir alana açar. Bu esnada kernel, sürücüler yüklü olmadığı için (bunların modül olarak derlenmiş olduğunu varsayarsak) diskinize, dolayısıyla dosya sisteminize erişememektedir. UNIX benzeri sistemlere yeni başlayanlar bunun mantığını kolayca anlayamaz; çünkü dokümanlar açık değildir. Mesela, sorulan en güzel ve mantıklı soru şudur: dosya sistemine erişemiyorsa, kernel’i nasıl okuyor? GRUB gibi bir bootloader, BIOS fonksiyonlarına erişerek, kerneli okuyabilir, zira aslında kendi içinde mini bir dosya sistemi sürücüsü bulunmaktadır. Nitekim, GRUB’daki stage’lere bakarsanız, erişebildiği dosya sistemlerine dair ipuçları yakalayabilirsiniz. GRUB, çok sayıda formatı tanısa da, örneğin GFFS gibi “sofistike” disk bölümlerine erişemez. Kernel, ham haliyle bu destekten bile yoksundur. Çok sayıda dosya sistemi olabileceğinden, dağıtım geliştiriciler kerneli büyütmemek adına bu dosya sistemlerini modül olarak derlerler.
Initramfs’in yüklenmesi, mantık olarak bootloader’ın kernel’i yüklemesine benzer. Initramfs, kısaltmadan da anlaşılacağı üzere, bir RAM disk’tir; kernel bunu ilk anda dosya sisteminin bir uzantısı olarak görmez. Initrd, initramfs gibi RAM disk kullanmanın mantığı, özellikle dosya sistemi sürücüleri (ext2,ext3,xfs,jfs,reiserfs,vs) ve disk-IDE-SATA-SCSI gibi sürücülerin bu alan içinden yüklenerek, sistemin açılmasıdır. Bahsettiğim sürücüler yüklendikten sonra, kendi içinde UNIX dizin yapısının bir kısmına sahip olan Initramfs, bağlanan / disk bölümüne mount edilir.
Inıtramfs, oldukça iyi bir sıkıştırma algoritması ile geliyor; diskinizde 6 MB gibi bir yer kaplayan initramfs dosyasını açarsanız (ki bir CPIO arşividir), muhtemelen 25 MB civarında yer kaplayacaktır. Dağıtım geliştiricilerin en büyük derdi, initramfs’i hem küçük tutmak, hem de mevcut birçok sürücüyü eklemek zorunda kalmaları. Örneğin yeni çıkan bir anakartın SATA sürücüleri initramfs içinde bulunmuyorsa -ki kernelde entegre olması çok daha düşük ihtimal- sisteminiz açılmaz.
Sorun bununla da bitmiyor. Düşününki, mevcut SATA kontrolörüm yetmedi ve ek bir SCSI kartı takarak, /home dizinimi bu karta bağlı yeni bir diske aktardım. Üstelik bu kartın sürücüsü de initramfs içinde değil. Bu durumda, sistem açılırken /home dizinimi mount edemeyecektir. (Hatta o diski bile görmeyecektir!). Normalde yapmanız gereken, initramfs’i elle açıp, sürücüyü açılan arşiv altındaki /lib/modules dizininde uygun yere koymanız. (Ki muhtemelen kerneli tekrar derleyeceksiniz; kullandığınız kernelde bu sürücü derlenmiş değilse). Ama zaman içinde bunu otomatik yapabilen araçlar çıktı; çünkü bahsettiğim işlem, bizim gibi eskiler için bile sıkıcı ve zaman alıcıyken, yeni başlayanlar için kabul edilemez derecede zor. Elbette “tam otomatik” bir mekanizma yok; ama örneğin TrekStor sürücüsünü Debian paketi olarak kuruyorsanız, paketi hazırlayanlar tembel değilse, bir “güzellik yapıp”, yeni initramfs’i otomatik oluşturacak düzenlemeleri yapıyorlar.
Debian temelli sistemlerde initramfs’i oluşturan iki araç var: yaird ve mkinitramfs.
Sorun ise, ikisinin de birbirinden beter çalışması.
Aslında, bu geliştiricilerin suçu değil. Dediğim scriptlerin işleri son derece zor; çünkü anlattığım süreç bu kadar basit de değil. Bunun içinde udev filan da var. En azından benim karşılaştığım sorun şu: mkinitramfs, eline ne geçerse, initramfs içine tıkıyor ve koca koca dosyalar oluşturuyor. Yaird, gerekli bileşenleri seçme konusunda çok daha başarılı. Gerçekten de, yaird ile yapılan bir initramfs içinde, gereksiz ıvır zıvıra nadiren rastlıyorsunuz. Gelgelelim, busybox’ı doğru kuramıyor: Komik şekilde, busybox’ı initramfs’e attıktan sonra, gerekli soft ya da hardlinkleri yaratmak yerine, bu programların orjinallerini kopyalıyor!
Sonuç olarak, iki aracında oluşturduğu initramfs, çok büyük olmakta.
İnitramfs, sistemin açılırken en çok yavaşladığı nokta. Zira yavaş sistemde bile, 1.5 MB civarındaki standart bir kernelin yüklenmesi 5 saniye civarında iken, sırf initramfs’in RAM’e açılması bile bu süreyi geçiyor. Sonra sürücüleri yüklemeye başlıyor, burada probing gecikmeleri devreye giriyor (özellikle bazı sürücülerin etkin hale gelmesi, yüklendikten sonra 3-5 saniye ek zaman alabiliyor)
Yani hızlı bir sistem açılışı için, initramfs’i elle düzenlemeniz şart. Boşu boşuna init scriptleri optimize etmeye çalışarak zaman harcamayın; zira asıl sorun orada değil, initramfs’in içinde. Ayrıca, sürücüleri donanımı geç algılayan bir bilgisayarınız varsa, ne yaparsanız yapın sisteminiz geç açılacaktır. Kısacası, Linux ve GNU, aşırı modüler yapısı yüzünden hem birçok avantajı, hem de birçok dezavantajı beraberinde getiriyor.
2 yorum yapılmış.
Peki bir LinuxBIOS projesi var, 3 saniyede linuxun boot edildiğini iddia eden.
Kabahati biosdamı bulmalıyız?
LinuxBIOS’u bizzat kurup 3 saniye gibi (ben yaklaşık 5 saymıştım) bir sürede açılıdığını görmüştüm. Ancak donanım desteği çok yetersiz. Hatta projenin “çok makbuldür” dediği bir anakartta bile ikinci IDE portu çalışmamıştı. Gerçi LinuxBIOS’da boot etme gecikmesi orjinal BIOS’dan bile fazla. Bunun yanında 1 saniyenin altında kerneli yükleyebilen embedded kartlarda var. uzun lafın kısası, donanım ne kadar basitse, linux o kadar kısa sürede boot ediyor. BIOS’la uğraşmıyorsunuz, kartın üstünde kısıtlı ve basit bileşenler oluyor. Ciddi üreticiler de zaten özelleştirilmiş kerneli filan hazır veriyorlar. GP2x’i inceleyin. ARM9 işlemci, 2.4 kernel var ve 200 Mhz olmasına rağmen 14 saniyede boot ediyor. Tabi üstünde X yok ama video gösterirken filan framebuffer desteği son derece başarılı, öyleki divx videoları bile kasılmadan oynatıyor (biraz bızıklamak şart)