Bootloaderul windowsului este primitiv comparativ cu Grub2, nu știe să facă așa ceva, dar cred că-i intenționat așa, cei de la MS nu au interes să folosească utilizatorii alte sisteme de operare!
Am încercat alte bootloadere EasyBCD, AioBoot, Grub4Dos, Easy2Boot, fără rezultate notabile, am reușit până la urmă cu Grub2win.
Descărcați (https://sourceforge.net/projects/grub2win/), instalați și rulați Grub2win, este simplu. Într-un fel este mai simplu de folosit, mai intuitiv comparativ cu Grub2, are interfață grafică, încarcă automat o imagine, vă dă un ”menuentry”, deci aveți un model de sintaxă, tot ce trebuie făcut este să puneți parametrii corecți, cam aceeași ca-n cazul Grub2, cale către imaginea kernelului și imaginea initrd, parametrii specifici de bootare. Evident, este implementarea Grub2 pentru windows...
Dar mie mi-a dat bătăi de cap, sintaxa este diferită, prea multe clickuri, prea mult timp pierdut cu fiecare distribuție în parte, am preferat să trec intrările distribuțiilor direct în fișierul de configurări grub.cfg din directorul (folderul) grub2. Este mai rapid, trecem simultan mai multe intrări (menuentries), se folosește exact aceeași sintaxă ca în Grub2, deci nu avem surprize.
Uitați 2 screenshoturi cu fișierul, se vede clar poziția în care se inserează intrările, pozițiile de început și sfârșit.
Cerințe:
1- Verificați md5sum a imaginii iso, merge și fără, dar trebuie să vedeți dacă imaginea descărcată este corectă.
2- Trebuie să cunoașteți căile corecte către imaginile comprimate ale kernelului și sistemului de fișiere și module necesare la bootare. Denumirile acestora diferă, vmlinuz și initrd.img, cu variante precum vmlinuz0 și initrd0.img (în cazul Rosa, OpenMandriva, Fedora) sau vmlinuz.efi și initrd.lz (în cazul Ubuntu) sau chiar generic (ultima denumire a imaginii kernelului în Slackware), sau archiso (imaginea initrd.img /initial RAM disk în Arch), șamd, în timp pot varia aceste denumiri chiar în cadrul unei distribuții. Căile diferă și acestea, imaginile pot fi păstrate în diverse directoare, live, boot, isolinux, casper, arch, pmagic, șamd. Mai mult, pot fi mai multe asemenea fișiere, în live pentru sesiuni live și-n install pentru instalare
3- Trebuie să pasați parametrii potriviți, diferă de la distribuție la distribuție. Parametrii potriviți pot fi găsiți de obicei în fișierul de setări grub.cfg (/boot/grub/grub.cfg). Dacă aveți un utilitar pentru arhivare capabil să vă arate conținutul imaginii iso îl puteți citi, eu în Linux folosesc Ark. Același utilitar vă permite să găsiți căile (path) către kernel și initrd.img.
4- În exemplele mele, windows este pe partiția a patra a primului disc, de aici (hd0,4) (sau /dev/sda4). Toate imaginile iso sunt stocate în directorul ISO pe partiția (hd0,4), partiție C a windowsului. Înlocuiți după caz, Grub2 începe numerotarea discurilor de la 0 și a partițiilor de la 1. Deci prima partiție a primului disc este /dev/sda1 și/ sau (hd0,1), a doua /dev/sda2 și/ sau (hd0,2).
În cazul meu discul este partiționat clasic (MBR/ Master Boot Record, nu GPT/ GUID Partition Table), în BIOS e setat pe Legacy Boot, nu UEFI.Windows este instalat pe a patra partiție, este versiunea pe 64 biți (x86_64).
Nu am testat multe distribuții, în nici un caz nu voi testa și-n windows 100 și ceva de distribuții, voi pune mai jos menuentries pentru câteva distribuții, cele pe care le cred utile utilizatorilor (Clonezilla, Gparted, PartedMagic, RedoBackup, Kali, BlackArch, Parrot), și unele mai cunoscute (Lubuntu), plus cele pe care le aveam eu pe hdd (AntiX, ArchBang, Manjaro, Porteus)poate voi adăuga altele pe parcurs. Mai degrabă nu, vă puteți inspira din celălalt material (http://stressat.blogspot.ro/2014/04/boot-iso-images-from-hdd-grub2.html), mai verificaţi oricum aici menuentries actuale, există mici diferențe.
Nu veți reuși să bootați toate distribuțiile, e un proces trial and error!
După instalarea Grub2win, acesta va rescrie/ înlocui bootloaderul windowsului și la boot veți avea 2 opțiuni de bootare, windows și Grub 2 for windows, cu prima intrați în windows, cu a doua primiți lista cu distribuțiile adăugate în Grub2win.
Adăugarea unei distribuții este simplă, porniți aplicația Grub2win (după instalare veți avea shortcut pe desktop), apăsați butonul Manage Boot Menu, apoi butonul Add New Entry, la Type selectați isoboot, click Select Iso File, căutați imaginea iso (eu am creat un director în C numit ISO în care am pus toate imaginile iso Linux), click Edit Custom Code, aveți sintaxa necesară, dar trebuie puși parametrii de boot necesari fiecărei distribuții, aveți exemple corecte mai jos, pentru alte distribuții găsiți parametri ok în materialul dedicat bootării imaginilor iso din Linux. Click Apply, click Ok, închideți, restartați, alegeți Grub 2 for windows, selectați distribuția dorită.
Dar puteți folosi interfața grafică pentru introducerea intrărilor, aveți în partea de sus butonul Syntax, așa se verifică sintaxa intrării, dacă de exemplu ați uitat un { sau }. Diferența față de exemplele date este lipsa primei și ultimei linii, de exemplu pentru AntiX veți pune (nu veți pune menuentry ”AntiX” { și }):
insmod loopback
insmod iso9660
set isofile='/ISO/antiX-13.2_x64-full.iso'
set root=(hd0,4)menuentry "Hiren 15.2" {
linux (loop)/antiX/vmlinuz fromiso=$isofile from=all quiet
initrd (loop)/antiX/initrd.gz
Exemple funcţionale:
menuentry ”AntiX” {
insmod loopback
insmod iso9660
set isofile='/ISO/antiX-13.2_x64-full.iso'
set root=(hd0,4)menuentry "Hiren 15.2" {
linux (loop)/antiX/vmlinuz fromiso=$isofile from=all quiet
initrd (loop)/antiX/initrd.gz
}
menuentry "Archbang" {
insmod loopback
insmod iso9660
set isofile="/ISO/archbang-lite-beta-1216-i686.iso"
loopback loop (hd0,4)/$isofile
linux (loop)/arch/boot/i686/vmlinuz archisolabel=ARCHBANG img_dev=/dev/sda4 img_loop=$isofile earlymodules=loop panic=5
initrd (loop)/arch/boot/i686/archiso.img
}
menuentry "BlackArch" {
set isofile="/ISO/blackarchlinux-live-2017.12.11-x86_64.iso"
loopback loop (hd0,4)$isofile
linux (loop)/blackarch/boot/x86_64/vmlinuz archisobasedir=blackarch archisolabel=BLACKARCH_201712 img_dev=/dev/sda4 img_loop=$isofile earlymodules=loop panic=5
#initrd (loop)/blackarch/boot/intel_ucode.img
initrd (loop)/blackarch/boot/x86_64/archiso.img
}
menuentry "ISO Manjaro 17.7.4" {
set isofile="/ISO/manjaro-xfce-17.1.4-stable-x86_64.iso"
loopback loop (hd0,4)$isofile
linux (loop)/boot/vmlinuz-x86_64 img_dev=/dev/sda4 img_loop=$isofile misobasedir=manjaro misolabel=MJRO1714 nouveau.modeset=1 i915.modeset=1 radeon.modeset=1
initrd (loop)/boot/initramfs-x86_64.img
}
menuentry "Porteus" {
insmod loopback
insmod iso9660
set isofile="/ISO/Porteus-XFCE-v3.1-i486.iso"
loopback loop (hd0,4)$isofile
linux (loop)/boot/syslinux/vmlinuz from=/ISO/Porteus-XFCE-v3.1-i486.iso copy2ram panic=5
initrd (loop)/boot/syslinux/initrd.xz
}
menuentry "Lubuntu 16.04" {
set isofile="/ISO/lubuntu-16.04-desktop-i386.iso"
loopback loop (hd0,4)$isofile
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject panic=5
initrd (loop)/casper/initrd.lz
}
menuentry "Parrot" {
set isofile='/ISO/Parrot-security-3.11_amd64.iso'
loopback loop (hd0,4)$isofile
linux (loop)/live/vmlinuz boot=live config fromiso=/dev/sda4/$isofile hostname=parrot splash noautomount panic=5
initrd (loop)/live/initrd.img
}
menuentry "Kali" {
set isofile="/ISO/kali-linux-2016.2-i386.iso"
loopback loop (hd0,4)$isofile
linux (loop)/live/vmlinuz boot=live findiso=$isofile noconfig=sudo username=root hostname=kali noprompt noeject panic=5
initrd (loop)/live/initrd.img
}
menuentry "Clonezilla 2.5.0" {
set gfxpayload=1368x768x16
set root='hd0,4'
set isofile_abspath="/ISO/clonezilla-live-2.5.0-5-amd64.iso"
set isofile_devpath="${devroot}${isofile_abspath}"
loopback loop "(${root})${isofile_abspath}"
linux '(loop)/live/vmlinuz' boot='live' union='overlay' username='user' config components noswap edd='on' nomodeset nodmraid noeject locales='' keyboard-layouts='' ocs_live_run='ocs-live-general' ocs_live_extra_param='' ocs_live_batch='no' ip='' acpi='off'irqpoll noapic noapm nodma nomce nolapic nosmp nomodeset nosplash panic=5 findiso="${isofile_abspath}"
initrd '(loop)/live/initrd.img'
}
menuentry "GParted" {
set gfxpayload=1368x768x16
set root='hd0,4'
set isofile_abspath="/ISO/gparted-live-0.27.0-1-amd64.iso"
set isofile_devpath="${devroot}${isofile_abspath}"
loopback loop "(${root})${isofile_abspath}"
linux '(loop)/live/vmlinuz' boot='live' union='overlay' username='user' config components noswap noeject toram='filesystem.squashfs' ip='' nosplash panic=5 findiso="${isofile_abspath}"
initrd '(loop)/live/initrd.img'
}
menuentry "Parted Magic" {
set isofile="/ISO/pmagic_2016_07_12.iso"
loopback loop (hd0,4)$isofile
linux (loop)/pmagic/bzImage64 edd=off load_ramdisk=1 prompt_ramdisk=0 rw livemedia noeject loglevel=9 max_loop=256 vmalloc=384MiB iso_filename=/ISO/Downloads/ISO/pmagic_2016_07_12.iso panic=4
initrd (loop)/pmagic/initrd.img (loop)/pmagic/fu.img (loop)/pmagic/m64.img
}
menuentry "RedoBackup" {
set isofile="/ISO/redobackup-livecd-1.0.4.iso"
loopback loop (hd0,4)$isofile
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject panic=5
initrd (loop)/casper/initrd.lz
}
Grub2win poate boota chiar şi derivatele Android pentru PC, am testat cu RemixOS. Diferenţa este la Type în loc de Isoboot se alege Android. RemixOS este salvat tot în directorul ISO din C, este dezarhivat (extras din imaginea iso) în subdirectorul remis-os (deci calea, path este /ISO/remix-os), imaginea iso este copiată în directorul /ISO/remix-os. Este bootat cu persistenţă, modificările vor fi salvate într-un director numit data pe care îl creăm noi in remix-os (calea este /ISO/remix-os/data). Exact ca şi cu Grub2 în Linux, nu trebuie trecută partiţia la path (/dev/sda2 de exemplu pentru Linux sau C ori D pentru windows, bootloaderele consideră acea partiţie ca fiind /, partiţia rădăcină)! În mod similar procedaţi pentru PhoenixOS sau Android-x86. Vă puteţi inspira de aici:
https://stressat.blogspot.ro/2016/10/remix-os.html
https://stressat.blogspot.ro/2016/10/phoenix-os.html
Eu am trecut intrarea direct în grub.cfg, cum am mai spus.
menuentry "Remix-64" {
set root='hd0,4'
loopback loop (hd0,4)$isofile
search --set=root --file /ISO/remix-os/kernel
linux /ISO/remix-os/kernel root=/dev/ram0 androidboot.hardware=remix_x86_64 androidboot.selinux=permissive SRC=/ISO/remix-os DATA= CREATE_DATA_IMG=1 UVESA_MODE=1368x768 panic=5
initrd /ISO/remix-os/initrd.img
}
Putem boota astfel și sisteme de operare diferite de Linux, KolibriOS, MenuetOS, ReactOS, Hiren'sBootCD (utilitarele, nu Mini Windows XP), vedeți aici (http://stressat.blogspot.ro/2016/12/boot-non-linux-iso-images-from-hdd-with.html) cum anume și exemple funcționale.
Completare:
Am avut câteva cazuri în care distribuții Linux nu bootau complet, dădeau tot felul de erori, am descoperit cauza, nu suportă partițiile ntfs... Un artificiu bun pentru unele distribuții este adăugarea parametrului insmod ntfs (vedeți în exemplele următoare unde anume), dar nu funcționează în toate cazurile. Soluția corectă, preferabilă, este crearea unei partiții ext4 (poate fi partiție logică în cadrul uneia extinse) pe care să depozitați imaginile iso! Evident că trebuie modificate apoi căile, voi pune 4 exemple. Ca fapt divers, CentOS Gnome și Slackware le-am descărcat azi în Linux, le-am copiat pe partiția ntfs (păstrându-le și pe ext4 pe care am testat într-o clipă de inspirație) și-n final am editat din Linux fișierul de configurări al Grub2Win /grub2/grub.cfg, la boot totul a mers fără probleme! D-aia-i bună CLI... Ca să înțelegeți diferențele: partiția ext4 este a doua pe disc, deci /dev/sda2 sau (hd0,2), (hd0,msdos2) pentru că am partiționare MBR, ar fi fost (hd0,gpt2) pentru schemă de partiționare GPT, imaginile iso sunt păstrate în directorul /dan/Downloads/ISO.
menuentry "ISO CentOS-7-livecd-KDE" {
insmod ntfs
insmod loopback
insmod iso9660
set root=(hd0,2)
set isofile='/dan/Downloads/ISO/CentOS-7-livecd-KDE-x86_64.iso'
loopback loop (hd0,2)$isofile
linux (loop)/isolinux/vmlinuz0 root=live:CDLABEL=CentOS-7-livecd-KDE-x86_64 iso-scan/filename=$isofile rd.live.image
initrd (loop)/isolinux/initrd0.img
}
menuentry "ISO CentOS-7-livecd-Gnome" {
insmod ntfs
insmod loopback
insmod iso9660
set root=(hd0,2)
set isofile='/dan/Downloads/ISO/CentOS-7-livecd-GNOME-x86_64.iso'
loopback loop (hd0,2)$isofile
linux (loop)/isolinux/vmlinuz0 root=live:CDLABEL=CentOS-7-livecd-GNOME-x86_64 iso-scan/filename=$isofile rd.live.image
initrd (loop)/isolinux/initrd0.img
}
menuentry "Slackware" {
insmod loopback
insmod iso9660
set isofile="/dan/Downloads/ISO/slackware64-14.2-install-dvd.iso"
loopback loop (hd0,2)$isofile
linux (loop)/kernels/huge.s/bzImage load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 SLACK_KERNEL=huge.s kbd=us tz=Europe/Bucharest locale=us_EN.utf8
initrd (loop)/isolinux/initrd.img
}
menuentry "Slackware live" {
insmod loopback
insmod iso9660
set isofile="/dan/Downloads/ISO/slackware64-live-xfce-current.iso"
loopback loop (hd0,2)$isofile
linux (loop)/boot/generic livemedia=/dev/sda2:${isofile} load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 kbd=us tz=Europe/Bucharest locale=us_EN.utf8
initrd (loop)/boot/initrd.img
}
menuentry "ISO Mint 18 Sylvia" {
set isofile="/dan/Downloads/ISO/linuxmint-18.3-mate-64bit.iso"
loopback loop (hd0,2)$isofile
loopback loop $isofile
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet splash noprompt
initrd (loop)/casper/initrd.lz
}
Sursă: https://sourceforge.net/projects/grub2win/