Bagaimana cara mem-boot file ISO dari drive saya menggunakan grub2 pada mesin UEFI?

12

Saya memiliki banyak file ISO langsung seperti GParted , CloneZilla , Boot-Repair , Ubuntu 14.04 32 bit , ... diunduh di /optdan di mesin BIOS lama saya, saya dulu hanya dapat menambahkannya ke menu grub dan mem-bootnya . :-)

Saya sekarang memiliki mesin UEFI dan semua informasi yang dapat saya temukan adalah untuk mesin BIOS.

Apa langkah-langkah untuk mem-boot file ISO ini dari grub?

Aku hanya bosan dan bosan "membakar" ini ke USB stick sepanjang waktu karena saya tidak pernah dapat menemukan tongkat yang saya butuhkan sedangkan komputer saya sendiri jika jauh lebih sulit untuk lepas dalam kekacauan total di sekitar saya di sini ... ) :-(

Fabby
sumber
1
Saya pergi dengan cara ini beberapa waktu lalu dan itu luar biasa.
Marmer Organik
1
Saya memang suka menggunakan partisi terpisah, satu di setiap drive untuk membuatnya lebih mudah untuk menginstal ke drive lain atau menginstal drive penuh ke flash drive. help.ubuntu.com/community/Grub2/ISOBoot Contoh: help.ubuntu.com/community/Grub2/ISOBoot/Examples Saya menemukan cara mendapatkan jalur yang benar seperti sebelum partisi dipasang dan mendapatkan parameter boot terperinci sebagai dua masalah utama untuk mendapatkan itu bekerja. Path bahkan dapat berubah jika flash drive terhubung. Dan melihat ke ISO untuk melihat stanza boot & path-nya dapat membantu Anda mengetahui detailnya.
oldfred
1
Saya pernah menggunakan metode 'grub-n-iso' ini sebelumnya, dan ini bekerja dengan baik :-) tapi sekarang saya menguji file iso di komputer terpisah untuk pengujian, dan saya mengkloning dari file iso ke fast USB3 pendrives atau membuat live persistent USB pendrives dengan mkusb . (Saya menyimpan pendrives USB saya di dalam kotak plastik kecil.)
sudodus
VBox menjalankan file ISO OK, gunakan save machine state saat keluar, MultiBootUSB memiliki opsi untuk drag and drop ISO booting dan QEMU dengan Virtual Machine manager akan dengan cepat menjalankan iso.
CSCameron
1
Untuk saat ini hanya menggunakan grub2 2.02 untuk loop mount ISO. Grub2 2.04 memberikan kesalahan memori. bugs.launchpad.net/ubuntu/+source/grub2/+bug/1851311 Ubuntu 18.04 masih memiliki grub 2.02.
oldfred

Jawaban:

14

Ada bug di grub 2.04 jadi pastikan Anda memiliki versi sebelum atau sesudahnya.

Nah, dasar-dasar untuk menambahkan file ISO ke grub adalah sama untuk UEFI seperti untuk mesin BIOS: edit /etc/grub.d/40_customdan tambahkan menuentryitem (GParted digunakan dalam contoh ini) ke bagian bawah file:

menuentry "GParted Live ISO" {
}

Sekarang kita akan menambahkan variabel yang berisi direktori tempat kita menyimpan ISO (sejauh ini, sangat bagus: tidak ada perbedaan dengan mesin BIOS):

menuentry "GParted Live ISO" {
  set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
}

Saya menggunakan /optuntuk menyimpan ini karena saya tidak suka membuat direktori di root mesin saya dan menurut Hierarki Sistem File Linux di situlah perangkat lunak opsional tetap berada.

Sebelum kita menambahkan loopbackvariabel, kita perlu mencari tahu di mana hard disk file tersebut disimpan, sehingga kita melakukan: df --output=source /opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso | tail -1dan output pada mesin saya adalah: /dev/sdb2.

