arch boot process (Türkçe)
Arch Linux'u önyüklemek (boot etmek) için, Linux uyumlu bir önyükleyicinin kurulmuş olması gerekir. Önyükleyici, önyükleme sürecini başlatmadan önce çekirdeği (kernel) ve initramfs dosyasını yüklemekle sorumludur. Bu prosedür BIOS ve UEFI sistemler için birbirinden oldukça farklıdır.
Donanım Yazılımı Türleri (Firmware types)
Donanım yazılımı (firmware), sistem açıldığı anda çalıştırılan ilk programdır.
- BIOS ve UEFI kelimeleri genellikle firmware yerine kullanılır.
- Bunu Linux donanım yazılımı (Linux-firmware package) ile karıştırmayın.
UEFI
Genişletilmiş Birleşik Donanım Yazılımı Arayüzü (UEFI), hem bölüm tablosunu (partition table) hem de dosya sistemlerini okuma desteğine sahiptir. UEFI, mevcut olsun ya da olmasın Ana Önyükleme Kaydı (MBR) üzerinden herhangi bir önyükleme kodunu çalıştırmaz; bunun yerine önyükleme işlemi NVRAM'deki önyükleme girdilerine (boot entries) dayanır.
UEFI belirtimleri, FAT12, FAT16 ve FAT32 dosya sistemleri için zorunlu destek öngörür (bkz. UEFI belirtimi sürüm 2.11, bölüm 13.3.1.1); ancak uyumlu herhangi bir üretici isteğe bağlı olarak ek dosya sistemleri için de destek ekleyebilir; örneğin bazı Apple donanım yazılımlarında HFS+ veya APFS, ya da optik diskler için ISO 9660 desteği gibi.
UEFI; EFI uygulamalarını, örneğin önyükleyicileri, önyükleme yöneticilerini, UEFI kabuğunu vb. çalıştırır. Bu uygulamalar genellikle EFI sistem bölümü (ESP) içindeki dosyalar olarak saklanır. Her üretici, kendi dosyalarını EFI sistem bölümündeki /EFI/üretici_adı dizini altında saklayabilir. Uygulamalar, NVRAM'e bir önyükleme girdisi eklenerek veya doğrudan UEFI kabuğu (shell) üzerinden başlatılabilir.
UEFI belirtimi, Uyumlu Destek Modülü (CSM) ile eski BIOS önyüklemesi için de geriye dönük desteğe sahiptir. Eğer UEFI üzerinde CSM etkinleştirilmişse, UEFI tüm sürücüler için CSM önyükleme girdileri oluşturacaktır. Eğer önyükleme için bir CSM girdisi seçilirse, UEFI'nin CSM'i sürücünün MBR önyükleme kodundan (bootstrap code) önyükleme yapmaya çalışacaktır.
Sistem Başlatma (System initialization)
Sistem açıldığında, ilk olarak açılış kendi kendini sınama (POST) işlemi yürütülür. Ayrıca Hugo Landau tarafından kaleme alınan Modern CPUs have a backstage cast makalesini inceleyebilirsiniz.
UEFI
- POST işleminden sonra UEFI, önyükleme için gerekli olan donanımları (disk, klavye denetleyicileri vb.) hazır hale getirir.
- Donanım yazılımı (firmware), hangi EFI uygulamasını nereden (örneğin hangi disk ve bölümden) başlatacağını belirlemek için NVRAM üzerindeki önyükleme girdilerini okur.
- Bir önyükleme girdisi doğrudan bir diskin kendisi de olabilir. Bu durumda donanım yazılımı, o disk üzerinde bir EFI sistem bölümü (ESP) arar ve
\EFI\BOOT\BOOTx64.EFIvarsayılan (fallback) önyükleme yolunda bir EFI uygulaması bulmaya çalışır (32-bit IA32 UEFI sistemlerde bu dosyaBOOTIA32.EFIşeklindedir). UEFI ile önyüklenebilen taşınabilir medyaların (USB vb.) çalışma mantığı tam olarak budur.
- Bir önyükleme girdisi doğrudan bir diskin kendisi de olabilir. Bu durumda donanım yazılımı, o disk üzerinde bir EFI sistem bölümü (ESP) arar ve
- Donanım yazılımı ilgili EFI uygulamasını başlatır.
- Bu uygulama bir önyükleyici veya bir EFI boot stub kullanan doğrudan Arch çekirdeğinin kendisi olabilir.
- Ya da bir UEFI kabuğu veya systemd-boot ya da rEFInd gibi bir önyükleme yöneticisi olabilir.
Eğer Secure Boot (Güvenli Önyükleme) etkinse, önyükleme süreci imza kontrolü yaparak EFI ikili dosyasının (binary) orijinalliğini doğrular.
Çoklu Önyükleme (Multibooting)
Her işletim sistemi veya üretici, diğerlerini etkilemeden EFI sistem bölümü içerisinde kendi dosyalarını barındırabildiğinden, UEFI üzerinde çoklu önyükleme yapmak sadece ilgili işletim sisteminin önyükleyicisine karşılık gelen farklı bir EFI uygulamasını başlatmaktan ibarettir. Bu sayede, bir işletim sistemini yüklemek için başka bir önyükleyicinin zincirleme yükleme (chainloading) mekanizmalarına bağımlı kalma ihtiyacı ortadan kalkar.
Ayrıca bkz. Dual boot with Windows.
BIOS
- POST işleminden sonra BIOS, önyükleme için gerekli olan donanımları (disk, klavye denetleyicileri vb.) hazır hale getirir.
- BIOS, disk önceliği sırasında ilk sırada yer alan diskin ilk 440 baytlık kısmını yani Master Boot Record (MBR) önyükleme kod alanını çalıştırır.
- MBR önyükleme kodundaki önyükleyicinin ilk aşaması (first stage), varsa ikinci aşama kodunu (second stage) şu konumlardan birinden başlatır:
- MBR'den sonraki disk sektörleri, yani "post-MBR gap" olarak adlandırılan boşluk (yalnızca MBR bölüm tablolarında mevcuttur).
- Bir bölüm veya bölümlendirilmemiş bir diskin hacim önyükleme kaydı (VBR).
- GPT olarak bölümlendirilmiş bir diskte GRUB kullanılıyorsa, GRUB'a özel bir BIOS önyükleme bölümü (GPT'de bulunmayan post-MBR boşluğunun yerine kullanılır).
- Asıl önyükleyici başlatılır.
- Önyükleyici, zincirleme yükleme yaparak veya doğrudan işletim sistemi çekirdeğini hafızaya alarak işletim sistemini yükler.
Önyükleyici (Boot loader)
Bir önyükleyici, donanım yazılımı (UEFI veya BIOS) tarafından başlatılan bir yazılım parçasıdır. Çekirdeği (kernel), istenen çekirdek parametreleri ve varsa harici initramfs imajları ile birlikte yüklemekten sorumludur.
Bir önyükleme yöneticisi ise sadece bir önyükleme seçenekleri menüsü sunar veya önyükleme sürecini kontrol etmek için başka bir yöntem sağlar; yani aslında sadece diğer EFI çalıştırılabilir dosyalarını çalıştırır.
UEFI söz konusu olduğunda, çekirdeğin kendisi EFI boot stub kullanılarak doğrudan UEFI tarafından başlatılabilir. Yine de önyükleme yapılmadan önce çekirdek parametrelerini düzenleyebilmek amacıyla ayrı bir önyükleyici veya önyükleme yöneticisi kullanılabilir.
32-bit IA32 UEFI mimarisine sahip sistemler, karma modda önyüklemeyi (mixed mode booting) destekleyen bir önyükleyici gerektirir.
/boot dizininde bulunan çekirdeğe ve initramfs imajlarına erişebilmesi gerekir. Bu da önyükleyicinin, blok aygıtlarından yığınsal blok aygıtlarına (LVM, RAID, dm-crypt, LUKS vb.) ve çekirdeklerin/initramfs imajlarının üzerinde bulunduğu dosya sistemine kadar her şeyi desteklemesi gerektiği anlamına gelir.
Neredeyse hiçbir önyükleyici bu tür yığınsal blok aygıtlarını tam olarak desteklemediğinden ve dosya sistemleri henüz hiçbir önyükleyici tarafından desteklenmeyen yeni özellikler sunabileceğinden (örn. archlinux/packaging/packages/grub#7, FS#79857, FS#59047, FS#58137, FS#51879, FS#46856, FS#38750, FS#21733 ve fscrypt şifreli dizinleri), evrensel olarak desteklenen FAT32 gibi bir dosya sistemine sahip ayrı bir /boot bölümü kullanmak genellikle çok daha uygulanabilir bir çözümdür.
Özellik Karşılaştırması
- GPT, UEFI belirtiminin bir parçası olduğundan tüm UEFI önyükleyicileri GPT diskleri destekler. BIOS sistemlerde GPT kullanımı, ya Hibrit MBR ile "hibrit önyükleme" yapılarak ya da yeni yalnızca-GPT protokolüyle mümkündür. Ancak bu protokol bazı BIOS uygulamalarında sorunlara yol açabilir; detaylar için rodsbooks adresine bakın.
- Secure Boot (Güvenli Önyükleme) UEFI belirtiminin bir parçası olduğu için tüm UEFI önyükleyicileri bunu destekler, ancak bazılarının belirli sınırlamaları vardır.
| İsim | Donanım Yazılımı | Bölüm Tablosu | Çoklu Önyükleme | Dosya Sistemleri | Notlar | ||
|---|---|---|---|---|---|---|---|
| BIOS | UEFI | MBR | GPT | ||||
| Clover | Yes | Yes | No | Yes | Yes | Genişletilebilir2,5 | Eski BIOS sistemlerinde UEFI ortamını emüle edebilir. |
| EFI boot stub | – | Yes1 | Yes | Yes | – | Donanım yazılımından devralınır2 | Çekirdek, doğrudan UEFI'den veya başka bir UEFI önyükleyiciden başlatılabilen geçerli bir EFI çalıştırılabilir dosyasıdır. |
| GRUB | Yes | Yes3 | Yes | Yes | Yes | Yerleşik | RAID, LUKS (ancak Argon2 PBKDF'leri hariç) ve LVM (ancak thin-provisioned birimler hariç) destekler. Kuruluma özel sınırlamalar için GRUB makalesine bakın. |
| Limine | Yes | Yes3 | Yes | Yes | Yes | Sınırlı | |
| rEFInd | No | Yes | Yes | Yes | Yes4 | Genişletilebilir2,5 | Belirli bir yapılandırmaya gerek duymadan çekirdekleri ve parametreleri otomatik algılamayı destekler ve fastboot [1] desteği sunar. |
| Syslinux | Yes | Kısmi1 | Yes | Yes | Kısmi | Sınırlı | Belirli dosya sistemi özelliklerini desteklemez. Yalnızca kurulduğu dosya sistemine erişebilir. |
| systemd-boot | No | Yes3 | Manuel | Yes | Yes4 | Genişletilebilir2,5 | Yalnızca kurulduğu ESP'den veya aynı disk üzerindeki Genişletilmiş Önyükleyici Bölümünden (XBOOTLDR) dosyaları başlatabilir. İçerisine yerleştirilen birleşik çekirdek imajlarını (UKI) otomatik olarak algılar. |
| Birleşik çekirdek imajı (UKI) | – | Yes3 | Yes | Yes | – | Donanım yazılımından devralınır2 | Doğrudan UEFI donanım yazılımından veya başka bir önyükleyiciden yüklenmek üzere systemd-stub(7), bir çekirdek, initramfs ve çekirdek komut satırının tek bir EFI çalıştırılabilir dosyasında paketlenmiş halidir. |
- İkili dosya Secure Boot için imzalanabilse de sonraki aşamalarda bir doğrulama yapmaz, bu yüzden güven zincirini (chain of trust) kırar.
- Dosya sistemi desteği doğrudan donanım yazılımından (firmware) devralınır. UEFI belirtimi FAT12, FAT16 ve FAT32 dosya sistemleri için zorunlu destek öngörür, ancak üreticiler isteğe bağlı olarak ek dosya sistemleri ekleyebilir; örneğin Apple Mac'lerdeki donanım yazılımları yerel olarak HFS+ dosya sistemini destekler. Eğer donanım yazılımı açılışta UEFI sürücülerini yüklemek için bir arayüz sunuyorsa, bağımsız olarak edinilen sürücüler yüklenerek ek dosya sistemi destekleri eklenebilir.
- Karma modda önyüklemeyi destekler. Yani 32-bit IA32 UEFI üzerinde 64-bit bir x86_64 Linux çekirdeğini başlatabilir.
- Bir önyükleme yöneticisidir. Yalnızca
CONFIG_EFI_STUB=yile derlenmiş Linux çekirdek imajları veya Windows Önyükleme Yöneticisi (bootmgfw.efi) gibi diğer EFI uygulamalarını çalıştırabilir. - UEFI dosya sistemi sürücülerinin yüklenmesini destekler.
Çekirdek (Kernel)
Önyükleyici, çekirdeği içeren vmlinux imajını başlatır.
Çekirdek, makinenin donanımı ile programlar arasında etkileşim kurarak düşük seviyede (kernelspace - çekirdek alanı) çalışır. Çekirdek, kullanıcı alanına (userspace) geçmeden önce ilk olarak donanım numaralandırmasını ve başlatılmasını gerçekleştirir. Detaylı bir açıklama için Wikipedia:Kernel (operating system) ve Wikipedia:Linux kernel sayfalarına bakabilirsiniz.
initramfs
Bir initramfs (initial RAM file system - başlangıç RAM dosya sistemi) imajı, erken kullanıcı alanının (early userspace - aşağıya bakın) geç kullanıcı alanını (late userspace) başarıyla başlatabilmesi için gerekli dosyaları sağlayan bir cpio arşividir. Bu durum esasen; kök dosya sistemini bulmak, erişmek ve bağlamak (mount etmek) için gereken tüm çekirdek modüllerini, kullanıcı alanı araçlarını, ilgili kütüphaneleri ve udev kuralları gibi destekleyici dosyaları kapsar.
initramfs kavramı sayesinde; harici bir sürücüden önyükleme yapmak, yığınsal aygıtlar (mantıksal birimler - LVM, yazılımsal RAID'ler, sıkıştırma, şifreleme) kullanmak veya kök dosya sisteminin uzaktan şifresini çözmek/bakım görevlerini yürütmek için erken kullanıcı alanında küçük bir SSH sunucusu çalıştırmak gibi çok daha karmaşık kurulumları yönetmek mümkün hale gelir.
Modüllerin büyük bir kısmı, kök dosya sistemine geçiş yapıldıktan (switch root) sonra, init sürecinin ilerleyen aşamalarında udev tarafından yüklenecektir.
Süreç şu şekilde işler:
-
/konumundaki kök dosya sistemi, tmpfs veya ramfs'in özel bir örneği olan boş bir rootfs olarak başlar. Burası, initramfs imajlarının açılacağı geçici kök dosya sistemidir. - Çekirdek, kendi içine gömülü (builtin) olan initramfs'i bu geçici köke açar. Arch Linux'un resmi olarak desteklenen çekirdekleri, gömülü initramfs için boş bir arşiv kullanır; bu, Linux derlenirken varsayılan ayardır.
- Çekirdek, harici initramfs imajlarını, önyükleyici tarafından geçilen komut satırında belirtilen sırayla açar ve gömülü initramfs'ten veya daha önce açılmış dosyalardan kalan her şeyin üzerine yazar. Birden fazla initramfs imajının tek bir dosyada birleştirilebileceğini ve çekirdeğin bunları dosyadaki sırasına göre işleyeceğini unutmayın.
- Eğer ilk initramfs imajı sıkıştırılmamışsa, çekirdek bunu açtıktan sonra sırasıyla
/kernel/x86/microcode/ve/kernel/firmware/acpi/dizinlerinde CPU mikrokod güncellemelerini ve ACPI tablosu güncellemelerini arar. - CPU mikrokodu ve ACPI tablosu güncellemelerini işledikten sonra çekirdek, varsa geri kalan initramfs imajlarını açmaya devam eder.
- Eğer ilk initramfs imajı sıkıştırılmamışsa, çekirdek bunu açtıktan sonra sırasıyla
initramfs imajları, Arch'ın erken kullanıcı alanını kurmak için tercih ettiği yöntemdir ve mkinitcpio, dracut veya booster ile oluşturulabilir.
initramfs Olmadan Çalıştırmak
6.13.8 sürümünden itibaren, resmi olarak desteklenen çekirdekler yerleşik Btrfs ve Ext4 sürücülerine sahiptir.
Bu durum, çekirdeğin bu dosya sistemlerine sahip bir kök bölümü doğrudan kullanabilmesini ve ihtiyaç duyduğu diğer harici modülleri oradan yükleyebilmesini mümkün kılar. Yine de akılda tutulması gereken bazı önemli detaylar vardır:
-
GPT bölümü otomatik bağlama özelliği kullanılamaz, bu nedenle
rootçekirdek parametresi her zaman zorunludur. -
rootiçin Kalıcı blok aygıtı adlandırması yalnızcaPARTUUIDvePARTLABELile sınırlıdır. -
rootflagsiçin bağlama seçenekleri sınırlıdır; örneğinnoatimeçalışmayacaktır. Olası yan etkileri azaltmak için, ilk bağlamayırootflags=rokullanarak salt okunur yapabilirsiniz. İstenen seçenekler daha sonra fstab aracılığıyla yeniden bağlama (remount) esnasında uygulanabilir. -
systemd-gpt-auto-generator(8) aracı initramfs olmadan anlamsızdır ve bazı sorunlara yol açar; bunu
systemd.gpt_auto=noşeklinde ayarlayarak devre dışı bırakın.
initramfs'e gerçekten ihtiyaç duymanızın bir diğer nedeni de erken mikrokod yüklemesidir. Ancak bunun için tam bir imaj oluşturmanıza gerek yoktur; Arch, bağımsız olarak kullanılabilen ayrı initramfs dosyalarında mikrokod sağlar.
Eğer hiçbir initramfs imajı sağlanmazsa, çekirdek başlamak için her zaman boş bir imaj içerir. Dolayısıyla kök bölümünün kilitlenmesi (pinning) ile ilgili bir sorun yaşanmamalıdır.
Erken Kullanıcı Alanı (Early userspace)
Erken kullanıcı alanı (early userspace) aşaması, bir diğer adıyla initramfs aşaması, #initramfs tarafından sağlanan dosyalardan oluşan rootfs içinde gerçekleşir. Erken kullanıcı alanı, çekirdeğin PID 1 olarak /init ikili dosyasını (binary) çalıştırmasıyla başlar.
Erken kullanıcı alanının işlevi yapılandırılabilir, ancak ana amacı sistemi gerçek kök dosya sistemine erişebileceği noktaya kadar hazırlamaktır. Bu şunları içerir:
- systemd-modules-load(8), gerçek kök dosya sistemini bağlamak için ihtiyaç duyulan tüm blok aygıtı modülleri gibi gerekli çekirdek modüllerini yükler.
- Kök dosya sisteminin üzerinde bulunabileceği depolama yığınını ayarlar (örn. dm-crypt, dm-verity, mdadm, LVM, systemd-repart vb. aracılığıyla).
- Varsa, gerçek kök dosya sisteminin şifresinin çözülmesini (decryption) yönetir.
- Kalıcı blok aygıtı adlarını udev aracılığıyla gerçek aygıtlara dönüştürür.
- Erken KMS varsayılan olarak etkin olduğundan DRM modülünü yükler.
Unutulmamalıdır ki erken kullanıcı alanı sadece kök dosya sistemini kurmaktan daha fazlasına hizmet eder. Kök dosya sistemi bağlanmadan önce yapılması gereken, disk kontrolü (fsck) ve kış uykusundan geri dönme (resume) gibi yalnızca bu aşamada gerçekleştirilebilecek görevler de vardır.
Erken kullanıcı alanının son aşamasında, gerçek kök dizini (systemd tabanlı bir initramfs durumunda) /sysroot/ konumuna veya (busybox tabanlı bir initramfs durumunda) /new_root/ konumuna bağlanır. Ardından systemd tabanlı initramfs için systemctl switch-root komutu, busybox tabanlı olanlar için ise switch_root(8) komutu kullanılarak bu gerçek köke geçiş yapılır. Geç kullanıcı alanı (late userspace), gerçek kök dosya sistemindeki init programının çalıştırılmasıyla başlar.
Geç Kullanıcı Alanı (Late userspace)
Geç kullanıcı alanının başlatılması init süreci tarafından yürütülür. Arch resmi olarak birimler (units) ve servisler (services) kavramı üzerine kurulu olan systemd sistemini kullanır, ancak burada açıklanan işlevsellik büyük ölçüde diğer init sistemleriyle de örtüşmektedir.
getty
İnit süreci, her bir sanal terminal (tipik olarak bunlardan altı tane bulunur) için getty programını çağırır. getty, her bir terminali başlatır ve yetkisiz erişime karşı korur. Kullanıcı adı ve şifre girildiğinde, getty bunları etc/passwd ve /etc/shadow dosyalarına karşı kontrol eder, ardından login(1) programını çağırır.
Login
login programı, /etc/passwd dosyasını temel alarak ortam değişkenlerini ayarlayıp kullanıcının kabuğunu (shell) başlatarak kullanıcı için bir oturum açar. login programı, başarılı bir girişten sonra ve oturum kabuğunu çalıştırmadan hemen önce /etc/motd (message of the day - günün mesajı) dosyasının içeriğini görüntüler. Burası, yerel politikalarınızı hatırlatmak veya kullanıcılarınıza söylemek istediğiniz herhangi bir şeyi göstermek için Hizmet Şartlarınızı (Terms of Service) sergilemek adına harika bir yerdir.
Kabuk (Shell)
Kullanıcının kabuğu başlatıldığında, kullanıcıya bir komut istemi (prompt) sunmadan önce tipik olarak bashrc gibi bir çalışma zamanı yapılandırma dosyasını çalıştırır. Eğer hesap girişte X oturumunu başlatacak şekilde yapılandırılmışsa, çalışma zamanı yapılandırma dosyası startx veya xinit programını çağıracaktır. Sürecin sonu için Grafik Oturumu (Xorg) bölümüne atlayın.
Ekran Yöneticisi (Display manager)
Ek olarak init, belirli bir sanal terminalde getty yerine bir ekran yöneticisi başlatacak şekilde yapılandırılabilir. Bu işlem, ilgili systemd servis dosyasının manuel olarak etkinleştirilmesini (enable) gerektirir. Ekran yöneticisi daha sonra grafiksel bir oturum başlatır.
Grafik Oturumu (Xorg)
xinit, normal şartlarda bir pencere yöneticisini veya bir masaüstü ortamını başlatan kullanıcının xinitrc çalışma zamanı yapılandırma dosyasını çalıştırır. Kullanıcı işini bitirip çıkış yaptığında; xinit, startx, kabuk ve login sırasıyla sonlanır ve tekrar getty ekranına veya ekran yöneticisine geri dönülür.
Ayrıca Bakınız
- Wikipedia:Booting process of Linux
- Inside the Linux boot process
- Rod Smith - Managing EFI Boot Loaders for Linux
- NeoSmart: The BIOS/MBR Boot Process
- Lennart Poettering - Linux Boot Partitions and How to Set Them Up
- Wikipedia:initramfs
- Early Userspace in Arch Linux
- Kernel Newbie Corner: initrd and initramfs
- bootup(7) (çoğunlukla systemd initramfs kullanıcı alanı kısmı hakkındadır)