Skocz do zawartości

Pendrive z bootloaderem na Grub 2


BackTime

Rekomendowane odpowiedzi

Cześć wszystkim ;) 

 

Zmagam się z następującym problem postanowiłem utworzyć pendrive na 1 bootloaderze tj 1 menu zarówno dla uefi jak i legacy problem pojawia się tylko w kilku wpisach. Sam pendrie jest w formacie fat32. Problem polega na tym iż w uefi nie bootuje BCD czyli instalatorów Windows w Legacy działa bez zarzutu. 

 

kej6vo.png

 

Pytanie czy istnieje plik ntldr.mod ? Jeśli nie to w jaki sposób można zbotować wpis dla uefi dla uruchomienia bcd ? . W legacy wygląda to następująco : 

 

 

menuentry "Instalacja Windows " --class winusb {

search --file /boot/bootmgr --set=root
insmod ntldr
ntldr /boot/bootmgr
}
 

 

 
 
 
 
Odnośnik do komentarza
Pomoc jest darmowa, ale proszę rozważ przekazanie dotacji na utrzymanie serwisu: klik.

Wpis jest jak najbardziej prawidłowy w legacy, taki po prostu format ma grub2 również dla bootmgr (choć bodajże chainloader --raw też zadziała).

Natomiast nie jest to właściwy loader ani komenda dla trybu uefi.

W tym trybie należy przygotować oddzielny zestaw startowy również oddzielne BCD.

Przykładowy wpis dla efi może wyglądać nastepująco:

 

menuentry "WDS"{
  search --no-floppy --fs-uuid --set=root 1472ccef1472ccef
  chainloader "/efi/microsoft/boot/bootmgfw.efi"
}
W tym przykładzie loader znajduje się na partycji NTFS stąd długość uuid, dla fat32 byłoby to coś w stylu "--set=root 188A-FF56" przy czym jeżeli loader znajduje się na tej samej partycji z której startuje grub nie musimy ustawiać nowego "root".

Pamiętajmy, że dla konfiguracji efi również w ścieżce "/efi/microsoft/boot/" musi się również znaleźć bootmgr.efi oraz BCD.

 

W zależności jakie w-kompilowaliśmy moduły w grub2 może też zaistnieć potrzeba załadowania niektórych z nich przed powyższym wpisem, np.:

  insmod efi_gop
  insmod efi_uga
  insmod part_msdos
  insmod part_gpt
Ten ostatni oczywiście tylko jeżeli pen/dysk ustawiliśmy w tryb gpt.

 

Nadmienię tutaj, że grub2 pozwala na pewną automatyzację za pomocą skryptów i np. wyszukanie wszystkich loaderów które mogą się nadawać do chainloadu, przykład wpisu który robi coś takiego:

 

function efi_detect {
        submenu --class=find.efi --hotkey=f "Loadery EFI" {
            for efi in (*,gpt*)/efi/*/*.efi (*,gpt*)/efi/*/*/*.efi (*,gpt*)/*.efi (*,gpt*)/*/*.efi (*,msdos*)/efi/*/*.efi (*,msdos*)/efi/*/*/*.efi (*,msdos*)/*.efi (*,msdos*)/*/*.efi; do
                regexp --set=1:efi_device '^\((.*)\)/' "${efi}"
                if [ -e "${efi}" ]; then
                    menuentry --class=efi "${efi}" "${efi_device}" {
                        root="${2}"
                        chainloader "${1}"
                    }
                fi
            done
		menuentry --hotkey=q  --class=cancel "return" {
			configfile "${prefix}/grub.cfg"
		}
        }
}

  export firmware_found
  insmod regexp
  insmod probe
  export loaded
efi_detect
Tyle tytułem wstępu w razie potrzeby służę szczegółami.

 

edit.

Powyższy skrypt jest lekko przerobioną wersją skryptu znalezionego na iso manjaro, jego wersja dla trybu legacy to coś na ksztalt:

