# [SOLVED] Nowy grub czyli stage1 i stage2

## Xywa

Witam,

Po dzisiejszym updatcie dostałem następującą propozycje:

 *Quote:*   

> * *** IMPORTANT NOTE: you must run grub and install
> 
>  * the new version's stage1 to your MBR.  Until you do,
> 
>  * stage1 and stage2 will still be the old version, but
> ...

 

O co chdzi z tą nową wersją stage1? Jak mam to zainstalować?Last edited by Xywa on Tue May 06, 2008 3:00 pm; edited 1 time in total

----------

## Drwisz

Ręce opadają. 

Ale dobra: Grub jest złożony z dwóch części ( jedna w  mbr druga w innym miejscu).

I obie muszą być w przypadku tej aktualizacji, zgodne co do wersji.

Reszta w 

```
#man grub
```

----------

## Xywa

 *Drwisz wrote:*   

> Ręce opadają. 
> 
> Ale dobra: Grub jest złożony z dwóch części ( jedna w  mbr druga w innym miejscu).
> 
> I obie muszą być w przypadku tej aktualizacji, zgodne co do wersji.
> ...

 

OK. Używam Gentoo i moja znajomość sprowadzała się do instalkacji gruba przy instalacji systemu. Wystarczyło to na kilka lat i nie było potrzeby studiować man gruba. Skoro mam komunikat o tym że musze zainstalować nową wersję stage1, i niegdy wcześniej nie musiałem tego robić (ani o tym nie czytałem) to chyba normalne że pytam na forum, tym bardziej że jest zagrożenie że jeżeli zrobię coś nie tak, to system nie wstanie.

p.s. W man grub nie ma nic o update stage1

----------

## Drwisz

Masz napisane jak byk co trzeba zrobić w komunikacie. I druga sprawa: ja nie korzystam z gruba. Wolę lilo. Idąc za twoim tokiem rozumowania nie uzyskał byś porady. No, przynajmniej ode mnie. 

Lubię czasem sobie pogderać, i proszę mi tego nie odbierać.  :Twisted Evil: 

----------

## nieprosty

 *Xywa wrote:*   

> 
> 
> OK. Używam Gentoo i moja znajomość sprowadzała się do instalkacji gruba przy instalacji systemu. Wystarczyło to na kilka lat i nie było potrzeby studiować man gruba. Skoro mam komunikat o tym że musze zainstalować nową wersję stage1, i niegdy wcześniej nie musiałem tego robić (ani o tym nie czytałem) to chyba normalne że pytam na forum, tym bardziej że jest zagrożenie że jeżeli zrobię coś nie tak, to system nie wstanie.
> 
> p.s. W man grub nie ma nic o update stage1

 

Aktualizując gruba zaktualizowałeś tylko pakiet, który systemowi jest do szczęścia nie potrzebny. Jeżeli sobie zerkniesz do handbooka to zobaczysz, że po wydaniu emerge grub i zainstalowaniu go w systemie trzeba go jeszcze skonfigurować. Konfiguracja polega na uruchomieniu konsoli grub i wydaniu dwóch magicznych poleceń, które to właśnie instalują wspomniane stage1 i 2 do /boot. I tego właśnie nie wykonałeś.

Tak naprawdę gruba po tym jak się go zainstaluje w mbr można spokojnie usunąć bo system już z niego nie korzysta. O ile mnie pamięć nie myli w pierwszych wersjach handbooka było nawet żeby go emergować z opcja --oneshoot.

Pozdrawiam

----------

## Xywa

 *Drwisz wrote:*   

> Masz napisane jak byk co trzeba zrobić w komunikacie. 

 

Przecież o to pytam - mam w komunikacie że muszę zainstalować nową wersję stage1 do mbr - problem w tym że nie wiem jak to zrobić.

W googlach raptem 4 linki, ale bez konkretów: http://www.google.pl/search?hl=pl&q=%22you+must+run+grub+and+install%22&btnG=Szukaj&lr=

----------

## nieprosty

 *Xywa wrote:*   

>  *Drwisz wrote:*   Masz napisane jak byk co trzeba zrobić w komunikacie.  
> 
> Przecież o to pytam - mam w komunikacie że muszę zainstalować nową wersję stage1 do mbr - problem w tym że nie wiem jak to zrobić.
> 
> W googlach raptem 4 linki, ale bez konkretów: http://www.google.pl/search?hl=pl&q=%22you+must+run+grub+and+install%22&btnG=Szukaj&lr=

 

