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