function win_detect {
        submenu --class=find.win --hotkey=f "Loadery Windows" {
            for win in (*,msdos*)/boot/bootmgr (*,msdos*)/bootmgr ; do
                regexp --set=1:win_device '^\((.*)\)/' "${win}"
				if [ -e "($win_device)/boot/bcd" ]; then
                    menuentry --class=efi "${win}" "${win_device}" {
                        root="${2}"
                        ntldr "${1}"
                    }
                fi
            done
		menuentry --hotkey=q  "return" {
			configfile "${prefix}/grub.cfg"
		}
        }
}

	insmod regexp
	insmod probe
win_detect
Proszę nie zwracać uwagi na ustawienia class - na ich podstawie grub może pokazać ikonki przy poszczególnych wpisach jeżeli mamy odpowiednio ustawiony temat graficzny.

 

Tytułem uzupełnienia - podstawowa różnica w bcd:

efi:

Windows Boot Manager
--------------------
identifier              {bootmgr}
description             Windows Boot Manager
locale                  pl-PL
default                 {default}
displayorder            {default}
timeout                 30

Windows Boot Loader
-------------------
identifier              {default}
device                  ramdisk=[boot]\instalki\winpe.wim,{ramdiskoptions}
path                    \Windows\system32\boot\winload.efi
description             Instalki
locale                  pl-PL
osdevice                ramdisk=[boot]\instalki\winpe.wim,{ramdiskoptions}
systemroot              \Windows
bootmenupolicy          Legacy
detecthal               Yes
winpe                   Yes

Setup Ramdisk Options
---------------------
identifier              {ramdiskoptions}
ramdisksdidevice        boot
ramdisksdipath          \boot\boot.sdi
vs legacy:

Windows Boot Manager
--------------------
identifier              {bootmgr}
description             Windows Boot Manager
locale                  pl-PL
default                 {default}
displayorder            {default}
timeout                 30

Windows Boot Loader
-------------------
identifier              {default}
device                  ramdisk=[boot]\instalki\winpe.wim,{ramdiskoptions}
path                    \windows\system32\boot\winload.exe
description             Instalki
locale                  pl-PL
inherit                 {bootloadersettings}
osdevice                ramdisk=[boot]\instalki\winpe.wim,{ramdiskoptions}
systemroot              \windows
bootmenupolicy          Standard
detecthal               Yes
winpe                   Yes
ems                     No

Device options
--------------
identifier              {ramdiskoptions}
ramdisksdidevice        boot
ramdisksdipath          \boot\boot.sdi
Proszę zwrócić uwagę na wpis w zmiennej "path".

 

pzdr

Odnośnik do komentarza

Cześć dziękuje za wyjaśnienie niestety nie mogę poradzić sobie z tematem ... czy można prosić o pomoc i gotowy wpis dla tego tematu ? Kolejne pytanie w jaki sposób w grub 2 można załadować obraz iso do ram chodzi dokładnie o 2 dystrybucje Live OS skompilowane za pomocą : 

 

 

oraz kolejny problem z mem testem działa tylko w trybie efi oraz osobno w legacy (czy wpis jest prawidłowy dla legacy ?) :

 

 

legacy

 

menuentry "Memtest86+ 7.3" --class icon-memtest{

echo "Proszę czekać..."
set iso="/iso/Memtest86-7.3.iso"
linux16 /boot/syslinux/memdisk iso
initrd16 (hd0,1)$iso
}

 

 

efi
 
menuentry "Memtest86+ 7.1 (64)" --class icon-memtest{
echo "Proszę czekać..."
chainloader /iso/MemTest_7.1/efi/boot/bootx64.efi
}

grub.txt

Edytowane przez BackTime
Odnośnik do komentarza

Nie bardzo rozumiem z czym sobie nie radzisz, nie wiszę w ogóle w załączonym pliku odniesienia do loadera efi.

Może na początek mój plik dla efi na dysku (raczej testowy, częściej sięgam po boot z sieci)

 

 

set default="0"
if loadfont $prefix/unicode.pf2; then
	set gfxmode=auto
	insmod efi_gop
	insmod efi_uga
	insmod gfxterm
	insmod font
	export firmware_found
	insmod regexp
	insmod probe
	terminal_output gfxterm
	terminal gfxterm
	insmod part_msdos
	insmod part_gpt
fi

  set hidden_timeout_quiet=false
  load_video
  set gfxpayload=keep

insmod gzio
insmod png
use_bg=true

