Linux E X P R E S

Facebook

Tvorba bootovacího flash disku

portable_apps.png

Jednoduchým způsobem vytvoříme Grubem ovládaný flash disk. Ukážeme si rozdíl v  parametrů v souborech isolinux.cfg a grub.cfg. Pomocí těchto parametrů nastavíme Grub a jeho moduly i pro spouštění Linuxu z ISO souboru.


<< Předchozí díl

  1. Zapojte flash disk a spusťte terminál.
  2. 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


  3. 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

Soubor grub.cfg je zodpovědný za nastavení startu systému pomocí Grubu. Na flash disku není prozatím přítomný, a proto jej nyní vytvořte v adresáři /boot/grub. Tento soubor je nutné editovat pomocí aplikací, jež dokážou pracovat s prostým textem (gedit, kwrite atd.), protože editory z velkých kancelářských aplikací si přidávají do textů různé formátovací znaky, kterým Grub nerozumí a končí svoji činnost chybou.

Grubem můžete distribuce spouštět nejen z flash disku, ale i z harddisku těmito způsoby:
  1. pomocí modulu loopback přímo z ISO souboru,
  2. 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

Celé předchozí povídání lze shrnout asi takto. Předal jsem Grubu tyto parametry: Najdi na prvním oddílu flash disku (hd0, msdos1) adresář iso a v něm soubor systemrescuecd-x86-3.7.0.iso. Tento soubor připoj do virtuální mechaniky (loop) a nabootuj z něj jádro (rescue32) a iniciační ramdisk (initram.igz).

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=
Debian a na jeho základech postavené distribuce
findiso=
Ubuntu a na jeho základech postavené distribuce
iso-scan/filename=
Slackware a na jeho základech postavené distribuce
from=
S těmito parametry máte vysokou pravděpodobnost rozběhnout pomocí Grubu a loopback modulu distribuce přímo z ISO obrazu. Pokud se tak nestane, vyzkoušejte postupně zbylé parametry (tolik jich není). Občas narazíte i na distribuce, které se vám nepodaří spustit z ISO obrazu ani z adresáře, kam jste ISO obraz rozbalili. Jde prostě o smůlu, nebo zástupce distribucí, kde se toto chování považuje za bezpečnostní doplněk a distribuce jde spustit pouze z DVD média. Tím je například CAINE (forenzní analýza dat). Naštěstí autoři vydávají i verzi NBCAINE, která tento bezpečnostní prvek neobsahuje a lze ji z flash disku provozovat (ne však jako ISO soubor).

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ěnujte zvýšenou pozornost položkám: hd0, hd1, msdos1, 2, 3 atd. a umístnění ISO souborů, neboť můžete ISO soubory bootovat i z HDD v počítači, proto poupravte podle svého flash disku a adresářové struktury.

V seznamu jsou vypsány jen 32bit verze, ale 64bit verze by neměly činit problémy.

Diskuze (11) Nahoru