přejít na obsah přejít na navigaci

Linux E X P R E S, Tvorba bootovacího flash disku

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.

Nahoru

Odkazy

Příspěvky

Tvorba bootovacího flash disku
Milhouse 18. 07. 2013, 10:22:15
Odpovědět  Odkaz 
Super článek! Na to už se nějakou dobu chystám, tak snad se zadaří.

Díky.
Re: Tvorba bootovacího flash disku
IQ8 23. 07. 2013, 14:31:37
Odpovědět  Odkaz 
Dobrý den
Hezky napsaný článek. Mohu se zeptat jak je přesně myšleno spouštění ISO souborů pomocí memdisku?
Mám na mysli hlavně disk HDT. Zkoušel jsem to pomocí vašeho návodu a nedaří se mi. Používám toto:
menuentry "HDT - 0.5.2 (ISO)" {
set root=(hd0,msdos1)
linux16 /img/memdisk iso
initrd16 /iso/hdt-0.5.2.iso
}
menuentry "HDT - 0.5.2 (img)" {
set root=(hd0,msdos1)
linux16 /img/memdisk
initrd16 /img/hdt-0.5.2.img
}
Objeví se mi chybové hlášení:
Error: file /img/memdisk not found
Error: you need load the kernel first.
Mohu se zeptat kde přesně je soubor memdisk uložen?
V mé instalaci grub2 leží na cestě /boot/grub2/i386-pc/memdisk.mod je to správný soubor?
Mohu poprosit o nakopnutí správným směrem jak memdisk používat.

Děkuju IQ8
Vladislav Konopík Re: Re: Tvorba bootovacího flash disku
Vladislav Konopík 25. 07. 2013, 08:43:02
Odpovědět  Odkaz 
Memdisk je součástí projektu syslinux (odkaz je v seznamu distribucí). Stáhněte si archiv syslinuxu verze 5.xx (zip nebo tar), po jehož rozbalení naleznete samostatný adresář MEMDISK. V tomto adresáři jsou zdrojové soubory pro kompilaci, ale i již zkompilovaný MEMDISK (je bez přípony). Tento soubor si zkopírujte na svůj flash disk.

Na mém flash disku je tato adresářová struktura:
- boot (grub 2.00)
- img (zde mám Memdisk a obrazy disket)
- iso (sem kopíruji ISO obrazy)

Zápis menuentry Vám nefunguje, neboť hledá aplikaci MEMDISK v adresáři /img
a aplikaci HDT v adresáři /iso (nebo /img)
V menuentry je nutno poupravit cestu k souborům podle Vašeho nastavení
flash disku. Jedná se o úpravu těchto řádků:

linux16 /img/memdisk iso
initrd16 /iso/hdt-0.5.2.iso

První zápis menuentry je pro provoz z ISO souboru a druhý pro provoz z img
souboru (obraz diskety).
Re: Re: Re: Tvorba bootovacího flash disku
IQ8 2. 08. 2013, 09:36:42
Odpovědět  Odkaz 
Dobrý den
Děkuju za nakopnutí. Měl jsem stažené verze 6.00 a 6.01 a v nich zkompilovaný soubor nebyl. V syslinux-5.10 již je.
Jdu pokračovat v testování.
Re: Re: Re: Re: Tvorba bootovacího flash disku
iq8 23. 08. 2013, 09:49:21
Odpovědět  Odkaz 
Dobrý den
Tak jsem si zkompiloval nejnovější memdisk a funguje to skvěle. Děkuji autorovi za hezký článek.
Při procházení webu jsem ještě narazil na možnost jak spouštět některé utility přímo z iso souboru System Rescue CD.
Tak je sem taky napíšu. Snad se to bude někomu hodit.

### BEGIN System rescue CD 3.7.1 tools ###
submenu "System Rescue CD 3.7.1 - x86 (others tools)" {
menuentry "SystemRescueCd: MHDD (Low-Level HDD Diagnostics)" {
set sysrescd=/iso/systemrescuecd-x86-3.7.1.iso
loopback loop $sysrescd
root=(loop)
linux16 (loop)/isolinux/memdisk raw
initrd16 (loop)/bootdisk/mhdd.img
}
menuentry "SystemRescueCd: HDT (Hardware Detection Tool)" {
set sysrescd=/iso/systemrescuecd-x86-3.7.1.iso
loopback loop $sysrescd
root=(loop)
linux16 (loop)/isolinux/memdisk raw
initrd16 (loop)/bootdisk/hdt.img
}
menuentry "SystemRescueCd: NT Password Editor" {
set sysrescd=/iso/systemrescuecd-x86-3.7.1.iso
loopback loop $sysrescd
root=(loop)
linux (loop)/ntpasswd/vmlinuz rw vga=1
initrd (loop)/ntpasswd/initrd.cgz /ntpasswd/scsi.cgz
}
menuentry "SystemRescueCd: Memtest86+" {
set sysrescd=/iso/systemrescuecd-x86-3.7.1.iso
loopback loop $sysrescd
root=(loop)
linux16 (loop)/bootdisk/memtestp
}
}
### END System rescue CD 3.7.1 tools ###
Vladislav Konopík Re: Re: Re: Re: Re: Tvorba bootovacího flash disku
Vladislav Konopík 23. 08. 2013, 19:15:44
Odpovědět  Odkaz 
Děkuji za hodnotný příspěvek.