To nie szukaj w google tylko przeczytaj rozdział instalacja bootloader'a w handbook'u gentoo. Tam jest dokładnie napisane co masz zrobić.

----------

## Drwisz

lektura obowiązkowa. 

http://www.gnu.org/software/grub/manual/grub.html#Top

Pod tym linkiem masz wszystko co jest Ci do szczęścia potrzebne. A nawet więcej.

Poniżej zamieszczam cytat z artykułu zamieszczonego w 63 nr magazynu "Phrack" przetłumaczonego przez Bartłomieja "seprob" Korpałę.

```
--[ 1.0 - Proces bootowania z Grubem

----[ 1.1 - Jak Grub pracuje?

                       +-----------------------+

                       | bootowanie, ładowanie |

                       |          MBR          |

                       +------------+----------+

                                    |

                     +----------------+     Nie

                     | Grub jest w MBR +------->-------+

                     +-------+--------+               |  

                       Tak   |  stage1        +-------+----------+

               Tak  +--------+---------+      | skok do aktywnej |

             +--<---+  stage1.5 config |      |   partycji       |

               |    +--------+---------+      +--------+---------+

               |         Nie |                      |

     +-------+-------------+|      |   +-----+-----------+   

     | ładowanie osadzonych | stage1-> | ładowanie boot- | 

     |      sektorów        |       |  |   -sektora      |

     +-------+--------------+   V      +-----+-----------+

           ^    |               |       + - - - < - - -  + Cf 1.3

           |    |               |                   +------+---------+

       stage1.5 +-------->------+--------->-------+ ładowanie stage2 +

                                                    +------+---------+

                                                           |

                                    +---------------<--------+

                                    V

                                  +------------+-----------+

                                  |   ładowanie grub.conf  |

                                  | wyświetlanie boot-menu |

                                  +-----------+-----------+

                                        | interakcja z użytkownikiem

                                       +---------+---------------+

                                        | ładowanie obrazu jądra |

                                        |     i bootowanie       |

                                        +------------------------+

                                        

--[ 1.2 - stage1

 stage1 ma 512 bajtów, a jego kod źródłowy możesz obejrzeć w

stage1/stage1.S. Jest zainstalowany w MBR lub w boot-sektorze głównej

partycji. Zadanie jest proste - załaduj określony sektor (zdefiniowany w

stage2_sector) do określonego adresu (zdefiniowany w

stage2_address/stage2_segment). Jeśli stage1.5 jest skonfigurowany, pierwszy

sektor stage1.5 jest ładowany do adresu 0200:000; jeśli nie, pierwszy sektor

stage2 jest ładowany do adresu 0800:0000.

----[ 1.3 - stage1.5 i stage2

 Wiemy że Grub jest loaderem wrażliwych systemów plików, tzn. Grub może

zrozumieć i czytać pliki z różnych systemów plików, bez pomocy systemu

operacyjnego. Ale jak? Sekret tkwi w stage1.5 i stage2. Spójrzmy na

/boot/grub, znajdziesz tam następujace pliki:

stage1, stage2, e2fs_stage1_5, fat_stage1_5, ffs_stage1_5, minix_stage1_5,

reiserfs_stage1_5, ...

Mamy wymienione stage1 w stage1.2, plik stage1 zostanie zainstalowany w MBR

lub w innym boot-sektorze. Więc nawet jeśli plik stage1 zostałby usunięty,

system zbootuje sie nienaruszony.

 Co z zerowaniem plików stage2 i *_stage1_5? Czy system może nadal bootować?

Odpowiedź brzmi 'nie' dla kwestii zerowania i 'tak' dla bootowania. Jesteś

zaskoczony tą odpowiedzią? Wiec kontynuuj czytanie...

 Zobaczmy jak *_stage1_5 i stage2 są generowane:

 

-------------------------------- POCZĄTEK -----------------------------------

e2fs_stage1_5:

gcc -o e2fs_stage1_5.exec -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000

   e2fs_stage1_5_exec-start.o e2fs_stage1_5_exec-asm.o

   e2fs_stage1_5_exec-common.o e2fs_stage1_5_exec-char_io.o

   e2fs_stage1_5_exec-disk_io.o e2fs_stage1_5_exec-stage1_5.o

   e2fs_stage1_5_exec-fsys_ext2fs.o e2fs_stage1_5_exec-bios.o  

   objcopy -O binary e2fs_stage1_5.exec e2fs_stage1_5

            

stage2:

gcc -o pre_stage2.exec -nostdlib -Wl,-N -Wl,-Ttext -Wl,8200

   pre_stage2_exec-asm.o pre_stage2_exec-bios.o pre_stage2_exec-boot.o

   pre_stage2_exec-builtins.o pre_stage2_exec-common.o

   pre_stage2_exec-char_io.o pre_stage2_exec-cmdline.o

   pre_stage2_exec-disk_io.o pre_stage2_exec-gunzip.o

   pre_stage2_exec-fsys_ext2fs.o pre_stage2_exec-fsys_fat.o

   pre_stage2_exec-fsys_ffs.o pre_stage2_exec-fsys_minix.o

   pre_stage2_exec-fsys_reiserfs.o pre_stage2_exec-fsys_vstafs.o

   pre_stage2_exec-hercules.o pre_stage2_exec-serial.o

   pre_stage2_exec-smp-imps.o pre_stage2_exec-stage2.o

   pre_stage2_exec-md5.o

   objcopy -O binary pre_stage2.exec pre_stage2

   cat start pre_stage2 > stage2

--------------------------------- KONIEC ------------------------------------

 Zgodnie z powyższym, powinno to wyglądać tak:

 

 e2fs_stage1_5:

   [start.S] [asm.S] [common.c] [char_io.c] [disk_io.c] [stage1_5.c]

   [fsys_ext2fs.c] [bios.c]

 stage2:

   [start.S] [asm.S] [bios.c] [boot.c] [builtins.c] [common.c] [char_io.c]

   [cmdline.c] [disk_io.c] [gunzip.c] [fsys_ext2fs.c] [fsys_fat.c]

   [fsys_ffs.c] [fsys_minix.c] [fsys_reiserfs.c] [fsys_vstafs.c]

   [hercules.c] [serial.c] [smp-imps.c] [stage2.c] [md5.c]

 Widzimy że e2fs_stage1_5 i stage2 są podobne. Ale e2fs_stage1 jest

mniejszy i zawiera zasadnicze moduły (wejście i wyjście dysku, obsługa

łancuchów, inicjalizacja systemu, obsługa systemu plików ext2/3), dopóki

stage2 jest wszystko-w-jednym, dopóty zawiera wszystkie moduły systemów

plików, wyświetlanie, szyfrowanie, etc.

 start.S jest bardzo ważny dla Gruba, stage1 załaduje start.S do 0200:0000

(jeśli stage1_5 jest skonfigurowany) lub 0800:0000 (jeśli nie), wtedy skoczy

do tego adresu. Zadanie start.S jest bardzo proste (tylko 512 bajtów),

ładuje on resztę czśści stage1_5 lub stage2 do pamięci. Pytaniem jest, skoro

system plików powiązał kod nie mogąc go załadować, to skąd Grub zna

lokalizację reszty sektorów? start.S ma pewniem trik:

-------------------------------- POCZĄTEK -----------------------------------

blocklist_default_start:

         .long 2  /* to jest paramentr startowy sektora, w logicznym

                     sektorze ze startu dysku, sektor 0 */

blocklist_default_len:  /* to jest liczba sektorów do czytania */

#ifdef STAGE1_5

         .word 0  /* komenda "install" dokona zapełnienia  */

#else

         .word (STAGE2_SIZE + 511) >> 9

#endif

blocklist_default_seg:

#ifdef STAGE1_5

         .word 0x220

#else

         .word 0x820  /* to jest segment adresu rozpoczynającego

                         ładowanie danych  */

#endif

firstlist:  /* to jest etykieta która musi być po liście danych!!! */

--------------------------------- KONIEC  ------------------------------------

 Na przykład:

# hexdump -x -n 512 /boot/grub/stage2

...

00001d0  [ 0000    0000    0000    0000 ][ 0000    0000    0000    0000 ]

00001e0  [ 62c7    0026    0064    1600 ][ 62af    0026    0010    1400 ]

00001f0  [ 6287    0026    0020    1000 ][ 61d0    0026    003f    0820 ]

 Powinniśmy to rozumieć (na wspak) jako: załaduj sektor 0x3f (start z

No.0x2661d0) 

do 0x0820:0000, załaduj sektor 0x20 (start z No.0x266287) do 0x1000:0000,

załaduj sektor 0x10 (start z No.0x2662af) do 0x1400:00, załaduj sektor 0x64

(start z No.0x2662c7) do 0x1600:0000. 

 W mojej dystrybucji, stage2 ma 0xd4(1+0x3f+0x20+0x10+0x64) sektorów,

rozmiar pliku wynosi 108328 bajtów, dwie pary (rozmiar sektora ma 512).

 Kiedy start.S zakończy uruchamianie, stage1_5 i stage2 są w pełni

załadowane, start.S skacze do asm.S i kontunuuje wykonywanie. 

 Wciąż pozostaje problem, kiedy stage1.5 jest konfigurowany? Faktycznie,

stage1.5 nie jest potrzebny. Ma zadanie załadować /boot/grub/stage2 do

pamięci. Ale zwraca uwagę na to że stage1.5 używa systemu plików do

załadowanie pliku stage2: 

Krzywo zanalizowane ale... pobiera inode stage2, potem blok-listę stage2.

Więc jeśli stage1.5 jest skonfigurowany to stage2 jest ładowany przez system

plików; jesli nie, stage2 jest ładowany przez stage2_sector w stage1 i listę 

sektorów w start.S stage2.

 Żeby pokazać to w czystszej postaci, przedstawię nastepujący scenariusz:

(ext2/ext3)

# mv /boot/grub/stage2 /boot/grub/stage2.bak

Jeśli stage1.5 jest skonfigurowany, bootowanie zawiedzie, stage1.5 nie może

znaleźć /boot/grub/stage2 w systemie plików. Ale jeśli stage1.5 nie jest

skonfigurowany, bootowanie powiedzie się! Jest tak ponieważ mv nie może

zmienić fizycznego wyglądu stage2, wiec stage2_sector pozostaje ten sam,

lista sektorów w stage2 także.

 Teraz, stage1 (-> stage1.5) -> stage2. Wszystko jest na pozycji. asm.S

przełączy się na tryb chroniony, otwiera /boot/grub/grub.conf (lub

menu.lst), pobiera konfigurację, wyświetla menu, i czeka na polecenia od

użytkownika. Po wyborze jądra przez użytkownika, Grub ładuje odpowiedni

jego obraz (czasami także obraz ram-dysku), i bootuje jądro.

----[ 1.4 - Grub util

 Jeżeli Grub został nadpisany przez Windows, mozez użyc Grub util do

ponownej instalacji Gruba. 

```

