maggreg Opublikowano 19 Września 2010 Zgłoś Udostępnij Opublikowano 19 Września 2010 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: 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
Rekomendowane odpowiedzi