Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Blog Ubuntu -- Správa "projektů" české komunity Ubuntu

Novinky: Školení nejen k OS Ubuntu pro širokou veřejnost, více informací zde.

Autor Téma: Multiboot Flash Grub2  (Přečteno 1093 krát)

Ventero

  • Závislák
  • ****
  • Příspěvků: 1277
  • Karma: +40/-12
    • Zobrazit profil
Multiboot Flash Grub2
« kdy: 22 Prosinec 2017, 19:31:38 »
Je spousta programů, které uživatelsky příjemně vytvářejí multiboot flashky i v Linuxu a tak se může zdát tento návod zbytečný.

Např. YUMI, MultiSystem, XBoot, Sardu, MultiBootUSB Easy2Boot, WinSetupFromUSB a jistě další ...

Bohužel některé z nich tvoří boot flash na bázi zavaděče Syslinux či Grub4Dos, které EFI nepodporují a nebo používají k bootování celých ISO obrazů, např dle mě nejjednodušší a nejelegantnější YUMI-UEFI-0.0.0.5.exe
https://www.pendrivelinux.com/yumi-multiboot-usb-creator/
, což nefunguje na všech strojích. Uněkterých strojů dojde v jedné z prvotních fází k odpojení loop obrazu disku a načtení OS dále nepokračuje.

Takto jsem dopadl hned napoprvé (mám ve zvyku se nespoléhat na programy, protože na foŕech je plno vláken, kdy jakoukoliv aplikací vytvořená flash někomu na něčem  nefungovala), když jsem si ISO multiboot flash vytvořil podle návodu, zde:
https://ubuntuforums.org/showthread.php?t=2276498 a zde:
https://www.pendrivelinux.com/boot-multiple-iso-from-usb-via-grub2-using-linux/
a pokus s YUMI mi pouze dokázal, že chyba není na mé straně.

A proto bylo třeba toto obejít, aby bylo docíleno maximální funkčnosti, spolehlivosti a univerzálnosti.

Mé prvotní pokusy pro elegantní a úsporné řešení s hostitelským instalátorem a hostující bází s úpravou initrd, mezi bratrskými OS (Mint, Lubuntu, Xubuntu), dopadly tak, že se mi po dlouhém a úmorném trápení podařilo korektně najet Live, ale instalace hostujících OS buď havarovala nebo nainstalovaný OS nefungoval správně.Tak mě napadlo, že budu muset opravdu vše rozdělit do samostatných složek.

Program SARDU
http://www.sarducd.it/
, který používá kombinaci Syslinux a Grub2 a EFI podporuje, který je i pro Linux, tyto ISO sice rozbalí do adresářů, jenže po naběhnutí systému (zkoušena opět bratrská kombinace Lubuntu, Mint, Xubuntu) se však neobjevila možnost instalace. Toto se sice dalo obejít tím, že v Lubuntu byla možnost instalace v menu a u Mintu či xubuntu jsem v terminálu použil příkaz ubiquity . Jenže třeba u Mintu instalátor havaroval.

Nicméně konfigurační zápis, který Sardu používá mě dokázal to, co jsem si myslel od začátku, že nakonec není třeba modifikovat initrd, ale že lze potřebné parametry předat ze zavaděče. Pak už zbylo jen koumání, proč v Mintu havaroval instalátor a co je to, co potřebuje mít za každou cenu v rootu instalačního média, aby instalace proběhla v pořádku.

===============================================================================

I. Základ je správná příprava flashky. Tedy naformátování na FAT32 a instalace zavaděče Grub2. Tento návod se osvědčil. Připojíme tedy flashku do PC.

1. Formát USB-flash s použitím jednoho oddílu:

    Otevřít terminál a zadat sudo su a zadat heslo
    zadat fdisk -l (zjistit označení flashky, kterou chceme upravovat)
    V případě, že se flashka po zasunutí automaticky připojuje,
    nejprve odpojit: umount /dev/sdx1 (nahradit x písmenem zvolené flashky)
    zadat fdisk /dev/sdx (nahradit x písmenem zvolené flashky)
    zadat d (odstranění existujícího oddílu)
    zadat n (tvorba nového oddílu)
    zadat p (pro primární oddíl)
    zadat 1 (tvorba prvního oddílu)
    Enter (použití prvního cylindru)
    Enter (použití výchozí hodnoty posledního cylinderu)
    zadat a (označí oddíl aktivním)
    zadat 1 (označí první aktivní oddíl jako spouštěcí)
    zadat t (definice typu oddílu)
    zadat c (použití fat32)
    zadat w (zapsání změn a zavření aplikace fdisk)

2. Tvroba souborového systému fat32:

    umount /dev/sdx1 (odpojení oddílu) - pro jistotu, nejspíš už podruhé být nemusí
    mkfs.vfat -F 32 -n MULTIBOOT /dev/sdx1 (zformátuje oddíl na fat32)

3. Instalace Grub2 na flash:

Poznámka:
Pro starší verze grubu se používá --root-directory=/mnt/USB
Současnější verze používají --boot-directory=/mnt/USB/boot

    mkdir /mnt/USB (vytvoří adresář USB ve složce mnt jako montovací bod)
    mount /dev/sdx1 /mnt/USB (x nahradit písmenem zvolené flashky - namontuje flashku)
    grub-install --force --no-floppy --boot-directory=/mnt/USB/boot /dev/sdx (x nahradit písmenem zvolené flashky - instaluje Grub2)

Oddíl znovu odpojit umount /dev/sdx1

-------------------------------------------------------------------------------------------------------------------------------------

II. Doplnění konfiguračního souboru pro Grub2 a zkouška

Do složky /boot/grub na flashce přidat soubor grub.cfg - vytvořit tedy v daném umístění prázdný soubor s tímto jménem a vložit do něj tento zápis:

Kód: [Vybrat]
if loadfont /boot/grub/font.pf2 ; then
set gfxmode=auto
insmod efi_gop
insmod efi_uga
insmod gfxterm
terminal_output gfxterm
fi

set lang=cs_CZ
set menu_color_normal=cyan/black
set menu_color_highlight=yellow/black
set color_normal=cyan/black

menuentry "Nastroje" {
configfile /boot/grub/nastroje.cfg
}


menuentry "Parted Magic" {
set gfxpayload=auto
linux /Linux/pmagic/bzImage  edd=off load_ramdisk=1 prompt_ramdisk=0 rw vga=normal loglevel=9 max_loop=256 vmalloc=288MiB directory=/Linux keymap=cz cs_CZ
initrd /Linux/pmagic/initrd.img
}

menuentry "Mint 17.3 xfce 32bit" {
set gfxpayload=keep
linux /min1732x/casper/vmlinuz  file=/cdrom/min1732x/preseed/linuxmint.seed boot=casper cdrom-detect/try-usb=true ignore_uuid live-media-path=/min1732x/casper/ locale=cs_CZ console-setup/layoutcode=cz
initrd /min1732x/casper/initrd.lz
}

menuentry "Mint 17.3 xfce 64bit" {
set gfxpayload=keep
linux /min1764x/casper/vmlinuz  file=/cdrom/min1764x/preseed/linuxmint.seed boot=casper cdrom-detect/try-usb=true ignore_uuid live-media-path=/min1764x/casper/ locale=cs_CZ console-setup/layoutcode=cz
initrd /min1764x/casper/initrd.lz
}

menuentry "Xubuntu 14.04 32bit" {
set gfxpayload=keep
linux /xub1432/casper/vmlinuz  file=/cdrom/xub1432/preseed/xubuntu.seed boot=casper cdrom-detect/try-usb=true ignore_uuid live-media-path=/xub1432/casper/ locale=cs_CZ console-setup/layoutcode=cz
initrd /xub1432/casper/initrd.lz
}

menuentry "Xubuntu 14.04 64bit" {
set gfxpayload=keep
linux /xub1464/casper/vmlinuz  file=/cdrom/xub1464/preseed/xubuntu.seed boot=casper cdrom-detect/try-usb=true ignore_uuid live-media-path=/xub1464/casper/ locale=cs_CZ console-setup/layoutcode=cz
initrd /xub1464/casper/initrd.lz
}

menuentry "Lubuntu 14.04 32bit" {
set gfxpayload=keep
linux /lub1432/casper/vmlinuz  file=/cdrom/lub1432/preseed/lubuntu.seed boot=casper cdrom-detect/try-usb=true ignore_uuid live-media-path=/lub1432/casper/ locale=cs_CZ console-setup/layoutcode=cz
initrd /lub1432/casper/initrd.lz
}

-------------------------------------------------------------------------------------------------------------------------------------

Restartovat PC a vyzkoušet, zda flash bootuje v případě BIOS/Legacy stroje. Pro EFI není třeba zkoušet, tam to po doplnění potřebných souborů a složek fungovat bude.

-------------------------------------------------------------------------------------------------------------------------------------

III. Přidání distribucí a nástrojů

Vytvořit na flashce vedle složky /boot (v root flashky) složky pro vybrané distribuce - v mém případě:

lub1432 - doporučuji Lubuntu 14.04.3 i386, tedy 32bit - 14.04.1 není doladěná a 14.04.5 nenajede do GUI
xub1464 - Xubuntu 14.04.01 64bit verze
xub1432 - Xubuntu 14.04.01 32bit verze
min1764x - Linux Mint 17.3 xfce 64bit
min1732x - Linux Mint 17.3 xfce 32bit
Linux - složka pro různé záchranné minidistra, memtest a další nástroje

Stáhnout obrazy vybraných distribucí a rozbalit je do příslušných adresářů na flashce.

Nyní se bude pracovat i se skrytými složkami, takže je třeba zapnout jejich zobrazování, pracujeme-li i nadále v Linuxu.