----------

## Xywa

 *nieprosty wrote:*   

> To nie szukaj w google tylko przeczytaj rozdział instalacja bootloader'a w handbook'u gentoo. Tam jest dokładnie napisane co masz zrobić.

 

Tutaj jest link do handbooka o grub: http://www.gentoo.org/doc/pl/handbook/handbook-amd64.xml?part=1&chap=10

Znajdź mi gdziekolwiek w tym manualu informacje o stage1 (czy w ogóle słowo stage) - bo ja nie potrafie.

----------

## Xywa

Ok - czy ni wystarczyło powiedzieć ze instalacja nowego Stage1 - to to samo co zwykła instalacja gruba? Np.

 *Quote:*   

> grub> root (hd0,0)          (Odpowiednia partycja /boot)
> 
> grub> setup (hd0)           (Instalacja GRUB-a w MBR)
> 
> grub> quit   

 

THX

----------

## nieprosty

 *Xywa wrote:*   

> Ok - czy ni wystarczyło powiedzieć ze instalacja nowego Stage1 - to to samo co zwykła instalacja gruba? Np.
> 
>  *Quote:*   grub> root (hd0,0)          (Odpowiednia partycja /boot)
> 
> grub> setup (hd0)           (Instalacja GRUB-a w MBR)
> ...

 

Przecież w pierwszym moim poście Ci dokładnie napisałem co to jest ten stage1 i kiedy się on tworzy.

Więc nie za bardzo rozumiem w czym masz problem.

----------

