İlk ramdisk - Initial ramdisk

(Özellikle ilgili olarak hesaplanırken , Linux , bilgisayar) initrd( Başlangıç ramdisk ) geçici bir kök yüklenmesi için bir şemadır dosya sistemi içine bellek bir parçası olarak kullanılabilir, Linux başlatma işlemi . initrdve initramfsbunu başarmak için iki farklı yönteme bakın. Hem yaygın gerçek öncesi hazırlık yapmak için kullanılan kök dosya sistemi edilebilir monte .

Gerekçe

Çoğu Linux dağıtımı , dağıtım geliştiricilerinin çok çeşitli donanımlarda önyükleme yapmak için özel olarak oluşturduğu tek bir genel Linux çekirdek görüntüsü gönderir. Aygıt sürücüleri bu jenerik çekirdek görüntüsü için olarak yer almaktadır yüklenebilir kernel modüllerinden statik bir çekirdeğin içine birçok sürücüleri derleme çekirdek imajı, çok daha büyük sınırlı hafızaya sahip bilgisayarlarda boot belki çok büyük olmasına neden olur çünkü. Bu, daha sonra, kök dosya sistemini önyükleme sırasında veya bu nedenle kök dosya sisteminin nerede veya ne olduğunu çıkararak monte etmek için gerekli modülleri algılama ve yükleme sorununu ortaya çıkarır.

Ayrıca komplike konularda için kök dosya sistemi bir yazılım üzerinde olabilir RAID hacmi, LVM , NFS veya şifrelenmiş bir bölümünde (disksiz iş istasyonlarında). Bunların hepsi montaj için özel hazırlıklar gerektirir.

Diğer bir komplikasyon ise , belleğin tüm içeriğinin bir görüntüsünü bir takas bölümüne veya normal bir dosyaya atarak ve ardından kapatarak bilgisayarı diskte askıya alan hazırda bekletme için çekirdek desteğidir . Bir sonraki önyüklemede, bu görüntünün belleğe geri yüklenebilmesi için erişilebilir hale getirilmesi gerekir.

Çekirdeğe bu kadar çok özel durum için sabit kod işleme zorunluluğundan kaçınmak için, şimdi erken kullanıcı alanı olarak adlandırılan geçici bir kök dosya sistemi ile bir ilk önyükleme aşaması kullanılır. Bu kök dosya sistemi, gerçek kök dosya sistemini monte etmek için gerekli donanım algılama, modül yükleme ve cihaz keşfini yapan kullanıcı alanı yardımcılarını içerebilir.

uygulama

