I just received my new System76's Lemp11 pro, and even though I love Pop!_OS I prefer to use Arch (btw), but… I didn't have an external USB drive that will use me as installation media, so…
Creating Partition
I have two internal hard drives and I'm going to shrink my secondary one to allocate more space for a new partition, you can skip this step in case you have some available memory.
Open Disks, and resize your partition
I Choose to leave 32GB my internal partition
in the free space create a new ext4
and name it as you want :)
Copying the ISO files
step one, copy the iso files to the new disk that you just created.
step two, None.
Preparing the data
in the next and last step, we will need to configure our grub, and for this, we will need to collect a few pieces of data:
- your .iso file hdd number:
you can run
lsblk | grep disk
to list your hard drives:
/dev/hda
refers to the first IDE hard drive
/dev/sda
refers to the first SCSI or SATA hard drive.
If you use a NMVe SSD, it might be named as/dev/nvme0n1
,/dev/nvme1n1
and so on.
But in GRUB, the first hard drive is always referred to as hd0, no matter what the interface type is
your .iso file partition number:
you can run the following commandsudo parted -l
and locate your iso's files partition numberyour setup's .efi files
browse trough your .iso files (you can do it by mount your iso or open it an archive manager), and locate your desired linuz .efi file and image file
for example:
Ubuntu setup:
/casper/vmlinuz
and/casper/initrd
Arch setup
/arch/boot/x86_64/vmlinuz-linux
and/arch/boot/x86_64/initramfs-linux
Configuring GRUB
use your favorite text editor to add the following line to
your custom configuration file:
sudo vi /etc/grub.d/40_custom
(if the file doesn't exists /etc/grub.d/40_custom
and
update-grub executable install, please install grub-disk)
and add the following lines:
menuentry "{{menu entry name}}" {
insmod ext2
set isopartition=hd{{hdd number}},{{partition number}}
set isofile="{{iso file path (relative to hdd)}}"
loopback loop (hd{{hdd number}},{{partition number}})$isofile
linux (loop){{iso's vm linuz efi file path}} img_dev=/dev/disk/by-uuid/$isouuid img_loop=$isofile
initrd (loop){{iso's ram memory image file path}}
}
working example (Arch linux)
menuentry "archlinux-2022.07.01-x86_64.iso" {
insmod ext2
set isopartition=hd1,2
set isofile="/iso/archlinux-2022.07.01-x86_64.iso"
loopback loop (hd1,2)$isofile
linux (loop)/arch/boot/x86_64/vmlinuz-linux img_dev=/dev/disk/by-uuid/$isouuid img_loop=$isofile
initrd (loop)/arch/boot/x86_64/initramfs-linux.img
}
Ubuntu:
menuentry "ubuntu-20.04.2.0-desktop-amd64.iso" {
insmod ext2
set isofile="/iso/ubuntu-20.04.2.0-desktop-amd64.iso"
loopback loop (hd1,2)$isofile
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet noeject noprompt splash
initrd (loop)/casper/initrd
}
menuentry: your GRUB2 menu entry, name it as you like.
insmod: inserts a module. Since the ISO file is stored in ext4 partition he ext2 module is needed.
set isofile: Specify that path of your ISO image file
loopback: Mount the ISO file. hd0 means the first hard drive in the computer and 5 means the ISO file is stored on the 5th disk partition.
The linux command loads a Linux kernel from the specified path. casper/vmlinuz.efi is the linux kernel inside the Ubuntu ISO image.
initrd: initrd command loads an initial ramdisk from the specified path. It can only be used after the linux command has been run. The initial ramdisk is a minimal root file system mounted to the RAM. casper/initrd.lz is the initrd file inside the Ubuntu ISO image.
next all you need to do is to run the following command sudo update-grub
and reboot.
All done :)
Top comments (0)