Live iso starten vanaf harddisk

De plek voor je tutorials en howto's
Gebruikersavatar
Mogenblue
Held
Held
Berichten: 351
Lid geworden op: Wo 18 Okt 2017, 08:27
Locatie: Amsterdam

Live iso starten vanaf harddisk

Berichtdoor Mogenblue » Do 03 Nov 2022, 16:56

Introductie

Iso bestanden kunnen direct worden gestart zonder ze te branden op een dvd/cdrom of een usb stick. Je kunt de iso image van een linux distro opnemen in het grub menu en zo bij opstarten een live sessie beginnen van een willekeurige linux distributie.

In deze post zul je zien hoe je een iso image kunt starten vanaf een harddisk zonder dat je hem hoeft te branden.


Grub menu zichtbaar maken

Om een distro vanuit het grub menu te kunnen starten moet eerst het grub menu zichtbaar worden gemaakt bij opstarten. Daarvoor moet het bestand /etc/default/grub worden aangepast.
Open de map /etc/default als beheerder en open dan het bestand grub.
De waarde
GRUB_TIMEOUT_STYLE=hidden
moet je veranderen in
GRUB_TIMEOUT_STYLE=menu
En de waarde
GRUB_TIMEOUT=0
moet je veranderen in bijvoorbeeld
GRUB_TIMEOUT=5
Daarmee wordt in het menu na 5 seconden de standaardwaarde gekozen als geen enkele toets wordt ingedrukt. Je kunt ook een andere waarde kiezen. Als je -1 invoert zal het menu net zolang blijven staan tot je een keuze maakt. Met 0 zal meteen de standaardwaarde worden gekozen.

Als beheerder moet je daarna een terminal openen en de opdracht
update-grub
uitvoeren. Daardoor wordt het bestand /boot/grub/grub.cfg bijgewerkt. Als je vervolgens de computer opnieuw opstart zul je het grub menu zien.
/boot/grub/grub.cfg moet je niet met de hand bijwerken want dit is een gecompliceerd script waar je goede kennis van grub voor nodig hebt om dat te doen.



/etc/grub.d/40_custom bestand aanpassen

Vervolgens gaan we het bestand /etc/grub.d/40_custom aanpassen. Dit bestand is bedoeld om handmatig menu items toe te voegen aan het grub menu. Met een extra menu item kun je de iso laten starten vanuit het grub menu.
Eerst moet je achterhalen hoe de schijf heet waar je iso op staat.

Om te zien welke schijven er in het systeem beschikbaar zijn kunnen we 2 opdrachten gebruiken:
lsblk
en
sudo parted -l

lsblk geeft een mooie schematische tabel van alle aangesloten apparaten.
sudo parted -l geeft meer informatie over elk aangesloten apparaat.
Deze informatie helpt je al aardig op weg om de schijf te identificeren waar je het iso bestand hebt staan dat je wil opstarten.

Grub gebruikt echter een andere manier om schijven te identificeren.
In grub worden harde schijven aangeduid met hd gevolgd door een volgnummer. Dat geldt ook voor ssd's en nvme's. Schijven beginnen bij 0. Partities beginnen bij 1. In grub staat (hd0) dus voor de eerste harddisk die grub tegenkomt. En (hd0,2) staat voor de eerste harde schijf en de tweede partitie. Je kunt volstaan met het nummer van de partitie, je hoeft dus niet soort partitie aan te geven.

Het soort partitie is gebaseerd op de partitietabel. De meest voorkomende soorten zijn MBR en GPT.
GPT is de opvolger van MBR. Als je bij een nieuw systeem een keus moet maken voor een partitietabel kun je het best voor GPT kiezen. MBR is namelijk onder meer beperkt tot 4 primaire partities. Bij GPT is dat onbeperkt. GPT kan ook schijven groter dan 2TB aan.

Als je partitietabel gebaseerd is op MBR kun je in grub een partitie tegenkomen met het nummer 5. Dat komt omdat MBR maximaal 4 primaire partities heeft en extra partities als extended moeten worden aangegeven. Extended partities beginnen bij 5.

Om nu precies te weten welke schijven en partities grub onderscheidt in jouw systeem moet je de computer opnieuw opstarten en in grub naar de commando regel gaan door de letter c in te drukken.
Zodra je op de commando regel staat kun je de opdracht
ls
invoeren.
Je krijgt dan een overzicht van alle schijven en partities die in grub bekend zijn. Je ziet dan zoiets als
(hd0) (hd0,gpt1) (hd0,gpt2) (hd1) (hd1,gpt1)
Om nog preciezer te bepalen welke schijf je moet hebben waar je iso op staat kun je per schijf meer info opvragen door de partitie aan te geven achter ls. Met de opdracht
ls (hd1,gpt1)
zal grub meer informatie geven over de partitie gpt1 op schijf hd1.

Op deze manier kun je dus precies bepalen welke notering je voor de schijf en partitie moet gebuiken in het grub bestand /etc/grub.d/40_custom.