Doplnit adresář /boot/grub o adresář x86_64-efi a soubory efi.img , font.pf2 . Tyto lze získat z rozbalené distribuce Xubuntu 64bit nebo Mint 64bit. Prostě tam doplnit vše co tam ještě není a obsahuje to ve stejném umístění jakákoliv distribuce. Takto je možno i aktualizovat složky modulů i386-pc a x86_64-efi . Stejným způsobem lze získat i složku EFI, která se zkopíruje opět do root flashky. V této složce je podsložka BOOT a v ní soubory bootx64.efi a grubx64.efi - což jsou zavaděče Grub2 pro UEFI. Tyto 2 soubory ještě doplníme o 32bit zavaděč pro UEFI  bootia32.efi popř. grubia32.efi a fallback.efi.  Tyto jsou obsaženy třeba v distribuci MX16.1, která vychází z Antixu. Ten je stejně jako Ubuntu a spol. postaven na Debianu a výchozí prostředí má XFCE. Důvodem volby této distribuce může být např. absence systemd, kterýžto dělá síťařům vrásky navíc.

Nakonec je třeba ještě v root flash vytvořit složku /.disk a do ní vložit soubor cd_type a info.
Tyto zkopírujeme ze složky .disk pro Linux Mint, neboť ten na to má při instalaci nároky.
Nově nakopírovaný soubor /.disk/info potom otevřít  a změnit zápis na „Linux” popř. jiný univerzální.
Nezkoušel jsem, ale myslím, že je možné tyto soubory získat i z jiné distribuce a nebo rovnou vytvořit.
Obsah souboru /.disk/info viz výše a obsah /.disk/cd_type je tento: full_cd/single

-------------------------------------------------------------------------------------------------------------------------------------

Při přidání každé další distribuce (může být na jiné bázi) je třeba se podívat na původní zápis a syntaxi a dle toho upravit konečný zápis v grub.cfg

Nakonec se může vymazat v adresářích jednotlivých dister, co tam už  není třeba, když se chce šetřit místem:

složky pics, isolinux a install

a všechny samostatné soubory: README.diskdefines, autorun.inf, md5sum.txt a wubi.exe, které už není léta podporované.

-------------------------------------------------------------------------------------------------------------------------------------

Konfigurační soubor pro nástroje - příklad nastroje.cfg:

Kód: [Vybrat]
if loadfont /boot/grub/font.pf2 ; then
set gfxmode=auto
insmod efi_gop
insmod efi_uga
insmod gfxterm
terminal_output gfxterm
fi

set lang=cs_CZ
set menu_color_normal=cyan/black
set menu_color_highlight=yellow/black
set color_normal=cyan/black

menuentry "Puppy Tahr Lxde - nopae" {
search --set=root --file /Linux/LxPupTahr/vmlinuz
linux /Linux/LxPupTahr/vmlinuz  psubdir=Linux/LxPupTahr pkeys=cz
initrd /Linux/LxPupTahr/initrd.gz
}

menuentry "Parted Magic 2013" {
set gfxpayload=auto
search --set=root --file /Linux/pmagic/bzImage
linux /Linux/pmagic/bzImage  edd=on rw vmalloc=384MiB directory=/Linux keymap=cz cs_CZ
initrd /Linux/pmagic/initrd.img
}

menuentry "OS a instalace" {
configfile /boot/grub/system.cfg
}

menuentry "Memory test" {
linux16 /Linux/mt86plus
}

menuentry "NT Password Changer 2011" {
search --set=root --file /Linux/chntpw
set opt=vga=1
clear
echo Press ENTER to boot, or give linux kernel boot options first if needed.
echo Some that I have to use once in a while:
echo boot: nousb     - to turn off USB if not used and it causes problems
echo boot: irqpoll   - if some drivers hang with irq problem messages
echo boot: vga=ask   - if you have problems with the videomode
echo boot: nodrivers - skip automatic disk driver loading
echo
set -n opt=boot:
linux /Linux/chntpw $opt
initrd /Linux/chntpw.gz
}

menuentry "EaseUs Disc Copy" {
search --set=root --file /Linux/EaseusDC/bzImage
linux16 /Linux/EaseusDC/bzImage  root=/dev/ram0 rw
initrd16 /Linux/EaseusDC/initrd.img
}

menuentry "EaseUs ToDo Backup" {
search --set=root --file /Linux/EaseusTB/bzImage
linux /Linux/EaseusTB/bzImage  root=/dev/ram0 rw
initrd /Linux/EaseusTB/initrd.img
}

menuentry "Seagate DiscWizard (skip error ALT+T+O+K)" {
search --set=root --file /Linux/SeagatDW
linux16 /Linux/SeagatDW  vga=788 rw ramdisk_size=32768 acpi=off quiet noapic mbrcrcs on
initrd16 /Linux/SeagatDW.gz
}

menuentry "PLoP Boot Manager" {
linux16 /Linux/plpbt.bin
}

menuentry "Smart Boot Manager" {
linux16 /Linux/memdisk
initrd16 /Linux/sbm.bin
}

menuentry "Free DOS" {
linux16 /Linux/memdisk raw
initrd16 /Linux/freedos.img
}

menuentry "Grub4Dos" {
linux16 /boot/grub/grub.exe --config-file=/boot/grub/menu.lst
}
P.S. Ne všechno samazřejmě bude fungovat pod EFI ...
« Poslední změna: 25 Prosinec 2017, 18:54:45 od Ventero »
Zvuky jsou mantrami a myšlenky moudrostí, prostě proto, že se mohou objevovat ...