- Zapojte flash disk a spusťte terminál.
- Příkazem df zjistěte název zařízení a přípojný bod flash disku (výpis mého systému).
Souborový systém 1K bloků Použité Volné Uži% Připojeno do /dev/sdb1 664280 4 664276 1% /media/STARTGRUB /dev/sdb2 7230460 36824 7193636 1% /media/FLASHDATA - Nyní potřebujete povýšit práva na superuživatele pomocí příkazu su nebo sudo; poté zadejte následující příkaz:
- pro starší verze Grubu
# grub-install --no-floppy --force --root-directory=/media/STARTGRUB /dev/sdb Installation finished. No error reported.
- pro starší verze Grubu
# grub2-install --no-floppy --force --root-directory=/media/STARTGRUB /dev/sdb Installation finished. No error reported.
- pro verzi Grubu 2.00 instalovanou z live verze Fedory (Vmware nebo CD)
# grub2-install --no-floppy --force --root-directory=/run/media/liveuser/STARTGRUB /dev/sdb Installation finished. No error reported.
Tímto jste si z flashdisku vytvořili bootovací médium a práce s terminálem je u konce. Jen nezapomeňte, že verze Grubu 1.98 a 1.99 vytvoří při instalaci na flash disku soubor device.map v adresáři /boot/grub. Tento soubor je nutné smazat, jinak bude flash disk těžko přenositelný mezi počítači.
Ruční editace grub.cfg
Grubem můžete distribuce spouštět nejen z flash disku, ale i z harddisku těmito způsoby:
- pomocí modulu loopback přímo z ISO souboru,
- selže-li loopback, můžete ISO soubor rozbalit do samostatného adresáře.
Pro spuštění z ISO souboru je nutná podpora ze strany vývojářů distribuce. Ti přidávají do iniciačního ramdisku podporu pro loop zařízení, bez které modul loopback většinou neobstojí. Nejlepším zdrojem informací pro vás jsou domovské stránky a komunitní fóra dané distribuce. Nastavení spuštění je v každém ISO souboru v adresáři isolinux nebo syslinux. V těchto adresářích prozkoumejte veškeré cfg soubory, kde získáte základní informace ke spuštění distribuce.
Pro ukázku malá část souboru isolinux.cfg v adresáři /isolinux z distribuce Systemrescuecd 2.1.0.
LABEL rescuecd_docache MENU LABEL 2) SystemRescueCd: all files cached to memory (docache) LINUX rescuecd INITRD initram.igz APPEND scandelay=1 docache TEXT HELP Boot standard 32bit kernel and run system from RAM (cdrom can be removed) It requires 512 MB of memory to work and takes some time during the boot process, but the cdrom can be removed and system will be faster. ENDTEXT
LABEL rescuecd_791 MENU LABEL 3) SystemRescueCd: framebuffer console in high resolution LINUX rescuecd INITRD initram.igz APPEND scandelay=1 nomodeset vga=791 TEXT HELP Boot standard 32bit kernel with console in high resolution KMS graphic drivers (Kernel-Mode-Settings) will be disabled. This mode is useful only if you want to work in console mode ENDTEXT
Základ pro spuštění vyčteme z řádků LINUX a INITRD, parametry pro jádro (v některých případech jen doplňující volba) jsou na řádku APPEND. Získané informace zpracujeme tímto, pro Grub srozumitelným, způsobem (jen ukázka rozdílu zápisu – toto není funkční zápis).
menuentry "SystemRescueCd: all files cached to memory + framebuffer" { linux /isolinux/rescuecd docache nomodeset vga=791 initrd /isolinux/initram.igz }
Soubor isolinux.cfg odkazuje na jádro přímo (čti: nachází se tam, kde je tento soubor), jenže soubor grub.cfg se náchází někde jinde, proto musíme předat Grubu absolutní cestu k jádru (linux /isolinux/rescuecd). Na stejné řádce pokračujeme s předáváním parametrů jádru (isolinux má vlastní řádek APPEND). Parametr vga=791 nepoužívejte, protože Grub jej nezná a je potřeba nahradit jej parametrem gfxpayload=800×600×16 (případně použijte jiné rozlišení).
Teorie již bylo dostatek. Nyní si v textovém editoru otevřete soubor grub.cfg nacházející se na flash disku a zkopírujte do něj následující řádky.
#Následují povinné řádky, bez nichž by Grub nefungoval #až uplyne 15 vteřin, bude automaticky spuštěna volba set default #set default může mít kterýkoliv jedinečný název z položek menuentry set timeout=15 set default="List devices/partitions" #První položka v zobrazeném menu – tato volba se vždy hodí menuentry "List devices/partitions" { insmod part_bsd insmod part_gpt insmod part_msdos ls -l echo " Esc = main menu " sleep --interruptible 9999 } #Pokud používáte SystemRescueCD, můžete ponechat i následující řádky #toto je nastavení s pomocí submenu #SystemRescueCD je ISO soubor v adresáři /iso na prvním oddílu flash disku s Grubem submenu "System rescue CD 3.7.0 - 32bit (ISO)" { menuentry " System rescue CD 3.7.0 - 32bit - default start" { set root=(hd0,msdos1) set soubor=/iso/systemrescuecd-x86-3.7.0.iso loopback loop $soubor root=(loop) linux /isolinux/rescue32 isoloop=$soubor initrd /isolinux/initram.igz } menuentry "System rescue CD 3.7.0 - 32bit - all to RAM (min 512MB)" { set root=(hd0,msdos1) set soubor=/iso/systemrescuecd-x86-3.7.0.iso loopback loop $soubor root=(loop) linux /isolinux/rescue32 docache isoloop=$soubor initrd /isolinux/initram.igz } }
Nyní uložte provedené změny v souboru grub.cfg a zkuste z flash disku nabootovat (Vmware se vyplatí). Malé vysvětlení, co tento zápis znamená, neuškodí.
menuentry " System rescue CD 3.7.0 - 32bit - default start" {
Název položky v menu – pokud chcete na tuto položku odkazovat pomocí funkce set default, musí být tento název jedinečný v celém souboru grub.cfg. Závorka na konci řádku označuje začínající blok parametrů pro Grub.
set root=(hd0,msdos1)
Příkaz set nastavuje různé proměnné hodnoty (root je rezervováno systémem Grub). Zde jsme Grubu předali hodnotu kořenového svazku (kde má hledat potřebná data). Protože startujeme z flash disku, značí hd0 právě flash disk, neboli první zařízení, ze kterého Grub nyní startuje. V našem případě bude hd1 první harddisk v počítači, hd2 druhý atd. První oddíl označuje msdos1. Druhým oddílem bude msdos2 atd. (msdos5 a výše jsou logické oddíly).
set soubor=/iso/systemrescuecd-x86-3.7.0.iso
Tímto příkazem jsme uložili do proměnné (soubor) absolutní cestu (od kořene = / ) k potřebnému ISO obrazu.
loopback loop $soubor
Vytvoří loop zařízení, v němž bude obsah dříve definované proměnné $soubor. Loop zařízení je v podstatě virtuální CD/DVD mechanika.
root=(loop)
Takto Grubu oznamujeme, že se změnilo zařízení z (hd0, msdos1) na (loop) a následující má hledat v dříve vytvořeném loop zařízení.
linux /isolinux/rescue32 isoloop=$soubor
Cesta k jádru pro spuštění distribuce. Parametrem isoloop=$soubor (velmi důležité pro provoz distribucí z ISO obrazů) předáváme jádru cestu k ostatním souborům potřebným k úspěšnému spuštění distribuce.
initrd /isolinux/initram.igz
Cesta k iniciálnímu ramdisku pro jádro distribuce.
}
Tato závorka uzavírá parametry tohoto menuentry předávané Grubu a může následovat další položka (menuentry) v menu.
Shrnutí zápisu
Jak už jsem se zmínil, pro provoz z ISO souboru je důležitá podpora v iniciačním ramdisku. Tato podpora je u každé distribuce odlišná, nebo dokonce žádná. Jádru je důležité předat k aktivaci této funkce jeden z následujících parametrů (většinou jako poslední parametr) včetně cesty k ISO souboru.
SystemrescueCD
isoloop=
findiso=
iso-scan/filename=
from=
Pokud jste dočetli až do těchto míst, děkuji vám za pozornost. Snad bylo pro vás toto pojednání o spouštění distribucí z flash disku přínosné. Malou odměnou za váš čas zde uvádím abecedně řazený seznam osobně odzkoušených distribucí.
U každé distribuce je v závorce uveden způsob zprovoznění (ISO, IMG, RSA) a seznam odzkoušených ISO obrazů, které jsem měl k dispozici a s daným nastavením byly spuštěny. Pokud se mi nepovedlo spustit systém (naběhnutí desktopu nebo výzvy promptu) přímo z ISO souboru, přišla na řadu možnost zkopírovat obsah ISO pomocí správce archivů do adresáře (RSA = rozbaleno do samostatného adresáře). Na konci tohoto seznamu jsou uvedeny distribuce, které se mi nepodařilo zprovoznit (snad budete úspěšnější). Záměrně jsem pro větší přehlednost vynechal veškeré parametry nepodstatné pro spuštění (dostarx, docache atd.), jejichž doplnění je časově zanedbatelné (viz soubory cfg v adresáři isolinux).
Upozornění
V seznamu jsou vypsány jen 32bit verze, ale 64bit verze by neměly činit problémy.