if background_image $prefix/Gsplash.png; then
  set color_normal=white/black
  set color_highlight=white/blue
fi

menuentry "WDS"{
  search --no-floppy --fs-uuid --set=root 01D22F1BB30D9540
  chainloader "/efi/microsoft/boot/bootmgfw.efi"
}

menuentry "Syslinux"{
  search --no-floppy --fs-uuid --set=root 7921-5E88
  chainloader "/EFI/syslinux/syslinux.efi"
}

menuentry "memtest"{
  search --no-floppy --fs-uuid --set=root 7921-5E88
  chainloader "/EFI/memtest/memtest.efi"
}

menuentry "konboot"{
  search --no-floppy --fs-uuid --set=root 7921-5E88
  chainloader "/EFI/boot/konboot.efi"
}

menuentry "rufus"{
  search --no-floppy --fs-uuid --set=root 7921-5E88
  chainloader "/EFI/boot/rufus.efi"
}

menuentry "shell edk2"{
  search --no-floppy --fs-uuid --set=root 7921-5E88
  chainloader "/EFI/boot/edk2/shell_x64.efi"
}

menuentry "shell udk2014"{
  search --no-floppy --fs-uuid --set=root 7921-5E88
  chainloader "/EFI/boot/udk2014/shell_x64.efi"
}

menuentry "clover"{
  search --no-floppy --fs-uuid --set=root 7921-5E88
  chainloader "/EFI/boot/CLOVERX64.efi"
}

menuentry "ipxe"{
  search --no-floppy --fs-uuid --set=root 7921-5E88
  chainloader "/EFI/boot/ipxe.efi"
}

menuentry "ipxe clean"{
  search --no-floppy --fs-uuid --set=root 7921-5E88
  chainloader "/EFI/boot/ipxe-clean.efi"
}

menuentry "ipxe asix"{
  search --no-floppy --fs-uuid --set=root 7921-5E88
  chainloader "/EFI/boot/axge.efi"
}

menuentry "Manjaro Cinnamon"  {
  search --no-floppy --fs-uuid --set=root 01D22F1BB30D9540
    set isofile="/live/manjaro-cinnamon-16.10.3-stable-x86_64.iso"
    set mlabel="MJRO1610"
    set archi="x86_64"
    set dri="nonfree"
    search --no-floppy -f --set=root $isofile
    loopback loop $isofile
    linux (loop)/manjaro/boot/$archi/manjaro earlymodules=loop img_dev=/dev/disk/by-uuid/01D22F1BB30D9540 img_loop=$isofile misobasedir=manjaro misolabel=$mlabel i915.modeset=1 logo.nologo overlay=$dri $dri=yes 
    initrd (loop)/manjaro/boot/intel_ucode.img (loop)/manjaro/boot/$archi/manjaro.img
}

menuentry "Clonezilla 64"{
  search --no-floppy --fs-uuid --set=root 01D22F1BB30D9540
  linux /live/clonezilla/64b/vmlinuz boot=live live-media-path=/live/clonezilla/64b toram=filesystem.squashfs union=overlay username=user config components quiet noswap edd=on nomodeset noeject locales=pl_PL.UTF-8 keyboard-layouts=pl ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_batch="no" vga=788 ip= net.ifnames=0  nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1
  initrd /live/clonezilla/64b/initrd.img
}

menuentry "Clonezilla 32"{
  search --no-floppy --fs-uuid --set=root 01D22F1BB30D9540
  linux /live/clonezilla/32b/vmlinuz boot=live live-media-path=/live/clonezilla/32b toram=filesystem.squashfs union=overlay username=user config components quiet noswap edd=on nomodeset noeject locales=pl_PL.UTF-8 keyboard-layouts=pl ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_batch="no" vga=788 ip= net.ifnames=0  nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1
  initrd /live/clonezilla/32b/initrd.img
}

menuentry "instalki" {
  search --no-floppy --fs-uuid --set=root 01D22F1BB30D9540
    linux16 /boot/wimboot rawbcd index=1 gui
    initrd16 \
	    newc:bcd:/efi/microsoft/boot/bcd_uefi \
        newc:boot.sdi:/boot/boot.sdi \
        newc:boot.wim:/instalki/winpe.wim 
}

