prepinani bootu mezi 2 partitions
Dan Lukes
dan at obluda.cz
Tue Sep 12 21:23:08 CEST 2017
Miroslav Lachman wrote:
> 3 slice. Jelikoz je to na gmirroru, tak je to gm0s1, gm0s2, gm0s3
> Na kazde je pak BSD label
> gm0s1a / (root)
> gm0s2a alternativni root
> gm0s3b swap
> gmos3d /var a /home
>
> Predstava byla takova, ze na s1a a s2a bude vzdy system + baliky, pri
> upgrade se udela upgrade na neaktivnim oddilu a pak se na nej rebootne.
Pokud se neco nezmenilo (aniz jsem si vsiml), tak "bootovani z gmirroru"
funguje ve skutecnosti "nahodou".
Jak sam rikas "je to na mirroru" - takze abyses dostal ke slice a
partition, nejprve musis projit pres uroven "gmirror".
Jenze ani BIOS ani FreeBSDacky stage 1 loader gmirror neumi. To, ze ti
to s MBR nabootuje je dano "nahodou" - tech par klicovych sektoru, je
nakonec na fyzickem disku stastne zapsane na stejnem miste jako kdyby
tam zadny gmirror nebyl.
S GPT uz to nefunguje, protoze ona "stastna nahoda" plati jen pro
nekolik malo prvnich sektoru a GPT ma sve informace ulozene nejen na
zacatku, ale take na konci disku - a konec uz pro toho, kdo o gmirroru
nevi, nesedi.
Uvedomuju si, ze mluvim o uplne jinem problemu, nez na ktery jsi se ptal
a nechystam se te presvedcovat at to takhle nedelas - jen upozornuju, ze
to co mas je vlastne "spinava konfigurace" a musis na to pamatovat pri
priadnych budoucich zmenach (zrovna napriklad kdybys jednou chtel prejit
na GPT).
Ja osobne jsem to resival tak, ze 'boot svazek' nebyl na mirroru, ale
proste tam byly dva fyzicke svazky, kazdy na jednom disku. Zbytek uz byl
stejny jako to mas ty - jeden aktivni, druhy neaktivni ...
OK, dost odpovedi na nepolozene otazky a vratime se k te polozene.
> Otazka pak je - co tedy ovlivni boot manager?
Mozna bude jednodussi, kdyz, co mozna strucne, popisu jak takovy boot
vlastne vypada. Pro jednoduchost se budu venovat pouze klasickemu BIOSu
a nikoliv UEFI firmware.
1. BIOS nainicializuje zakladni desku s prislusenstvim a pristoupi k
bootovani operacniho systemu - z jakeho zarizeni se pokusi system
nabootovat je zalezitosti konfigurace BIOSu. Pro jednoduchost budeme
vybranemu bootovacimu zarizeni rikat systemovy disk.
2. BIOS precte obsah prvniho sektoru systemoveho disku, okontroluje, ze
na pozicich 510 a 511 jsou hodnoty 55h a AAh (takzvana "boot signature",
znamka toho, ze obsah sektoru je platny), placne ho do pameti a preda
rizeni programovemu kodu na zacatku sektoru. A co se bude dit dal je uz
zalezitosti toho kodu.
Uz jen FreeBSD dava na vyber dve varianty co do tohoto sektoru dat.
"Klasicky" a FreeBSD interaktivni. V trifazovem bootovani, ktere je pro
FreeBSD typicke, je toto faze 1.
3a. klasicky kod prohrabe partition table, ktera je v tom sektoru taky,
najde prvni aktivni partition, z ni precte precte prvni sektor,
okontroluje, ze je platny, flakne ho do pameti a preda mu rizeni
3b. Interaktivni, z partition table a dalsich kofniguracnich informaci,
ktere ma v sektoru ulozene vytvori "seznam kandidatu", necha z nich
uzivatele vybrat (to je ten Fn... prompt), z vybraneho oddilu precte
precte prvni sektor, okontroluje, ze je platny, flakne ho do pameti a
preda mu rizeni.
Pokud se systemovy disk jmenuje ada0, pak jednotlive partition jsou
s1..s4 a mluvime tedy o precteni prvniho sektoru z, napriklad, ada0s1
4. V pripade, ze partition vybrana (v 3a nebo 3b) je FreeBSD, pak ma na
zacatku BSDLABEL - a jeji soucasti je znovu kod, ktery se po jeho
umisteni do pameti spusti udela velmi podobnou vec co kod z MBR. Kod
tabulku, ktera oddil dale deli (oddily oznacene pismenky - a,b,c,d,...)
a vybere, ktera z nich bude bootovaci. Tady se na zadne "active"
nehraje, tenhle kod si "konfiguraci" precte v souboru /boot.config,
krome toho je interaktivni (FreeBSD/x86 boot) takze ho muze ovlivnit i
uzivatel. Vysledkem rozhodovaciho procesu je "co a odkud natahnout dal".
To o cem ted mluvim je "faze 2".
Natahnout se da ledacos z ledakdes, obvykle to ale je /boot/loader z
oddllu 'a'. A pote co se natahne mu je predano rizeni. Tim vstupujeme do
faze 3.
5. Loader za pouziti informaci v /boot/loader.conf a pripadne take
dalsich vcetne interaktivniho vstupu uzivatele (menu a/nebo prompt)
rozhodne co natahne a odkud. Typicky /boot/kernel/kernel - ten se
natahne a preda se mu rizeni, cimz je okonceno zavadeni systemu a zacina
jeho vlastni beh.
Dobu kdy bezel kod 'loader' hovorime o fazi 3.
No a to je ze zakladu vsechno. Ano, da se to komplikovat - napriklad
vynechavat faze (fyzicky disk muze rovnou zacinat BSDLabel a nemit vubec
zadnou MBR a navic nemusi natahnout /boot/loader ale klidne rovnou
/boot/kernel/kernel) ale ja myslim, ze to je komlikovay dost i bez toho ;-)
Ted bys uz mel tusit jak se v jednotlivych fazich vybira "kudy dal" a
jak teda dosahnout toho, co potrebujes.
A kdyz ne, tak se doptas ;-)
Dan
More information about the Users-l
mailing list