Bu ilk kök dosya sisteminin bir görüntüsü (çekirdek görüntüsü ile birlikte), Linux önyükleyicisi veya bilgisayarın önyükleme bellenimi tarafından erişilebilen bir yerde saklanmalıdır . Bu, kök dosya sisteminin kendisi, optik diskteki bir önyükleme görüntüsü , yerel diskteki küçük bir bölüm ( genellikle ext2 veya FAT dosya sistemlerini kullanan bir önyükleme bölümü ) veya bir TFTP sunucusu ( Ethernet'ten önyükleme yapabilen sistemlerde) olabilir. ).

Önyükleyici, çekirdeği ve ilk kök dosya sistemi görüntüsünü belleğe yükler ve ardından görüntünün bellek adresini ileterek çekirdeği başlatır. Önyükleme dizisinin sonunda, çekirdek, ilk birkaç veri bloğundan görüntünün biçimini belirlemeye çalışır, bu da initrd veya initramfs şemasına yol açabilir.

Gelen initrd'yi Şema görüntü özel olarak uygun hale getirilir, bir dosya sistemi görüntüsü (isteğe bağlı olarak sıkıştırılmış) olabilir, blok aygıt ( / dev / ram sonra başlangıç kök dosya sistemi olarak monte edilir). Bu dosya sisteminin sürücüsü statik olarak çekirdeğe derlenmelidir. Çoğu dağıtım orijinal olarak sıkıştırılmış ext2 dosya sistemi görüntülerini kullanırken diğerleri ( Debian 3.1 dahil ) bellek sınırlı sistemlerde önyükleme yapmak için cramf'leri kullandı , çünkü cramfs görüntüsü, sıkıştırma için fazladan alan gerektirmeden yerinde monte edilebilir. İlk kök dosya sistemi kurulduğunda , çekirdek ilk işlemi olarak /linuxrc'yi yürütür ; çıktığında, çekirdek, gerçek kök dosya sisteminin monte edildiğini varsayar ve normal kullanıcı alanı önyükleme sürecini başlatmak için /sbin/init'i yürütür .

In initramfs şeması (Linux 2.6.13 çekirdek beri mevcuttur), görüntü olabilir cpio arşivi (isteğe bağlı olarak sıkıştırılmış). Arşiv, çekirdek tarafından , ilk kök dosya sistemi haline gelen özel bir tmpfs örneğine açılır . Bu şema, çekirdeğe derlenecek bir ara dosya sistemi veya blok sürücüleri gerektirmeme avantajına sahiptir. Bazı sistemler, bir initramfs görüntüsü oluşturmak için dracut paketini kullanır. initramfs şemasında, çekirdek , çıkması beklenmeyen ilk işlemi olarak /init'i yürütür . Bazı uygulamalar için initramfs, salt okunur bir kök dosya sistemi görüntüsü üzerine bir kalıcılık katmanı yerleştirmek için unionfs kullanarak yazılabilir bir ortam oluşturmak için casper yardımcı programını kullanabilir . Örneğin, bindirme verileri bir USB flash sürücüde depolanabilirken, canlı bir CD'de saklanan sıkıştırılmış bir SquashFS salt okunur görüntüsü bir kök dosya sistemi görevi görür.

İçinde statik olarak hangi algoritmaların derlendiğine bağlı olarak, çekirdek gzip , bzip2 , LZMA , XZ , LZO ve LZ4 ile sıkıştırılmış initrd/initramfs görüntülerini açabilir .

Montaj hazırlıkları

Debian gibi bazı Linux dağıtımları , yalnızca ATA , SCSI ve dosya sistemi çekirdek modülleri gibi belirli bir bilgisayarı başlatmak için gerekli olanı içeren özelleştirilmiş bir initrd görüntüsü oluşturur . Bunlar tipik olarak kök dosya sisteminin konumunu ve türünü gömer.

Diğer Linux dağıtımları ( Fedora ve Ubuntu gibi ) daha genel bir initrd görüntüsü oluşturur. Bunlar yalnızca kök dosya sisteminin (veya UUID'sinin ) aygıt adıyla başlar ve önyükleme sırasında diğer her şeyi keşfetmelidir. Bu durumda, yazılım, kök dosya sistemini monte etmek için karmaşık bir görev dizisi gerçekleştirmelidir:

  • Önyükleme işleminin bağlı olduğu tüm donanım sürücüleri yüklenmelidir. Ortak bir düzenleme, ortak depolama aygıtları için çekirdek modüllerini initrd'ye paketlemek ve daha sonra bilgisayarın algılanan donanımıyla eşleşen modülleri çekmek için bir hotplug aracısını çağırmaktır .
  • Önyükleme açılış ekranı görüntüleyen sistemlerde , video donanımı başlatılmalı ve bir kullanıcı alanı yardımcısı, önyükleme işlemiyle birlikte ekranda animasyonlar boyamaya başlamalıdır.
  • Kök dosya sistemi NFS üzerindeyse, daha sonra birincil ağ arayüzünü getirmeli , bir DHCP kirası alabileceği bir DHCP istemcisini çağırmalı , NFS paylaşımının adını ve NFS sunucusunun adresini kiralamadan çıkarmalıdır. ve NFS paylaşımını bağlayın.
  • Kök dosya sistemi bir yazılım RAID aygıtında görünüyorsa, RAID biriminin hangi aygıtları kapsadığını bilmenin bir yolu yoktur; mevcut tüm blok cihazlarını taramak ve gerekli olanları çevrimiçi duruma getirmek için standart MD yardımcı programları çalıştırılmalıdır .
  • Kök dosya sistemi mantıksal bir birimde görünüyorsa , LVM yardımcı programları, onu içeren birim grubunu taramak ve etkinleştirmek için çağrılmalıdır .
  • Kök dosya sistemi şifreli bir blok aygıtındaysa, yazılımın kullanıcıdan bir parola yazmasını ve/veya bir donanım belirteci ( akıllı kart veya USB güvenlik dongle gibi ) takmasını istemek için bir yardımcı komut dosyası başlatması gerekir ve ardından aygıt eşleyicisiyle bir şifre çözme hedefi oluşturun .

Bazı dağıtımlar , donanım aygıtları, disk bölümleri ve belirli kurallarla eşleşen depolama birimleri gibi yardımcı programları çağıran udev gibi olay güdümlü bir hotplug aracısı kullanır . Bu, keşfin paralel olarak çalışmasına ve kök dosya sistemine ulaşmak için kademeli olarak LVM, RAID veya şifrelemenin keyfi yuvalarına kademeli olarak geçiş yapmasına izin verir.

Kök dosya sistemi nihayet görünür hale geldiğinde, bağlı bir kök dosya sisteminde çalıştırılamayan tüm bakım görevleri yapılır, kök dosya sistemi salt okunur olarak bağlanır ve çalışmaya devam etmesi gereken tüm işlemler (açılış ekranı yardımcısı ve bunun gibi) komutu FIFO ) yeni bağlanan kök dosya sistemine kaldırılır.

Son kök dosya sistemi basitçe / üzerine monte edilemez , çünkü bu, ilk kök dosya sistemindeki komut dosyalarını ve araçları son temizleme görevleri için erişilemez hale getirir:

  • Bir initrd'de, yeni kök geçici bir bağlama noktasına monte edilir ve pivot_root(8) (özellikle bu amaç için tanıtılmıştır ) ile yerine döndürülür . Bu, ilk kök dosya sistemini, normal önyükleme komut dosyalarının daha sonra initrd tarafından tutulan belleği boşaltmak için bağlantısını kesebileceği bir bağlama noktasında ( /initrd gibi ) bırakır .
  • Bir initramfs üzerinde, ilk kök dosya sistemi döndürülemez. Bunun yerine, basitçe boşaltılır ve son kök dosya sistemi üste monte edilir.

Çoğu ilk kök dosya sistemi, /linuxrc veya /init'i bir kabuk betiği olarak uygular ve bu nedenle, bazı temel kullanıcı alanı yardımcı programları (genellikle BusyBox araç takımı) ile birlikte minimum bir kabuk (genellikle /bin/ash ) içerir. Alan tasarrufu daha için, kabuk, yardımcı ve destekleyici kütüphaneler (örneğin olduğu gibi etkin alanı en iyi duruma derlenen gcc Var '-OS' Bayrak) ve karşı bağlı klibc , en az bir sürümünü C kütüphanesi , bu amaç için özel olarak yazılmış .

Diğer kullanımlar

Linux dağıtımları için yükleyiciler, herhangi bir kalıcı depolama kurulmadan önce yükleyici arabirimini ve destekleyici araçları barındırabilmeleri gerektiğinden, genellikle tamamen bir initramfs'den çalışır.

Tiny Core Linux ve Puppy Linux tamamen initrd'den çalışabilir.

Diğer işletim sistemlerindeki benzerlikler

Windows Vista'dan bu yana Windows , dosya biçiminin yayınlandığı bir WIM disk görüntü dosyasından önyükleme yapabilir ; sabit bağlantıları desteklemesi, parça parça sıkıştırma kullanması ve tekilleştirilmiş parçaları desteklemesi dışında ZIP formatına oldukça benzer. Bu durumda, tüm WIM başlangıçta RAM'e yüklenir, ardından çekirdek başlatma işlemi yapılır. Ardından, yüklenen WIM, atanmış bir sürücü harfine sahip bir SystemRoot olarak kullanılabilir. Windows yükleyici bunu BOOT.WIM'den önyükleme yapmak için kullanır ve ardından yüklenecek Windows dosyalarının koleksiyonu olarak INSTALL.WIM'i kullanır.

Ayrıca, Windows Önkurulum Ortamı (Windows PE), bazı virüsten koruma ve yedekleme/olağanüstü durum kurtarma yazılımlarının ayrı önyükleme sürümleri için bir temel olarak aynı şeyi kullanır.

Windows'u her zaman fiziksel bir sürücüye yerleştirilmiş bir WIM veya VHD dosyasından önyüklenecek şekilde yüklemek de mümkündür. Ancak, Windows önyükleme yükleyicisi, Linux'ta initrd gerektiren görev olan, önyükleme zamanı çekirdek modüllerinin kendisi için .sys dosyalarını yükleyebildiğinden, bu nadiren kullanılır.

Ayrıca bakınız

Referanslar

Dış bağlantılar