menuentry "test disk"{
    for dev in (*); do
	regexp -s device '\((.*)\)' $dev
		if [ ! -z "${device}" ]; then
		if strcontains "$device" "," ; then
			probe -s fstype -f $dev 
			probe -s uuid -u $dev 
			probe -s label -l $dev 
			echo $dev  -  $fstype  -  $uuid  -  $label
		fi
		fi
	set fstype=
	set device=
	set uuid=
	set label=
	done
sleep -v -i 90
}

function strcontains {
	set str="$1"
	set pattern="$2"
	if regexp ".*${pattern}.*" "$str"; then
		return 0;
	else
		return 1;
	fi
}

submenu "Super grub" {
menuentry "SG" {
    configfile "${prefix}/sg/main.cfg"
}
menuentry "return" {
    configfile "${prefix}/grub.cfg"
}
}

function efi_detect {
        submenu --class=find.efi --hotkey=f "Loadery EFI" {
            for efi in (*,gpt*)/efi/*/*.efi (*,gpt*)/efi/*/*/*.efi (*,gpt*)/*.efi (*,gpt*)/*/*.efi (*,msdos*)/efi/*/*.efi (*,msdos*)/efi/*/*/*.efi (*,msdos*)/*.efi (*,msdos*)/*/*.efi; do
                regexp --set=1:efi_device '^\((.*)\)/' "${efi}"
                if [ -e "${efi}" ]; then
                    menuentry --class=efi "${efi}" "${efi_device}" {
                        root="${2}"
                        chainloader "${1}"
                    }
                fi
            done
		menuentry --hotkey=q  "return" {
			configfile "${prefix}/grub.cfg"
		}
        }
}

efi_detect

menuentry "Reboot" {
   reboot
}
 
menuentry "Shutdown" {
   halt
}

 

 

Staram się trzymać oddzielnie konfiguracje dla grub2 efi i grub2 legacy, i tak musimy mieć oddzielne loadery wiec można rozdzielić pliki.

Jeżeli nie chcesz dublować katalogów to można np. rozbić je z pomocą takiego zabiegu jaki masz przy ładowaniu modułów:

grub.cfg:

    if [ "${grub_platform}" = "efi" ]; then
    configfile "${prefix}/menuefi.cfg"
    fi
    if [ "${grub_platform}" == "pc" ]; then
    configfile "${prefix}/menulegacy.cfg"
    fi
w przeciwnym razie dobrze by było otagować same pozycje niekompatybilne z daną architekturą. np.:

menuentry "Instalacja Windows " --class winusb {
if [ "${grub_platform}" == "pc" ]; then
insmod ntldr
ntldr /boot/bootmgr
fi
if [ "${grub_platform}" == "efi" ]; then
chainloader /EFI/MICROSOFT/BOOT/bootmgfw.efi
fi
}
if [ "${grub_platform}" == "pc" ]; then
menuentry "Windows 10 Live Rescue Disk" --class win{
echo "Proszę czekać..."
set iso="/iso/Win10PESE.iso"
linux16 /boot/grub/memdisk iso 
initrd16 (hd0,1)$iso
}
fi
Nie wiem czy sięganie po memdisk jest dobrym pomysłem, grub ma własny system loopback który odwołuje się bezpośrednio do plików w iso i pomija problem dostępu do plików na wirtualnym napędzie, niby działa ale bardzo wrażliwe na konfigurację pamięci. Poza tym ograniczasz się do konfiguracji legacy, memdisk nie zadziała w efi.

 

Można sięgnąć po wimboot (choć ten znów jest bardzo kapryśny w efi):

menuentry "wimboot DaRT8.1.iso" {
    insmod udf
	set isofile="/iso/DaRT8.1.iso"
    loopback loop $isofile
    linux /syslinux/wimboot
    initrd \
        newc:bcd:(loop)/efi/microsoft/boot/bcd \
        newc:boot.sdi:(loop)/boot/boot.sdi \
        newc:boot.wim:(loop)/sources/boot.wim
}
Wygodniej rozpakować sam wim do wybranego katalogu (domyślnie sourcess) i dodać do głównego bcd.

Ja mam np. taki zestaw:

post-67-0-05250000-1492022788_thumb.png

 