Als het iso bestand staat op
/home/popeye/Linux/distro-iso/linuxmint-21-cinnamon-64bit.iso
is de informatie compleet om een menu item te maken.

In het bestand 40_custom voeg je dan de volgende regels toe:

menuentry "linuxmint-21-cinnamon-64bit iso" {
insmod ext2
set isofile="/home/popeye/Linux/distro-iso/linuxmint-21-cinnamon-64bit.iso"
loopback loop (hd0,2)$isofile
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet noeject noprompt splash toram
initrd (loop)/casper/initrd.lz
}


- Het eerste deel van de menu entry is de naam die in het menu verschijnt. Tussen accolades staan de opdrachten die moeten worden uitgevoerd.
- Met de eerste opdracht wordt er een module toegevoegd zodat grub het ext4 bestandsystemen herkent: insmod ext2. Linux systemen werken meestal met ext4 bestandsysteem, maar grub gaat hier niet automatisch van uit. Controleer dit op je eigen systeem.
- Met set isofile specificeer je het pad en de bestandsnaam voor je iso bestand. Let er op dat je dit tussen quotes plaatst. Je mag zowel enkele als dubbele quotes gebruiken. Maar je mag geen spaties gebruiken want bij de iso-scan gaat het dan fout. Daar loopt het stuk op spaties. In bash mag je wel spaties gebruiken, maar dit is geen bash, dit is grub. Het lijkt er veel op, maar er zijn verschillen.
- De opdracht loopback mount het iso bestand aan het opstartsysteem. hd0 staat voor de eerste harde schijf in de computer en 2 staat voor de tweede partitie.
- De linux opdracht laadt een Linux kernel van het gegeven pad in het iso bestand. /casper/vmlinuz is de linux kernel in de Linux Mint iso image.
- De initrd opdracht laadt een initiële ramdisk van het gegeven pad in de iso. De opdracht kan pas gebruikt worden nadat de linux opdracht is uitgevoerd. De initiële ramdisk is een minimaal root file system mounted in het RAM geheugen.
casper/initrd.lz is het initrd bestand voor Ubuntu en Mint iso images.



Aandachtspunten

Met de drie genoemde opdrachten om je schijven te identificeren moet het mogelijk zijn om in de menu entry precies de schijf en partitie aan te geven waar de iso op staat. Als je er toch nog niet zeker van bent zet dan gewoon extra entries in het menu met schijf en partitie die het misschien ook kan zijn. Als het niet werkt krijg je alleen een foutmelding van grub en gebeurt er verder niets. Omdat die entry niet gevonden wordt! Dat werkt sneller dan één entry tegelijk proberen en dan het 40_custom bestand aanpassen en opnieuw opstarten. Je moet alleen de titel van elke entry een unieke naam geven. Een volgnummer aan het begin van de titel is al voldoende.

Als je iso bestand op een extra gemounte schijf staat moet je wel even opletten. Stel dat je een ssd hebt gemount onder /media/popeye/ssd. Als je daar een map iso-distro maakt en daarin je iso bestand zet lijkt het alsof de volledige padnaam
/media/popeye/ssd/iso-distro
is. Maar daar kijkt grub dus anders tegenaan.
Grub benadert de schijf voordat die gemount is. Mounten gebeurt door het operating system in de opstartfase. Dus voor grub is die schijf niet gemount en is het pad naar de iso op die ssd niet meer dan
/iso-distro.



Afsluiting

Op deze manier kun je dus een iso opstarten vanaf de harde schijf zonder hem te hoeven branden. Je zou dit ook voor een usb-stick kunnen doen, maar het is handig om een opstartbare usb-stick achter de hand te houden voor noodgevallen. Een ongeluk zit in een klein hoekje.

Je kunt hiermee ook vrij gemakkelijk andere distro's van linux uitproberen. Je hoeft dus niet meer voor elke distro apart een usb-stick te formatteren. Het is alleen nog een kwestie van extra menu items toevoegen. Andere distro's kunnen wel andere namen gebruiken voor de kernel (vmlinuz) en de ramdisk (initrd.lz). Dus als je daarmee aan de gang gaat moet je eerst even in de iso kijken welke naam die bestanden hebben. Ze lijken meestal nogal veel op elkaar.



Bronnen van wijsheid

How to Boot ISO Files From GRUB2 Boot Loader
How to get to the GRUB menu at boot-time?
GNU GRUB Manual 2.06
Difference Between MBR And GPT
Gebruikersavatar
Arie
Senior
Senior
Berichten: 271
Lid geworden op: Zo 13 Dec 2009, 17:16

Re: Live iso starten vanaf harddisk

Berichtdoor Arie » Do 03 Nov 2022, 19:23

Gaat makkelijker met grub-imageboot
This package installs a grub hook which integrates iso, harddisk and floppy
images into the grub menu.
“Only when the last tree has been cut down, the last fish been caught, and the last stream poisoned, will we realize we cannot eat money.” ― Cree Indian Prophecy
Linux Mint Cinnamon 21.2 LTS
LMDE 5 Cinnamon
Gebruikersavatar
Mogenblue
Held
Held
Berichten: 351
Lid geworden op: Wo 18 Okt 2017, 08:27
Locatie: Amsterdam

