Boot Configuration Data

From EIK wiki

Mis on Boot Configuration Data (BCD)?

BCD pakub püsivara sõltumatut mehhanismide kogumit manipuleerimaks alglaadimise keskkonna andmestikku igal Windowsil põhineval arvutil ehk BCD sisaldab detailset loetelu sellest, et mida ja kuidas laetakse pärast arvuti käivitamist või restarti. See on Windowsis kasutusel alates Vistast. Windows kasutab BCD selle jaoks et laadida üles operatsioonisüsteem ja jooksutab erinevaid alglaadimise programme nagu näiteks mälu diagnostika.

BCD loomisega kadus ära Windows NT boot loader - ntldr ning see asendati kolme erineva komponendiga:

  • Windows Boot Manager (Bootmgr.exe)
  • Windows operating system loader (Winload.exe)
  • Windows resume loader (Winresume.exe)

Samuti asendas BCD traditsionaalse boot.ini tekstifaili BIOS'il baseeruvates süsteemides.

BCD ülesehitus

BCD ülesehitus on hierarhiline. See koosneb kolmest baaskomponendist: hoidlast, objektidest ja elementidest.

BCDjoonis.png

BCD hoidla

BCD hoidla (store) on kõrgeima taseme komponent. Selle funktsioon on olla nimeruumi konteineriks ülejäänud objektidele ja elementidele. Füüsiliselt asub BCD hoidla kettal binaarse failina ja on vastava .wim failiga sama nimega ning samas kaustas buudi süsteemikujutisega (boot image). BCD hoidla kirjeldab ära kõik erinevad installeeritud Windowsid ja nendega kaasnevad alglaadimise rakendused.

Tüüpilise BCD hoidla näide:

BCDjoonis2.png

BCD objekt

BCD objekt (object) on BCD elementide konteiner. Kõige tavalisemat tüüpi BCD objekt kirjeldab alglaadimise keskkonna aplikatsiooni, nagu näiteks Windowsi buudilaadurit (boot loader), aga neid objekte kasutatakse ka muudel eesmärkidel.

Objektid jaotuvad kolme põhikategooriasse: rakenduste objektid (application objects), päritavad objektid (inheritable objects) ja seadmete objektid (device objetcs). Kõige tavalisem BCD objekt on rakenduse objekt, mis kirjeldab buutimiskeskkonna rakendust nagu näiteks Windowsi buutimishaldur (boot manager) või Windowsi buutimislaadur. Igat objekti tähistab unikaalne 128 bitine GUID mis sisaldab 32 bitist kirjeldust, määrates ära selle objekti tüübi.

Joonisel on kujutatud üldine BCD objekti vorming. Olenevalt objekti kategooriast erineb andmepaigutus vahemikus 0-27 bitti.

BCDjoonis5.png

BCD element

BCD element (element) on singulaarne andmeühik nagu näiteks siluri (debugger) seadistus, alglaadimise aplikatsiooni nimi või OS'i süsteemiseade. Elemendid sisalduvad kindlas objektis. Buutimiskeskkonna rakendusel on oma BCD rakenduse objekt ning seal sisalduvad erinevad elemendid mis omakorda sisaldavad rakenduse konfiguratsiooni.

Mõned elemendid võivad olla seotud ainult kindlate objektidega, aga teised võivad kehtida kõikide buutimiskeskkonna rakenduste kohta. Elementide haldamise lihtsustamiseks on elemendi nimeruum jaotatud kolme erinevasse klassi.

BCDjoonis6.png

BCD elemendid koosnevad struktureeritud andmetest. Järgnev tabel näitab neid erinevaid vorminguid ja nendele omistatud koodi:

BCDjoonis7.png

BCD asukoht arvutis

  • BIOS'il baseeruvatel operatsioonisüsteemidel asub BCD registri fail aktiivse partitsiooni \Boot\Bcd kasutas.
  • EFI'l baseeruvatel operatsioonisüsteemides asub BCD EFI süsteemi partitsiooni peal.

Kuidas redigeerida BCD'd

  • Startup and Recovery hüpikaken võimaldab kasutajal valida vaikimisi OS'i juhul kui on installeeritud mitu erinevat operatsioonisüsteemi. Samuti on võimalik valida kas üldse kuvada OS'i ja süsteemitaaste valikud (recovery options) ning kaua neid näidata kuni vaikimisi seatud OS'i buuditakse. Nendele seadistustele pääseb ligi (juhul kui kasutajal on administraatori õigused):
    • Ava Start menüü
    • Parem klikk Computer
    • Ava Properties
    • Vasakult akna äärest ava Advanced system settings
    • Liigu Advanced kaardile
    • Sealt kliki Startup and Recovery kastis olevale Settings nupule