Namun grub menggunakan ( hdX,Y) notasi dan ini adalah di mana perbedaan antara mesin UEFI BIOS dan datang dalam! Jadi sekarang reboot komputer Anda, masuk ke menu grub dan tekan C: ini akan membawa Anda ke perintah grub prompt dengan perintah yang berbeda dari yang Anda terbiasa tetapi satu-satunya yang Anda butuhkan adalah: ls.

Pada mesin saya, hasilnya adalah:

(hd0) (hd1) (hd1,gpt3) (hd1,gpt2) (hd1,gpt1) (hd2) ... (hd3) ...

Hah? 4 drive? Saya hanya punya 3! Dan itu bukan (hd1,4)baris pada BIOS tetapi (hd1,gpt3)di UEFI dan (hd0)tidak memiliki partisi sama sekali!

Nah, tampaknya ketika bagian dari NVRAM digunakan sebagai penyimpanan dan muncul saat (hd0) Anda perlu mulai memberi nomor pada drive Anda pada 1!   Sedangkan semua informasi yang Anda temukan saat mem-boot file ISO mengatakan Anda harus memulai penomoran mulai dari 0 (pada mesin BIOS ini selalu benar , ini tidak selalu terjadi pada beberapa mesin UEFI !)

Jadi nilai untuk loopbackmenjadi (hd2,gpt2)$GPartedISOFileseperti file ISO pada mesin saya adalah /dev/sdb2(drive hd2kedua, partisi kedua gpt2):

menuentry "GParted Live ISO" {
  set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
  loopback loop (hd2,gpt2)$GPartedISOFile
}

Perbedaan lainnya adalah bahwa pada linuxdan initrdpada mesin BIOS dipanggil linuxefidan linuxefipada mesin UEFI, yang memberi kami hasil akhir kami:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

menuentry "GParted Live ISO" {
  set GPartedISOFile="/opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso"
  loopback loop (hd2,gpt2)$GPartedISOFile
  linuxefi (loop)/live/vmlinuz boot=live components config findiso=$GPartedISOFile ip=frommedia toram=filesystem.squashfs union=overlay username=user
  initrdefi (loop)/live/initrd.img
}

Jadi sekarang simpan file itu, dan perbarui grub dengan:

update-grub

Setelah semua hal di atas, reboot, masuk ke menu grub , pilih GParted Live ISOdan sekarang Anda dapat dengan mudah mem-boot ISO Anda tanpa harus mencari USB stick lagi!

:-)

Contoh CloneZilla Live (untuk pertanyaan ini )

menuentry "CloneZilla ISO" {
  set ISOFile="/opt/Live-ISOs/clonezilla-live-20170905-zesty-amd64.iso"
  loopback loop (hd2,gpt2)$ISOFile
  linuxefi (loop)/live/vmlinuz boot=live components config findiso=$ISOFile ip=frommedia toram=filesystem.squashfs union=overlay
  initrdefi (loop)/live/initrd.img
}
Fabby
sumber
Apakah Anda sudah mengatur Clonezilla? Agak berbeda, saya dapat memposting itu jika Anda belum menemukan yang keluar.
Marmer Organik
1
Saya akan memposting jawaban lain untuk semua yang akan saya tambahkan besok untuk orang-orang "beri kode" ... @OrganicMarble
Fabby
+1 tetapi mungkin aman untuk menjatuhkannya 2mulai update-grub2hari ini.
WinEunuuchs2Unix
@ WinEunuuchs2Unix Ada dalam sejarah saya ... Saya cukup mengetik upd↑dan kemudian salin-tempel. Terima kasih atas pengingat yang diperbarui!
Fabby
6

Alternatifnya adalah dengan menambahkan configfile ke 40_custom seperti ini:

menuentry 'Live ISOs on SSD' {
configfile (hd0,3)/ISO/livecdimage.cfg
} 

menuentry 'Live ISOs on HDD (boot on SSD)' {
configfile (hd1,3)/ISO/livecdimage.cfg
} 