Jeżeli natomiast chcesz uniknąć podwójnego menu to sięgasz po wimboot:

menuentry "instalki" {
    linux /syslinux/wimboot rawbcd index=1 gui
    initrd \
	newc:bcd:/wp/bcd_uefi \
        newc:boot.sdi:/boot/boot.sdi \
        newc:boot.wim:/instalki/winpe.wim 
}
choć jeszcze raz powtórzę, ten ma problemy w efi

 

Jak widzisz mam na liście 10pe-se z http://theoven.org/ ale uruchamiany bezpośrednio z wim a nie iso.

 

Trudno mi coś napisać o memtestach z grub2, memtest.efi działa jako normalna aplikacja efi natomiast z wersjami legacy zawsze był kłopot.

Ja prawdę mówiąc w trybie legacy korzystam raczej z grub4dos niż z grub2 i wygląda to tak:

title memtest+
kernel /boot/memtestp.bin

title memtest
kernel /boot/memtest
tutaj raczej chodzi konkretnie o typ pliku (memtesty są rozprowadzane różnie, jako obraz dyskietki, obraz elf itp) i niektóre sprawiają kłopot startowane inaczej niż z bootsektora czy z syslinuxa.

Ok sprawdziłem i nie widzę problemu z botem memtest w grub2 legacy, zarówno z obrazów dyskietek jak i binarki, działają obie gałęzie (86 i 86+):

menuentry "Memtest86+" {
 linux16 /wp/memtestp.bin
 } 

menuentry "Memtest" {
 linux16 /wp/memtest
} 

menuentry "Memtest86+ floppy image" {
      linux16 /syslinux/memdisk
      initrd16 /wp/memtestp.img
}

menuentry "Memtest floppy image" {
      linux16 /syslinux/memdisk
      initrd16 /wp/memtest86-floppy.img
}
pzdr
Odnośnik do komentarza

Dlatego, że bootmgr.efi nie posiada odpowiedniego stuba dla gruba :).

bootmg.efi nie jest właściwym plikiem do chainu, właściwy jest bootmgrfw.efi (może mieć nazwę bootx64.efi ale to ten sam plik).

Pamiętaj też, że nawet jeżeli przeniesiesz plik w niestandardową lokację to bcd i tak musi się znaleźć w /efi/microsoft/boot inaczej bootloader go nie znajdzie. Najlepiej całość (bootmgrfw.efi, bootmgr.efi i bcd) trzymać w tej lokacji, pamiętaj że bez znaczenia ile będziesz chciał odpalić różnych pe to powinny one korzystać z jednego zestawu. Obejściem jest wimboot ale jak pisałem nie działa w grub efi (wersja efi działa tylko z ipxe).

Podsumowując - układ powinien być taki:

/boot/boot.sdi
/efi/microsoft/boot/bootmgr.efi
/efi/microsoft/boot/bootmgrfw.efi
/efi/microsoft/boot/bcd
/sources/winpe1.wim
/sources/winpe3.wim
/sources/winpe2.wim
czyli poprawny wpis powinien brzmieć:

menuentry "Windows 10 64 bit" --class win{ echo "Proszę czekać..." chainloader /efi/microsoft/boot/bootmgrfw.efi }
Jeszcze jedno - sprawdzałeś już swoje poszczególne pozycje?

Wg. mojego pobieżnego spojrzenia nie wszystkie odpalą, choćby popularny mint nie ruszy z tak podanego loopback, poprawny wpis to np:

menuentry "Linux Mint 18.1 Cinnamon LTS RC (x64)" {
    set iso=/boot/iso/linuxmint-18.1-cinnamon-64bit.iso
    loopback loop $iso
    linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$iso noeject noprompt 
    initrd (loop)/casper/initrd.lz
}
Ważny jest ten przełącznik który powstrzyma system przed wysunięciem virtualnego napędu podczas startu (noeject).

 

Dobrym miejscem z przykładami jest strona arch-a:

https://wiki.archlinux.org/index.php/Multiboot_USB_drive

 

 

Pozwolę sobie też wkleić poradę z naszej prywatnej konwersacji, może się komuś przyda.

 

Wystarczą pliki z windowsa:

C:\Windows\Boot\EFI >> \efi\microsoft\boot