BCDjoonis8.png

Kuidas BCD holidlat luuakse?

WDS loob iga kettatõmmise jaoks eraldi BCD hoidla. See juhtub automaatselt kui WDS'i server on käivitatud ja BINLSVC on initsialiseeritud. BINLSVC loetleb üles iga WIM'is oleva \Boot\<arch>\Images kataloogi mis on märgitud alglaadimisvõimeliseks. Kui ta leiab sobiva kettatõmmise siis loob server igale WIM'is olevale OS'ile oma BCD hoidla, aga seda ainult siis kui:

  • Samasugust BCD'd juba ei ekisteeri selles kettatõmmises.
  • Selle WIM faili ajatempel (timestamp) ei ole uuem vastloodud BCD'st.
    • See võib juhtuda, siis kui kettatõmmise metaandmeid uuendati (näiteks kui muuteti WIM'i nime).

Kui lisatakse või muudetakse alglaadimise süsteemikujutist sellel ajal kui WDS töötab, siis peab serverile teada andma et midagi on muutetud enne kui hakatakse genereerima BCD hoidlat. Kui kasutada WDS'i enda tööriistu siis avastatakse kõik muutused õigeaegselt, aga kui fail kopeeritakse käsitsi, siis ei avastata muutusi automaatselt.

Järgmine samm BCD genereermise protsessis on konkreetse BCD hoidla loomine mida kliendi arvuti hakkab kasutama. Lõppkasutaja BCD hoidla koosneb Default.bcd'st mis on siduratud konkreetse süsteemikujutise BCD hoidla'ga.

Järgnev kirjeldab seda protsessi samm-sammult:

  • BINLSVC saab signaali alustada BCD hoidla loomist. See initsialiseerib iga erineva arhitektuuri jaoks BCD hoidla genereerimise.
  • Default.bcd fail kopeeritakse RemoteInstall\Boot\<arch> kataloogist \RemoteInstall\Tmp kataloogi.
  • Buudilaaduri suvandid iga erineva süsteemikujutise BCD hoidla jaoks kopeeritakse \Boot\<arch>\Images kaustast \Tmp kataloogi.
  • Üks süsteemikujutis on vaikimisi määratud esimeseks. Vaikimisi süsteemikujutiseks saab tähestikuliselt eespool olev (juhul kui pole seatud teistmoodi).

Kuidas WDS määrab ära BCD hoidla?

Kui netbootMachineFilePath on määratud siis NBP (Name Binding Protocol) otsib BCD hoidlat samast kaustast kuhu netbootMachineFilePath suunab. Kui see hoidla on seal olemas, siis võetakse see kasutusse.

  • Näiteks netbootMachineFilePath osutab \RemoteInstall\Boot\x86\test\pxeboot.com failile ning kui samas kataloogis on ka BCD hoidla, siis võetakse see kasutusele.

Sellised võimalused lubavad iga eraldi süsteemikujutise jaoks oma BCD hoidla määrata. Selleks tuleb lihtsalt oma kohandatud BCD hoidla kopeerida vastavasse asukohta (sinna kuhu osutab netbootMachineFilePath).
Kui BCD hoidlat ei ole seal kuhu osutab netbootMachineFilePath, siis võtab WDS /Tmp kaustast arhitektuurile omase BCD hoidla kasutusele.

BCD võimalikud parandamise viisid

  • Trükkida CMD akna käsureale bootrec /rebuildbcd ja vajuta Enter.
    • Buutimise vea võib põhjustada see, et BCD mingit failid on rikutud. /rebuildbcd parameeter parandab enamus taolisi vigasid ja ta loob täiesti uue BCD.
  • Trükkida CMD akna käsureale bootrec /scanos ja vajuta Enter.
    • /ScanOs parameeter skaneerib kõiki kettaid selleks et tuvastada kõiki Windows Vista ja Windows 7 installatsioone, mis ei ole momendil lülitatud Boot Configuration Data (BCD) tabelisse. Juhul kui bootrec /scanos käsk kuvab umbes sellise alltoodud tulemuse, siis on kõik korras (tuvastati vähemalt üks operatsioonisüsteem) ja Sa võid jätkata oma buutimisprobleemide lahendamist ning parandamist:

BCDjoonis4.png

Kasutatud allikad

Autor

Tambet Liiv
A22