Re: Live iso starten vanaf harddisk

Berichtdoor Mogenblue » Zo 06 Nov 2022, 09:26

Je kunt grub ook zelf laten controleren of een iso bestand bestaat. Dat kan met het if -f statement. Daarmee bereik je dat er alleen menu entries worden getoond die ook echt bestaan en dus te gebruiken zijn.

Hier geef ik een voorbeeld van twee iso bestanden die zowel op een interne als een externe harddisk staan.
De externe harddisk wordt via een usb poort aangesloten. Dan zou je denken dat het een usb apparaat is, maar voor grub is dat toch een harddisk die je noteert als (hd..).

Wat verder opvalt is dat een externe harddisk de hd nummering van grub overhoop kan gooien. Een interne harddisk die eerst (hd1) was kan zomaar ineens (hd2) zijn geworden. En de externe harddisk die via usb is aangesloten kan (hd0) zijn geworden.

Er worden variabelen gebruikt om het script te stroomlijnen. Daarbij moet je opletten dat je consequent de juiste variabelen op de juiste plaats gebruikt. Voor elk pad en iso bestand moet je een unieke variabele gebruiken.


-----------------------------------------------------------------------------------------------------------------------------------------------

#ssd intern: (hd2,2)
set diskid1="(hd2,2)"

set isofile1="/home/popeye/Linux/distro-iso/linuxmint-21-cinnamon-64bit.iso"
if [ -f ${diskid1}$isofile1 ]; then
menuentry "ssd: linuxmint-21-cinnamon-64bit iso" {
insmod ext2
loopback loop ${diskid1}$isofile1
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile1 quiet noeject noprompt splash toram
initrd (loop)/casper/initrd.lz
}
fi

set isofile2="/home/popeye/Linux/distro-iso/neon-kde-user-20221030-0714.iso"
if [ -f ${diskid1}$isofile2 ]; then
menuentry "ssd: neon-kde-user-20221030-0714 iso" {
insmod ext2
loopback loop ${diskid1}$isofile2
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile2 quiet noeject noprompt splash toram
initrd (loop)/casper/initrd
}
fi


#usb-ssd: (hd0,1)
set diskid2="(hd0,1)"

set isofile3="/distro-iso/linuxmint-21-cinnamon-64bit.iso"
if [ -f ${diskid2}$isofile3 ]; then
menuentry "usb-ssd: linuxmint-21-cinnamon-64bit iso" {
insmod ext2
loopback loop ${diskid2}$isofile3
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile3 quiet noeject noprompt splash toram
initrd (loop)/casper/initrd.lz
}
fi

set isofile4="/distro-iso/neon-kde-user-20221030-0714.iso"
if [ -f ${diskid2}$isofile4 ]; then
menuentry "usb-ssd: neon-kde-user-20221030-0714 iso" {
insmod ext2
loopback loop ${diskid2}$isofile4
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile4 quiet noeject noprompt splash toram
initrd (loop)/casper/initrd
}
fi

-----------------------------------------------------------------------------------------------------------------------------------------------


Dit plaats je als beheerder in het /etc/grub.d/40_custom bestand en dan voer je in een terminal de opdracht update-grub uit.

Bij de eerste menu entry zie je dat de variabele isofile1 op drie plaatsen wordt gebruikt:
in het if statement;
in de loopback opdracht;
en bij de iso-scan parameter.

De disk-id wordt op twee plaatsen gebruikt:
in het if statement;
en in de loopback opdracht.

Je kunt de variabele isofile niet hergebruiken door steeds set isofile=.... te schrijven en in de menu entry dan ook isofile gebruiken. Grub is geen bash. Wat tussen de accolades staat bij de menuentry wordt op een aparte manier behandeld.
Dat geldt ook voor de diskid.

Als je dit op je eigen systeem wil gebruiken moet je weten hoe de schijven heten en vooral hoe ze heten voor het grub menu.
Als je een externe harddisk hebt via usb moet je dit ook voor die schijf nagaan. Dat doe je dus met de lsblk opdracht in linux en met de ls opdracht onder grub, bij het opstarten van het systeem.
Gebruikersavatar
Joan
Forumbeheerder
Forumbeheerder
Berichten: 1311
Lid geworden op: Do 16 Feb 2012, 00:49
Contact:

Re: Live iso starten vanaf harddisk

Berichtdoor Joan » Ma 14 Nov 2022, 17:07

Weet wel dat het hetzelfde werkt als de distro op een stick of dvd branden.
De instellingen gaan bij afsluiten verloren.
Wil je een duidelijk antwoord? Stel dan een duidelijke vraag. , Kijk hoe dat moet bij Tips voor forumberichten.
Wil je een afbeelding plaatsen?. Kijk hoe dat kan bij Tip voor het plaatsen van afbeeldingen.

Terug naar “Tutorials / Howto's”

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers en 14 gasten