Skocz do zawartości

Podłączenie loadera GRUB4DOS pod menu startowe systemu


Rekomendowane odpowiedzi

Podłączenie loadera GRUB4DOS pod menu startowe systemu

Startowanie emulowanego napedu CD lub Bootloadera PLOP

 

 

Kolega @Rafael22peb zapytał mnie czy można uruchomić z pomocą systemowych plików rozruchowych emulację napędu iso czy też (bardzo przydatnego gdy bios nie wspiera uruchamiania z biosu) bootloadera PLOP.

Co prawda emulowane iso ma bardzo wiele ograniczeń o których za chwilę a plop-a można uruchomić bezpośrednio z w/w kontenerów ale niejako wywołany do tablicy postanowiłem spreparować paczkę która to umożliwi z użyciem pakietu GRUB4DOS.

 

Na początek trochę obrazków jak to wygląda w działaniu:

 

windows720100919230709.th.pngwindowsxpprofessional20z.th.pngwindowsxpprofessional20n.th.pngwindows720100919230723.th.png

 

Po kolei widzimy - Menu w systemie Windows 7 (bądź Vista), Menu w systemie XP (ew 2003), Menu GRUB4DOS, PLOP

 

Ponieważ w przypadku Siódemki (Visty) wpis znajduje się w menu narzędzi nie powoduje ono pojawienia się menu startowego na komputerach z pojedynczym wpisem, aby dostać się do tej pozycji należy przy starcie systemu przytrzymać klawisz F5.

 

Oto pliki potrzebne do uruchomienia zestawu w dwóch wersjach - minimalistycznej oraz zawierającej przykładowe iso (uruchamiające czysty WINPE).

mini:

setgrub mini lub setgrub mini

 

rozszerzone

setgrub lub setgrub

 

Paczkę należy rozpakować na partycję botującą1' a następnie uruchomić skrypt setGRUB.vbs znajdujący się w katalogu grub który doda odpowiednie wpisy dla danego systemu (skrypt rozpoznaje wersję systemu automatycznie).

 

Oto sam skrypt:

 

On Error Resume Next
Set objShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select Version from Win32_OperatingSystem",,48)
For Each objItem in colItems
   strVersion = Left(objItem.Version, 1)
Next

Set colDisks = objWMIService.ExecQuery("Select DeviceID from Win32_LogicalDisk Where DriveType =3 AND DeviceID <> 'A:' AND DeviceID <> 'B:'")

If strVersion = 6 Then

For Each objDisk in colDisks
If objFSO.FileExists(objDisk.DeviceID &"\boot\bcd") Then

strbcdstore = objDisk.DeviceID &"\boot\bcd"
Set objWshScriptExec = objShell.exec("bcdedit /store "&strbcdstore&" /create /d "&chr(34)& "Start GRUB4DOS"&chr(34)&" /application bootsector")
Set objStdOut = objWshScriptExec.StdOut

While Not objStdOut.AtEndOfStream
  strLine = objStdOut.ReadLine
Wend

arrItems1 = Split(strLine, "{")
arrItems2 = Split(arrItems1(1), "}")

strLine = "{"&arrItems2(0)&"}"

objShell.run("bcdedit /store "&strbcdstore&" /set "&strLine&" device boot"),0,true
objShell.run("bcdedit /store "&strbcdstore&" /set "&strLine&" path \grldr.mbr"),0,true
objShell.run("bcdedit /store "&strbcdstore&" /toolsdisplayorder "&strLine&" /addlast"),0,true

wscript.quit
End If
NEXT

ElseIf strVersion = 5 Then 

For Each objDisk in colDisks
If objFSO.FileExists(objDisk.DeviceID &"\boot.ini") Then

strFolder = objDisk.DeviceID & "\\boot.ini"
Set colFiles = objWMIService.ExecQuery("Select Drive From CIM_DataFile Where Name = '" & strFolder & "'")

For Each colFile in colFiles
Set objTextFile = objFSO.OpenTextFile(colFile.Drive&"\boot.ini", 8, True)
strtext = colFile.Drive&"\grldr="&chr(34)&"Start GRUB4DOS"&chr(34)
objTextFile.WriteLine(strtext)
objTextFile.Close
NEXT
wscript.quit
End If
NEXT
ELSE
msgbox "Skrypt nie obsługuje tego systemu operacyjnego" &vbCrLf& "Dalsze wykonywanie skryptu jest niemożliwe",vbOKOnly,"Błąd"
wscript.quit
End If

msgbox "Nie znaleziono pliku rozruchowego" &vbCrLf& "Jeżeli plik znajduje się na partycji bez przypisanej litery" &vbCrLf& "Należy ją tymczasowo przypisać i ponownie uruchomić skrypt",vbOKOnly,"Błąd"

wscript.quit

 

Pora wspomnieć o ograniczeniach emulowanego CD - po pierwsze CD znika w momencie kiedy odpalany system przejdzie w protected mode czyli nie da się w ten sposób odpalić choćby winpe w wersji niższej niż 2.0, nie da się też uruchomić linuxów live, nie ma też sensu uruchamianie instalacji Win XP z takiego medium bo przestaje ono być dostępne po pierwszym restarcie.

Drugim problemem który dotyczy zarówno pliku ISO jak i PLOP-a jest to, że te pliki muszą się znajdować w ciągłym obszarze dysku, jeżeli będą fragmentaryczne nie uruchomią się.

W przypadku zestawu obejściem problemu jest to, że PLOP nie jest uruchamiany bezpośrednio ale jako image stacji dyskietek.

W przypadku iso można je z mapować z użyciem ramu co wymagałoby zmian w menu GRUBA które nie jest w tym przypadku dostępne bezpośrednio na dodatek wymaga to sporo ramu i troszkę traci sens.

Innym sposobem jest z defragmentowanie pliku iso - do tego celu w katalogu GRUB znajduje się plik Contig.exe (standardowo stanowi on część pakietu sysinternals), jako parametr dla programu wystarczy podać nazwę pliku ze ścieżką.

 

1' Zasadniczo na partycji botującej muszą się znaleźć pliki grldr i grldr.mbr a katalog GRUB można umieścić na innej partycji, grub4dos powinien sobie poradzić.

 

ps.

Znający pakiet GRUB4DOS zauważą, że brakuje w paczce dołączonego menu.lst, otóż nie jest ono potrzebne ponieważ wymagane wpisy znajdują się bezpośrednio w menu wbudowanym w grldr.

 

pzdr

Odnośnik do komentarza
Pomoc jest darmowa, ale proszę rozważ przekazanie dotacji na utrzymanie serwisu: klik.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...