pakiety językowe możesz sobie darować, wystarczą pliki boomgr.efi i bootmgrfw.efi (ten plik jest w 100% tym samym co bootx64.efi w wersji windowsowej)

bcd na początek możesz spróbować

domyślny układ to plik \sourcess\boot.wim

oczywiście trzeba też wrzucić ramdysk (plik boot.sdi) do katalogu \boot

 

Odpowiednie pliki też zawsze znajdziesz w samym winpe, jak otworzysz plik winpe.wim (np. boot.wim z płyty windowsa) w 7zip to w katalogu \windows\boot masz wszystko co potrzebne, w katalogu efi masz to co powyżej, w dvd przykładowe efi dla obu architektur i ramdisk, w pcat bootmgr dla trybu legacy.

 

Nie wiem czy to dobry pomysł z moim bcd, używa specyficznego układu katalogów proponuję raczej ułożyć sobie własne wpisy, np bootice daje opcję bardzo szybkiego ułożenia własnego menu. W trybie easy wystarczy ze dasz add > wim i ustawisz ścieżkę do swojego obrazu.

Przykład na szybko

Obraz_ze_schowka.png

Obraz_ze_schowka.png

 

pzdr

Odnośnik do komentarza
Pojawia się kolejny problem jeśli pozostawię plik : 

/boot/boot.sdi
 
/efi/microsoft/boot/bootmgr.efi
 
/efi/microsoft/boot/bootmgrfw.efi
 
/efi/microsoft/boot/bcd

 

 

 
wówczas w qemu wymuszany jest tryb efi natomiast pc podczas bootowania nie wykrywa trybu efi i działa tylko w legacy
 
jeśli pliki pozostawię w katalogu: 

/microsoft/boot/bootmgr.efi
 
/microsoft/boot/bootmgrfw.efi
 
/microsoft/boot/bcd
 
 

 

 

wówczas tryb efi bootowania działa ale menu dla efi nie działa pojawia się albo czarny ekran albo : 
 
302n97t.jpg
 
 
poniżej wpis : 
 

menuentry "Windows Installer / Live (Legacy/UEFI)" --class win {
 
if [ "${grub_platform}" == "pc" ]; then
 
echo "Proszę czekać..."
 
insmod ntldr
 
ntldr /boot/bootmgr
 
fi
 
if [ "${grub_platform}" == "efi" ]; then
 
echo "Proszę czekać..."
 
chainloader /MICROSOFT/BOOT/bootmgfw.efi
 
fi
 
}

 

 

 
BCD było edytowanie nie tworzyłem nowego BCD - czy w tym tkwi problem ? Czy może ktoś podesłać paczkę z gotowym katalogiem boot ? 
Edytowane przez BackTime
Odnośnik do komentarza

Zrób listing pełny tego bcd:

bcdedit /store "ścieżka do bcd" /enum all

 

boot.sdi musi być dostąpny dla winpe natomiast jego konkretne położenie również możemy zmienić (patrz "sdi file" w edytorze).

Natomiast ta sieczka wskazuje na problem z ustawieniem graficznym, albo sterownik podawany przez grub jest nieprawidłowy albo tryb graficzny, spróbuj zostawić tryb auto w grub.cfg i ew. odpal bez odwołania się do tematu graficznego (themes).

 

pzdr

Odnośnik do komentarza

Spróbuj bez uruchamiania modułu graficznego lub tylko jeden z nich:

insmod efi_gop
insmod efi_uga
Grub kompilujesz sam czy używasz jakieś gotowej wersji (jaka?)?

Spróbuj kombinacji pośrednika:

grub > efishell > bootmgrfw

albo

efishell > grub > bootmgr

 

efishell może uruchomić przy starcie z automatu wybraną pozycję, wystarczy w katalogu root wrzucić skrypt "startup.nsh":

echo Botowanie Grub
blk0:\efi\boot\bootx64.efi
pzdr
Odnośnik do komentarza
  • 6 miesięcy temu...

Temat pozwolę sobie odświeżyć następujące problemy : 

 

menuentry "Find BOOTMGR (Vista/7/8/8.1/10)" --class windows {
echo "Proszę czekać..."
insmod part_msdos
insmod ntldr
insmod ntfs
ntldr (hd1,msdos1)/bootmgr
}
 