Saya melakukan ini seperti ketika saya memperbarui ISO, saya selalu lupa untuk menjalankan sudo update-grub. Entri di atas tidak perlu diubah dan saya hanya dapat mengedit livecdimage.cfg yang memiliki format yang sama dengan setiap 40_custom tetapi tanpa baris header, dan ada di folder saya / ISO di partisi ISO saya.

Saya menambahkan toram sebagai parameter boot lain dan pada sistem dengan Nvidia tambahkan parameter boot nomodeset. Tetapi masih sering harus meng-unmount / isodevice.

Tidak dapat umount isodevice unmount ISO https://bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1155216

sudo umount -l -r -f /isodevice

Dan ini adalah bagian dari file livecdimage.cfg saya

# livecdimage.cfg
# Add this to 40_custom to load this file:
# menuentry 'Live ISOs' {
# configfile (hd1,3)/iso/livecdimage.cfg
#} 
# Add iso names to livecdimage.cfg
#for i in `ls *.iso`;do echo "# "$i>>livecdimage.cfg; done;

menuentry "Ubuntu 16.04.4 xenial amd64" {
    set isofile="/ISO/ubuntu-16.04.4-desktop-amd64.iso"
    loopback loop (hd0,3)$isofile 
    linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile toram
    initrd (loop)/casper/initrd.lz
}

menuentry "Ubuntu 18.04 Bionic amd64" {
    set isofile="/ISO/bionic-desktop-amd64.iso"
    loopback loop (hd0,3)$isofile 
    linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile toram
    initrd (loop)/casper/initrd.lz
}

# spacer line
menuentry " " {
set root= 
}

menuentry "Reboot" {
    reboot
}

menuentry "Halt" {
    halt
}
oldfred
sumber
Saya suka yang Reboot dan yang berhenti! :-) +1 Mengapa Anda menambahkannya insmod? Anda juga dapat melakukan ping saya dalam obrolan
Fabby
inmod mungkin tidak diperlukan. Dengan grub2 beberapa fitur dibangun dan beberapa addin (insmod). Mungkin pada awalnya saya membutuhkan insmod gpt ketika saya mulai menggunakan gpt pada 2010 atau sebelum pc UEFI dan grub2 adalah baru & hanya untuk BIOS / MBR meskipun akan boot dari gpt dengan BIOS.
oldfred
Terima kasih atas jawabannya. Bukankah lebih baik untuk menghapus garis-garis dari jawaban itu?
Fabby
1
Biarkan saya mengedit bait saya sendiri dan melihat apakah 18,04 boot. Saya berharap itu akan terjadi. Saya juga ingin memperbarui entri boot ISO gparted saya yang sekarang sudah sangat tua, jadi akan kembali sedikit.
oldfred
1
Boot ok. Saya lupa saya memasang flash drive 18,04 saya dan menjadi hd0 di sistem saya, jadi ketika boot saya harus mengedit entri secara manual satu hdX untuk memiliki drive yang benar. Boot .25 gparted saya tidak berfungsi dengan hanya mengubah ke .30. Saya harus melihat ke ISO dan melihat grub.cfg-nya dan menggunakan parameter-parameter itu & perintah loop grub, dan kemudian berhasil.
oldfred
5

mkusb MULTIBOOT HACK

Mkusb menjadi basis yang bagus untuk proyek-proyek drive boot kustom karena kemampuannya dengan BIOS dan UEFI.

Hack ini mem-boot beberapa file ISO termasuk installer Windows, dan memiliki menu grub2.

Menuentries Grub2 untuk sebagian besar OS tersedia menggunakan Pencarian Google dan berada di luar cakupan jawaban ini.

mkusb default

Gunakan mkusb default saat membuat drive USB Persistent.

mkusb menggunakan default lagi

Gunakan default mkusb persistence jika ragu, ukuran partisi dapat disesuaikan kemudian tetapi membutuhkan waktu.

Konsol DUS