Nikterak jsem nebádal nad možností provozu doprovodných aplikací tímto způsobem,
neboť jsem vždy raději potřebnou aplikaci vyextrahoval z ISO souboru a provozoval
ji samostatně.
Takto se zřejmě dají provozovat aplikace i u ostatních distribucí. :-)
Tvorba bootovacího flash disku
Jana 19. 07. 2013, 11:02:24
Odpovědět  Odkaz 
Pročpak tak složitě? Zvládne to i kdejaký SW v repu. Navíc kdo o Linuxu moc neví a třeba tady zabrousí, tak si bude myslet, že "Linux = příkazový řádek", což snad již v 99% není pravda (krom pár případů, kde nebyl výrobce HW schopný dodat ovladače, či uvolnit zdrojáky).
Re: Tvorba bootovacího flash disku
Petr Ježek 19. 07. 2013, 14:42:32
Odpovědět  Odkaz 
Co máte proti velmi přesnému popisu jednoho ze způsobů, jak připojit bootovací flash disk? Zkuste napsat článek o alternativních způsobech, bude to alespoň užitečná informace.
Martin Vancl Tvorba bootovacího flash disku
tuxmartin 24. 07. 2013, 02:08:05
Odpovědět  Odkaz 
Jak se da nejsnadneji nabootovat Windows 7 ISO z Grubu?
Nasel jsem: http://goo.gl/w2Z2q1 a http://www.syslinux.org/wiki/index.php/MEMDISK#GRUB2

Podle popisu "non-Linux LiveCD" (Windows mi prijde jako skvely zastupce non-Linux LiveCD ;-) ) by teroreticky melo stacit:
menuentry "Win7 ISO" {
linux16 /memdisk iso
initrd16 /win7.iso
}

Ted nemam moznost otestovat, ale co nejdriv vyzkousim.

Jaky mate nazor na Grub4DOS?
Vladislav Konopík Re: Tvorba bootovacího flash disku
Vladislav Konopík 25. 07. 2013, 09:14:46
Odpovědět  Odkaz 
Toto nastavení nemohu otestovat, neboť s Windows jsem skončil u WinXP a po uvedení Vist jsem přesídlil k Linuxu.
Obávám se, že Memdisk nebude schopen provozu z tohoto ISO obrazu. Zvládá totiž
ISO obrazy jen menších velikostí (možná to souvisí s alokací paměti
pro boot/provoz - nezkoumal jsem).

Pokud se Vám podaří toto zprovoznit, prosím Vás o uveřejnění funkčního zápisu
(těch nefunkčních je na internetu mnoho).

Grub4dos (jedná se o GrubLegacy) jsem měl možnost taktéž otestovat, ale tak jako ostatní aplikace nedovedl některé distribuce zprovoznit a s ISO obrazy jsem neuspěl.

Žádná aplikace (Grub4dos, SuperGrubDisk, UNETBootin a další), kterou jsem otestoval nebyla schopna zprovoznit všechny distribuce, které mám na disku (cca 300GB). Ani pomocí tohoto návodu nezprovozníte všechny distribuce.
Protože je však mnoho bootovacích utilit založených právě na Grubu, může se vám
ukázka nastavení hodit i u zmíněných aplikací.
Martin Vancl Re: Re: Tvorba bootovacího flash disku
tuxmartin 28. 07. 2013, 12:44:36
Odpovědět  Odkaz 
Podle toho, co jsem nasel WinXP funguje: http://goo.gl/7CQQnW

Ja jsem to same zkousel pro Win7 a vzdy skoncim s chybou: http://goo.gl/PlLxmz :-(

Asi nejvetsi problem bude s RAM. Win7 ISO ma 3,8GB a podle http://reboot.pro/topic/18163-memdisk-limit-creating-bootable-dos-image/#entry167861 :
"Memdisk is a (real mode) RAMdisk driver, i.e. it will load the image to memory.
This means that if you need/want a 256 Mb image it will occupy 256 Mb of RAM.
The limit is the RAM you have available."

Odpovědět

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz