Faceți căutări pe acest blog

vineri, 16 februarie 2018

Boot iso images from hdd - 2 (Windows- Grub2Win)

 Putem boota distribuții Linux în sesiune live și direct din imaginile iso descărcate pe hdd și din Windows. Eu am testat din Windows 7, dar sunt convins că funcționează și din XP, 8 și 10, dacă mă iau după specificații. Sincer să fiu nu mă gândisem la așa ceva, nu folosesc windows, dar de curând am fost întrebat dacă și cum se poate face, și am găsit ideea utilă. Utilă pentru utilizatorii de windows ce ar dori să testeze Linux, aceasta este categoria care mă interesează mai mult, dar și pentru cei ce vor să-și facă backup/ restore, să navigheze în intimitate sau pentru pentesting. Fără să pună imaginea iso pe cd, dvd sau stick usb!
 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. Cu excepția faptului că doar 10 intrări (11 cu tot cu cea implicită cu setările, Boot Information and utilities) sunt afișate, cred că-i o limitare, neimportantă oricum, nu cred că vreți 50 de intrări, pentru 50 de distribuții... Regret, a fost o greșeală de-a mea, poate n-am închis un menuentry...
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ă.






 Repet, eu am avut rezultate 100% ok trecând intrările în folderul /grub2/grub.cfg, chiar la finalul secțiunii start-grub2win-auto-menu-section, vă recomand același lucru!


 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... Posted Image  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/
Back to top