Konsol DUS setelah pemasangan.

GParted Sebelumnya

Digelar sebelum modifikasi partisi.

Gparted setelahnya

Gparted setelah modifikasi - Timpa sdb4, partisi OS ISO9660 dan sdb5, partisi ext2 casper-rw, dengan partisi FAT32 untuk file kegigihan.

Partisi ketekunan

Partisi persistensi - Buat folder nama unik untuk setiap OS, (yang membutuhkan kegigihan)

Folder ketekunan

Folder ketekunan - Tambahkan file casper-rw dan file home-rw opsional ke setiap folder ketekunan. File home-rw dapat dibuat dengan mengganti nama file casper-rw. File home-rw seperti partisi rumah yang terpisah pada instalasi penuh, dapat digunakan kembali setelah peningkatan versi.

Folder ISO

Buat folder untuk file ISO pada partisi usbdata NTFS.

Isi folder ISO

Tambahkan beberapa ISO ke folder ISO.

Lokasi GRUB

lokasi grub.cfg

grub.cfg

Edit grub.cfg untuk loopmount file ISO. Termasuk:persistent persistent-path=/<persistent-folder-name>/ jika Anda ingin kegigihan.

EDIT 18.04+ Dalam grub tentukan vmlinuz bukan vmlinuz.efi dan initrd bukan initrd bukan initid.lz

sudo berpisah -l / dev / sdb

sudo berpisah -l / dev / sdb

sudo lsblk -f / dev / sdb

sudo lsblk -f / dev / sdb

Jika diperlukan penginstal Windows, mungkin paling mudah untuk memulai dengan fungsi mkusb "mengekstrak penginstal Windows", (saya harus mengekstrak ISO Windows ke TAR secara manual),

Penginstal mkusb Windows

Setelah instalasi buat folder untuk ISO dan jika perlu, folder untuk kegigihan, (mirip dengan prosedur di atas).

mkusb Windows grub

Edit / boot / grub/grub.cfg untuk loopmount semua ISO dan tentukan folder persistensi apa pun.

(belum menemukan cara untuk loopmount file Windows ISO).

Jika di atas digunakan sebagai stik USB, stik tersebut dapat digunakan untuk mem-boot ISO yang disimpan di komputer Windows saja. Grub tidak diperlukan di drive internal.

CSCameron
sumber
Dan bagaimana Anda mendapatkannya kembali pada HDD / SDD ??? Pertanyaannya adalah tentang sekarang menginginkan mereka di USB stick, atau apakah saya melewatkan sesuatu?
Fabby
1
@ Fabby, Ini bukan hanya untuk stik USB. Jika Anda memiliki drive SATA baru, Anda dapat mulai seperti yang dijelaskan dalam jawaban ini dan membiarkan mkusb menginstal sistem boot yang kuat, yang berfungsi dalam mode UEFI dan BIOS. Drive SATA ini dapat diinstal secara internal atau terhubung secara eksternal melalui USB atau eSATA. Dimungkinkan untuk menambahkan 'sistem yang diinstal secara konvensional' dan file iso baru untuk di-boot melalui 'grub-n-iso'.
sudodus
OK, saya masih tidak mengerti: Saya ingin ISO ini di /opt/. Bagaimana aku melakukan itu? (+1 sementara untuk upaya ...)
Fabby
1
@ Fabby: Saya pikir Alih-alih membuat folder baru untuk ISO seperti yang ditunjukkan di atas, arahkan ke lokasi ISO di / opt /, di grub.cfg, grub pada flashdisk dapat mem-boot ISO pada hard drive. Saya akan mencoba ini.
CSCameron
@Fabby: Jika ISO berada di / opt / drive internal entri menu yang sama yang Anda gunakan pada drive internal akan bekerja pada drive eksternal. Mungkin ada keuntungan untuk mem-boot grub pada stik USB, seperti tidak terlalu padat atau merusak menu grub internal.
CSCameron
3

Tiga langkah mudah

untuk menambahkan ISO ke menu grub dan boot darinya.

Pertama, instal grml-rescueboot

Buka terminal dan masukkan:

sudo apt install grml-rescueboot

Kedua, pindahkan file iso ke /boot/grml/

Di terminal yang sama masukkan:

sudo mv ~/Downloads/<filename.iso> /boot/grml/

Ketiga, perbarui grub

Di terminal yang sama masukkan:

sudo update-grub

Ulangi langkah kedua dan ketiga sesuai kebutuhan

Jangan lupa untuk menghapus file ISO yang sudah usang /boot/grml.

Referensi: Bantuan Ubuntu pada boot ISO Grub2

Semoga ini membantu

pengguna68186
sumber
/bootadalah tempat terburuk untuk menempatkan mereka. Maaf, melihat ke grml, seharusnya menyebutkannya. +1 untuk upaya
Fabby
Terima kasih @Fabby untuk +1! Ini mungkin bukan cara terbaik untuk melakukannya, tetapi ini tampaknya yang paling mudah, IMHO.
user68186
1
Karena itulah +1: jawaban yang bagus untuk pengguna non-teknis.
Fabby
2

MultiBootUSB - QEMU

Jika Anda ingin mem-boot file ISO dengan paling sedikit kerumitan dan tidak perlu kegigihan, MultiBootUSB menyertakan opsi QEMU:

  • Mulai MultiBootUSB dan pilih tab Boot ISO / USB.

  • Seret dan lepas ISO pada ruang Select image.

  • Pilih ukuran RAM dan tekan tombol Boot ISO.

Anda tidak perlu mengedit grub.cfg atau bahkan keluar.

MultiBootUSB-QEMU

CSCameron
sumber
Bagus! Saya akan coba ini nanti!
Fabby
@ Fabby: Ada versi Windows MBUSB dan versi Linux. Saya tidak bisa mendapatkan versi Windows untuk boot ISO, hanya USB. Linux versi 9.2.0 sangat bagus untuk saya.
CSCameron
2

SIMPLE mkusb ISO multibooter

Jika Anda tidak membutuhkan multi-persistensi, mudah untuk menjalankan sistem operasi multiboot ISO pada mkusb flash drive.

Gunakan mkusb untuk membuat drive USB Persisten menggunakan OS default pilihan Anda, https://help.ubuntu.com/community/mkusb

Buat folder di partisi usbdata sdx1, bernama ISO.

Tambahkan ISO untuk di-boot ke folder ini.

Tambahkan menuentries ke /sdx3/boot/grub/grub.cfg untuk loopmount ISO.

Sampel:

menuentry "Ubuntu-18.04 64-bit ISO" {
    set root=(hd0,1)
    set isofile="/ISOs/ubuntu-18.04-desktop-amd64.iso"
        loopback loop $isofile
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile splash --
        initrd (loop)/casper/initrd.lz
}

menuentry "GParted 64-bit ISO" {
    set root=(hd0,1)
    set isofile="/ISOs/gparted-live-0.31.0-1-amd64.iso"
    loopback loop $isofile
    linux (loop)/live/vmlinuz boot=live union=overlay username=user config components noswap noeject toram=filesystem.squashfs ip='' nosplash findiso=$isofile splash --
    initrd (loop)/live/initrd.img
}

menuentry "Clonezilla 64-bit ISO" {
    set root=(hd0,1)
    set isofile="/ISOs/clonezilla-live-2.5.5-38-amd64.iso"
    loopback loop $isofile
    linux (loop)/live/vmlinuz boot=live live-config nolocales edd=on nomodeset ocs_live_run=\"ocs-live-general\" ocs_live_extra_param=\"\"   ocs_live_keymap=\"\" ocs_live_batch=\"no\" ocs_lang=\"\" vga=788   ip=frommedia nosplash toram=filesystem.squashfs findiso=$isofile splash --
    initrd (loop)/live/initrd.img
}
CSCameron
sumber