Ramdisk inițial - Initial ramdisk

În calcul (în special în ceea ce privește calculul Linux ), initrd( ramdisk inițial ) este o schemă pentru încărcarea unui sistem de fișiere rădăcină temporar în memorie , care poate fi utilizat ca parte a procesului de pornire Linux . initrdși initramfsfaceți referire la două metode diferite de realizare a acestui lucru. Ambele sunt utilizate în mod obișnuit pentru a face pregătiri înainte ca sistemul de fișiere rădăcină real să poată fi montat .

Justificare

Multe distribuții Linux livrează o singură imagine generică de kernel Linux - una pe care dezvoltatorii distribuției o creează special pentru a porni pe o gamă largă de hardware. De drivere de dispozitiv pentru această imagine de kernel generice sunt incluse ca module de kernel incarcabile deoarece compilarea mai multor conducători auto static într - un singur nucleu face ca imaginea de kernel să fie mult mai mare, poate prea mare pentru încărcare de pe computere cu memorie limitată. Acest lucru ridică apoi problema detectării și încărcării modulelor necesare pentru montarea sistemului de fișiere rădăcină la momentul pornirii sau, de altfel, deducând unde sau ce este sistemul de fișiere rădăcină.

Pentru a complica lucrurile, sistemul de fișiere rădăcină poate fi pe un volum RAID software , LVM , NFS (pe stații de lucru fără disc) sau pe o partiție criptată. Toate acestea necesită pregătiri speciale pentru montare.

O altă complicație este suportul kernel-ului pentru hibernare , care suspendă computerul pe disc, aruncând o imagine a întregului conținut al memoriei într-o partiție swap sau într-un fișier obișnuit, apoi oprindu-se. La următoarea încărcare, această imagine trebuie făcută accesibilă înainte de a putea fi încărcată din nou în memorie.

Pentru a evita să trateze hardcore-ul pentru atât de multe cazuri speciale în nucleu, se folosește o etapă inițială de boot cu un sistem de fișiere rădăcină temporar - numit acum spațiu timpuriu pentru utilizator. Acest sistem de fișiere rădăcină poate conține ajutoare de spațiu utilizator care fac detectarea hardware, încărcarea modulului și descoperirea dispozitivului necesare pentru a monta sistemul de fișiere rădăcină real.

Implementare

O imagine a acestui sistem inițial de fișiere rădăcină (împreună cu imaginea nucleului) trebuie stocată undeva accesibilă de bootloader-ul Linux sau de firmware-ul de boot al computerului. Acesta poate fi sistemul de fișiere rădăcină în sine, o imagine de boot pe un disc optic , o partiție mică pe un disc local (o partiție de boot , de obicei folosind sisteme de fișiere ext2 sau FAT ) sau un server TFTP (pe sistemele care pot porni de pe Ethernet ).

Programul de încărcare va încărca nucleul și imaginea sistemului de fișiere rădăcină inițial în memorie și apoi va porni nucleul, trecând adresa de memorie a imaginii. La sfârșitul secvenței de boot, nucleul încearcă să determine formatul imaginii din primele câteva blocuri de date, care pot duce fie la schema initrd, fie la initramfs.

În schema initrd , imaginea poate fi o imagine a sistemului de fișiere (opțional comprimată), care este pusă la dispoziție într-un dispozitiv special de bloc ( / dev / ram ) care este apoi montat ca sistemul de fișiere rădăcină inițial. Driverul pentru acel sistem de fișiere trebuie să fie compilat static în nucleu. Multe distribuții foloseau inițial imagini de sistem de fișiere ext2 comprimate , în timp ce celelalte (inclusiv Debian 3.1) foloseau cramfs pentru a porni pe sisteme limitate de memorie, deoarece imaginea cramfs poate fi montată pe loc fără a necesita spațiu suplimentar pentru decompresie. Odată ce sistemul de fișiere rădăcină inițial este activat, nucleul execută / linuxrc ca primul său proces; când iese, nucleul presupune că sistemul de fișiere rădăcină real a fost montat și execută / sbin / init pentru a începe procesul normal de boot al spațiului utilizatorului.

În schema initramfs (disponibilă de la nucleul Linux 2.6.13), imaginea poate fi o arhivă cpio (opțional comprimată). Arhiva este despachetată de kernel într-o instanță specială a unui tmpfs care devine sistemul de fișiere rădăcină inițial. Această schemă are avantajul că nu necesită un sistem de fișiere intermediar sau drivere de blocuri pentru a fi compilate în nucleu. Unele sisteme folosesc pachetul dracut pentru a crea o imagine initramfs. În schema initramfs, nucleul execută / init ca primul său proces care nu se așteaptă să iasă. Pentru unele aplicații, initramfs poate utiliza utilitarul casper pentru a crea un mediu de scriere folosind unionfs pentru a suprapune un strat de persistență peste o imagine de sistem de fișiere rădăcină numai în citire. De exemplu, datele suprapuse pot fi stocate pe o unitate flash USB , în timp ce o imagine comprimată de numai citire SquashFS stocată pe un CD live acționează ca un sistem de fișiere rădăcină.

În funcție de algoritmii care au fost compilați static, nucleul poate despacheta imaginile initrd / initramfs comprimate cu gzip , bzip2 , LZMA , XZ , LZO și LZ4 .

Pregătiți muntele

Unele distribuții Linux, cum ar fi Debian, vor genera o imagine inițială personalizată care conține doar tot ce este necesar pentru a porni un anumit computer, cum ar fi modulele ATA , SCSI și sistemul de fișiere kernel . Acestea încorporează de obicei locația și tipul sistemului de fișiere rădăcină.

Alte distribuții Linux (cum ar fi Fedora și Ubuntu ) generează o imagine initrd mai generică. Acestea încep doar cu numele dispozitivului sistemului de fișiere rădăcină (sau UUID-ul său ) și trebuie să descopere orice altceva la momentul pornirii. În acest caz, software-ul trebuie să efectueze o cascadă complexă de sarcini pentru a instala sistemul de fișiere rădăcină:

  • Trebuie încărcat orice driver hardware de care depinde procesul de boot. Un aranjament obișnuit este să împacheteze module kernel pentru dispozitive de stocare comune pe initrd și apoi să invoce un agent hotplug pentru a extrage module care corespund hardware-ului detectat al computerului.
  • Pe sistemele care afișează un ecran de pornire de pornire , hardware-ul video trebuie inițializat și un ajutor pentru spațiul utilizatorului a început să picteze animații pe afișaj în bloc, cu procesul de pornire.
  • Dacă sistemul de fișiere rădăcină este pe NFS, acesta trebuie apoi să deschidă interfața de rețea principală , să invoce un client DHCP , cu care poate obține un contract de leasing DHCP, extrage numele partajării NFS și adresa serverului NFS din leasing , și montați partajarea NFS.
  • Dacă sistemul de fișiere rădăcină pare a fi pe un dispozitiv RAID software, nu există nicio modalitate de a ști ce dispozitive se întinde pe volumul RAID; utilitarele standard MD trebuie invocate pentru a scana toate dispozitivele bloc disponibile și pentru a le aduce online pe cele necesare.
  • Dacă sistemul de fișiere rădăcină pare a fi pe un volum logic , utilitarele LVM trebuie invocate pentru a căuta și activa grupul de volume care îl conține.
  • Dacă sistemul de fișiere rădăcină se află pe un dispozitiv blocat criptat, software-ul trebuie să invoce un script de asistență pentru a solicita utilizatorului să introducă o frază de acces și / sau să introducă un simbol hardware (cum ar fi o cartelă inteligentă sau un dongle de securitate USB ) și apoi creați o țintă de decriptare cu dispozitivul de mapare a dispozitivului .

Unele distribuții utilizează un agent hotplug bazat pe evenimente , cum ar fi udev , care invocă programe de asistență, deoarece dispozitivele hardware, partițiile de disc și volumele de stocare care corespund anumitor reguli sunt online. Acest lucru permite descoperirea să ruleze în paralel și să cadă progresiv în cuiburi arbitrare de LVM, RAID sau criptare pentru a ajunge la sistemul de fișiere rădăcină.

Când sistemul de fișiere rădăcină devine în cele din urmă vizibil, toate sarcinile de întreținere care nu pot rula pe un sistem de fișiere rădăcină montat sunt finalizate, sistemul de fișiere rădăcină este montat numai în citire și orice proces care trebuie să ruleze în continuare (cum ar fi ajutorul pentru ecranul de splash și comanda FIFO ) sunt ridicate în noul sistem de fișiere rădăcină montat.

Sistemul final de fișiere rădăcină nu poate fi montat pur și simplu peste / , deoarece acest lucru ar face scripturile și instrumentele din sistemul inițial de fișiere rădăcină inaccesibile pentru orice sarcini finale de curățare:

  • Pe un initrd, noua rădăcină este montată într-un punct de montare temporar și rotită în loc cu pivot_root (8) (care a fost introdus special în acest scop). Acest lucru lasă sistemul de fișiere rădăcină inițial într-un punct de montare (cum ar fi / initrd ), unde scripturile de pornire normale îl pot demonta ulterior pentru a elibera memoria deținută de initrd.
  • Pe un initramfs, sistemul de fișiere rădăcină inițial nu poate fi rotit. În schimb, este pur și simplu golit și sistemul de fișiere rădăcină final montat deasupra.

Majoritatea sistemelor inițiale de fișiere rădăcină implementează / linuxrc sau / init ca un script shell și includ astfel un shell minim (de obicei / bin / ash ) împreună cu unele utilități de spațiu utilizator esențiale (de obicei setul de instrumente BusyBox ). Pentru a economisi mai mult spațiu, shell-ul, utilitățile și bibliotecile de suport ale acestora sunt de obicei compilate cu optimizări de spațiu activate (cum ar fi cu steagul "-Os" al gcc ) și legate de klibc , o versiune minimă a bibliotecii C scrisă special în acest scop .

Alte utilizări

Instalatorii pentru distribuțiile Linux rulează de obicei în întregime dintr-un initramfs, deoarece trebuie să fie capabili să găzduiască interfața de instalare și instrumentele de suport înainte ca orice stocare persistentă să fie configurată.

Tiny Core Linux și Puppy Linux pot rula în întregime de la initrd.

Asemănări în alte sisteme de operare

De la Windows Vista, Windows poate porni dintr-un fișier imagine de disc WIM , pentru care este publicat formatul de fișier; este destul de similar cu formatul ZIP, cu excepția faptului că acceptă legături dure, utilizează compresie bucată cu bucată și poate suporta bucăți deduplicate. În acest caz, întregul WIM este încărcat inițial în RAM, urmat de inițializarea kernel-ului. Apoi, WIM-ul încărcat este disponibil ca SystemRoot cu o literă de unitate atribuită. Programul de instalare Windows îl folosește, deci pornește de la BOOT.WIM, apoi folosește INSTALL.WIM ca colecție de fișiere Windows care urmează să fie instalate.

De asemenea, Windows Preinstallation Environment (Windows PE) folosește același lucru, fiind o bază pentru versiuni de boot separate ale unor programe antivirus și de backup / recuperare în caz de dezastru.

De asemenea, este posibil să instalați Windows, astfel încât acesta să pornească întotdeauna dintr-un fișier WIM sau VHD plasat pe o unitate fizică. Cu toate acestea, acest lucru este rar folosit, deoarece încărcătorul de pornire Windows este capabil să încarce fișierele .sys pentru modulele de kernel în timp de pornire, care este sarcina care necesită initrd în Linux.

Vezi si

Referințe

linkuri externe