menuentry "Find NTLDR (XP)" --class xorboot {
echo "Proszę czekać..."
insmod part_msdos
insmod ntldr
insmod ntfs
ntldr (hd1,msdos1)/ntldr
}

W powyższych na sztywno ustawione jest dysk - pytanie jak dodać metodę search tak aby wyszukała partycję rozruchową ?

 

Kolejne w jaki sposób wywołać i prawidłowo wczytać obraz instalatora XP ? - poniższe nie działa : 

menuentry "Windows Installer XP" --class icon-xp {
echo "Proszę czekać..."
insmod part_msdos
insmod ntldr
insmod ntfs
set iso="/iso/WinXP.iso"
linux16 /boot/syslinux/memdisk iso
initrd16 (hd0,1)$iso
}

Proszę o pomoc w rozwiązaniu powyższych problemów. z góry THX :) 

 

Odnośnik do komentarza

Już miałeś (może nie do końca poprawną) konstrukcję wyszukującą:

 

search --file /bootmgr --set=root

 

Oczywiście najpierw trzeba wczytać odpowiedni moduł.

No i pamiętaj, że plik bootmgr znajduje się raczej w głównym katalogu partycji a nie w boot.

 

Instalkę xp sobie daruj - to nic nie da, nawet jak odpalisz fazę tekstową to i tak nie uzyskasz dostępu do nośnika instalacyjnego a bez tego instalator się wysypie.

Możesz spróbować przygotować system w formacie jaki podałem w tym opisie:

https://www.fixitpc.pl/topic/2499-instalacja-systemow-z-pendriva/

ale nie wiem czy warto jeszcze tracić czas na xp.

 

pzdr

Odnośnik do komentarza
  • 2 tygodnie później...

Wszystko zależy od kryteriów wyszukiwania jakie sobie przyjmiesz, im mniejsza dynamika zmian w danym środowisko tym kryteria mogą być węższe.

W twoim przykładzie mamy ustawienie fokusu wyszukiwania na konkretne partycje - szukaj na pierwszej partycji (msdos1)  pierwszego dysku (hd0) i jeżeli partycja ma label/nazwę "WINDOWS_XP" to ustaw ją jako root i analogicznie drugi przykład - szukaj na drugiej partycji (msdos2) pierwszego dysku (hd0) i jeżeli ma nazwę "WINDOWS_7" to ustaw jako root.

Warto zwrócić uwagę, że dyski są liczone od zera a partycje od jedynki. Przy takim zapisie oczywistym jest, że jeżeli zmieni się kolejność dysków, kolejność partycji na dysku to taki system nie zabotuje.

I teraz przykład który ja podałem:

search --set=root --file /bootmgr 

czyli szukaj partycji na której w głównym katalogu znajduje się plik bootmgr i ustaw jako root jest o wiele bardziej uniwersalny ale problemem jest multi boot (wiele partycji z /bootmgr na rożnych partycjach, również różnych dyskach) wtedy root ustawi się na pierwszy znaleziony.

Dla mnie najbardziej uniwersalnym fokusem jest identyfikator partycji, raczej nie zdarza się aby nie był unikalny czyli podawane już w przykładach:

search --no-floppy --set=root --fs-uuid 1472ccef1472ccef

tutaj widzimy identyfikator partycji ntfs (łatwo poznać po podwojeniu ciągu) który ustawi fokus zawsze na tę partycję, uuid zmieni się dopiero kiedy ją sformatujemy, przesuwanie w strukturze dysku nie zmieni identyfikatora, nie ma też znaczenie label - fokus zawsze trafi.

 

pewnym problemem może być jego uzyskanie jeżeli nie czujmy się dobrze w konsoli gruba czy uniksie wtedy możemy sobie stworzyć na partycji plik o unikatowe nazwie który będzie swego rodzaju znacznikiem i ustawiać fokus wyszukiwania na jego wystąpienie, np umieszczamy na naszej partycji w katalogu znacznik plik zn01 i ustawiamy wyszukiwanie na:

search --no-floppy --set=root --file /znacznik/zn01

 

Mam nadzieję, że jest to zrozumiałe.

 

pzdr

Odnośnik do komentarza

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

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