Làm cách nào để tôi khởi động tệp ISO từ ổ đĩa của mình bằng grub2 trên các máy UEFI?


12

Tôi có một loạt các tệp ISO trực tiếp như GParted , CloneZilla , Boot-Repair , Ubuntu 14.04 32 bit , ... được tải xuống /optvà trên máy BIOS cũ của tôi, tôi đã từng có thể thêm chúng vào menu grub và khởi động chúng . :-)

Bây giờ tôi có một máy UEFI và tất cả thông tin tôi có thể tìm thấy là dành cho máy BIOS.

Các bước để khởi động các tệp ISO này từ grub là gì?

Tôi chỉ bị bệnh và mệt mỏi vì phải "đốt" những thứ này vào một chiếc USB mọi lúc vì tôi không bao giờ có thể tìm thấy chiếc gậy mình cần trong khi chính máy tính của tôi nếu khó khăn hơn nhiều trong sự hỗn loạn xung quanh tôi ở đây ... ) :-(


1
Tôi đã đi theo cách này một thời gian và nó thật tuyệt vời.
Đá cẩm thạch hữu cơ

1
Tôi thích sử dụng một phân vùng riêng biệt, mỗi phân vùng trên mỗi ổ đĩa để giúp cài đặt vào ổ đĩa khác hoặc cài đặt toàn bộ ổ đĩa vào ổ đĩa flash dễ dàng hơn. help.ubfox.com/community/Grub2/ISOBoot Ví dụ: help.ubfox.com/community/Grub2/ISOBoot/Examples Tôi thấy việc tìm đường dẫn chính xác như trước khi phân vùng được gắn kết và nhận thông số khởi động chi tiết là hai vấn đề chính khi nhận nó để làm việc Đường dẫn thậm chí có thể thay đổi nếu ổ đĩa flash được cắm vào. Và nhìn vào ISO để xem đoạn khởi động & đường dẫn của nó có thể giúp bạn tìm ra chi tiết.
oldfred

1
Trước đây tôi đã sử dụng phương pháp 'grub-n-iso' này rất nhiều và nó hoạt động tốt :-) nhưng bây giờ tôi đã kiểm tra các tệp iso trong một máy tính riêng để kiểm tra và tôi đã sao chép từ các tệp iso để chuyển nhanh USB3 hoặc tạo liên tục Ổ đĩa USB với mkusb . (Tôi lưu trữ ổ USB của mình trong một hộp nhựa nhỏ.)
sudodus

VBox chạy các tệp ISO OK, sử dụng trạng thái lưu máy khi thoát, MultiBootUSB có tùy chọn kéo và thả khởi động ISO và QEMU với trình quản lý Máy ảo sẽ nhanh chóng chạy iso.
CSCameron

1
Đối với thời gian chỉ sử dụng grub2 2.02 để gắn kết ISO. Grub2 2.04 hết lỗi bộ nhớ. bug.launchpad.net/ubfox/+source/grub2/+orms/1851311 Ubuntu 18.04 vẫn có grub 2.02.
oldfred

Câu trả lời:


14

Có một lỗi trong grub 2.04 vì vậy hãy đảm bảo bạn có phiên bản trước hoặc sau.

Chà, những điều cơ bản để thêm tệp ISO vào grub cũng giống với UEFI như đối với máy BIOS: chỉnh sửa /etc/grub.d/40_customvà thêm một menuentrymục (GParted được sử dụng trong ví dụ này) vào dưới cùng của tệp:

menuentry "GParted Live ISO" {
}

Bây giờ chúng tôi sẽ thêm một biến chứa thư mục nơi chúng tôi lưu trữ ISO (cho đến nay, rất tốt: không có sự khác biệt với các máy BIOS):

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

Tôi đang sử dụng /optđể lưu trữ những thứ này vì tôi không thích tạo thư mục trong thư mục gốc của máy và theo Phân cấp hệ thống tệp của Linux , nơi mà phần mềm tùy chọn sẽ cư trú.

Trước khi thêm loopbackbiến, chúng ta cần tìm ra tệp lưu trữ trên đĩa cứng nào, vì vậy chúng tôi thực hiện: df --output=source /opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso | tail -1và đầu ra trên máy của tôi là:/dev/sdb2 .

Tuy nhiên, grub sử dụng hdX,Yký hiệu ( ) và đây là điểm khác biệt giữa các máy UEFI và BIOS! Vì vậy, bây giờ hãy khởi động lại máy của bạn, vào menu grub và nhấn C: Thao tác này sẽ đưa bạn đến dấu nhắc lệnh grub với các lệnh khác với những lệnh bạn đã sử dụng nhưng lệnh duy nhất bạn cần là:ls .

Trên máy của tôi, đầu ra là:

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

Huh? 4 ổ đĩa? Tôi chỉ có 3! Và nó không phải là (hd1,4)dòng trên BIOS mà là (hd1,gpt3)trong UEFI và(hd0) không có phân vùng nào cả!

Chà, rõ ràng khi một phần của NVRAM được sử dụng làm bộ lưu trữ và hiển thị khi (hd0) bạn cần bắt đầu đánh số ổ đĩa của mình ở mức 1!   Trong khi tất cả thông tin bạn tìm thấy khi khởi động các tệp ISO nói rằng bạn phải bắt đầu đánh số từ 0 (trên các máy BIOS thì điều này luôn đúng , điều này không nhất thiết phải xảy ra trên một số máy UEFI !)

Vì vậy, giá trị loopbacktrở thành (hd2,gpt2)$GPartedISOFiletệp ISO trên máy của tôi là /dev/sdb2(ổ đĩa hd2thứ hai, phân vùng thứ hai gpt2):

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

Một điểm khác biệt nữa là linuxinitrdtrên các máy BIOS được gọi linuxefilinuxefitrên các máy UEFI, điều này cho chúng ta kết quả cuối cùng:

#!/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
}

Vì vậy, bây giờ hãy lưu tệp đó và cập nhật grub với:

update-grub

Sau tất cả những điều trên, khởi động lại, vào menu grub , chọnGParted Live ISO và bây giờ bạn có thể dễ dàng khởi động ISO của mình mà không phải tìm kiếm thanh USB nữa!

:-)

Ví dụ CloneZilla Live (cho câu hỏi này )

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
}

Bạn đã thiết lập Clonezilla chưa? Nó hơi khác một chút, tôi có thể đăng nó nếu bạn chưa tìm ra cái đó.
Đá cẩm thạch hữu cơ

1
Tôi sẽ đăng một câu trả lời khác cho tất cả những câu hỏi mà tôi sẽ thêm vào ngày mai cho loại người "gimme the codez" ... @OrganicMarble
Fabby

+1 nhưng có lẽ an toàn để bỏ 2từ update-grub2những ngày này.
WinEunuuchs2Unix

@ WinEunuuchs2Unix Đó là trong lịch sử của tôi ... Tôi chỉ cần gõ upd↑và sau đó sao chép-dán. Cảm ơn đã nhắc nhở Cập nhật!
Fabby

6

Một cách khác là chỉ cần thêm một cấu hình vào 40_custom như thế này:

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
} 

Tôi làm điều này như khi tôi cập nhật ISO, tôi luôn quên chạy sudo update-grub . Các mục trên không bao giờ phải thay đổi và tôi chỉ có thể chỉnh sửa livecdimage.cfg có cùng định dạng với bất kỳ 40_custom nào nhưng không có dòng tiêu đề và nằm trong thư mục ISO / của tôi trong phân vùng ISO của tôi.

Tôi thêm toram như một tham số khởi động khác và trên hệ thống với Nvidia thêm tham số khởi động nomodeset. Nhưng vẫn thường phải ngắt kết nối / isodevice.

Không thể vượt qua isodevice unmount ISO https://bugs.launchpad.net/ubfox/+source/ubiquity/+orms/1155216

sudo umount -l -r -f /isodevice

Và đây là một phần của tập tin livecdimage.cfg của tôi

# 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
}

Tôi thích những cái Reboot và dừng lại! :-) +1 Tại sao bạn thêm insmod? Bạn cũng có thể ping tôi trong trò chuyện
Fabby

inmod có lẽ không cần thiết. Với grub2, một số tính năng đã được tích hợp và một số tính năng là addin (insmod). Có lẽ lúc đầu tôi cần gpt insmod khi tôi bắt đầu sử dụng gpt vào năm 2010 hoặc trước khi pc là UEFI và grub2 là mới & chỉ dành cho BIOS / MBR mặc dù sẽ khởi động từ gpt với BIOS.
oldfred

Cảm ơn bạn đã trả lời. Sẽ không tốt hơn nếu loại bỏ những dòng đó khỏi câu trả lời?
Fabby

1
Hãy để tôi chỉnh sửa khổ thơ của riêng mình và xem nếu 18.04 khởi động. Tôi hy vọng nó sẽ. Tôi cũng muốn cập nhật mục khởi động ISO gparted của mình hiện đã rất cũ, vì vậy sẽ quay lại sau.
oldfred

1
Đã khởi động ok. Tôi quên rằng tôi đã cắm ổ flash 18.04 và nó trở thành hd0 trên hệ thống của tôi, vì vậy khi khởi động tôi phải chỉnh sửa thủ công mục nhập lên một hdX để có ổ đĩa chính xác. Khởi động 0,25 gparted của tôi không hoạt động bằng cách chỉ thay đổi thành .30. Tôi đã phải xem xét ISO và xem grub.cfg của nó và sử dụng các lệnh vòng lặp & tham số của grub đó, và sau đó nó hoạt động.
oldfred

5

mkusb MULTIBOOT HACK

Mkusb là một cơ sở tuyệt vời cho các dự án ổ đĩa khởi động tùy chỉnh vì khả năng của nó với cả BIOS và UEFI.

Bản hack này khởi động nhiều tệp ISO bao gồm trình cài đặt Windows và có menu grub2.

Các menu Grub2 cho hầu hết các hệ điều hành đều có sẵn bằng Google Search và nằm ngoài phạm vi của câu trả lời này.

mkusb mặc định

Sử dụng mặc định mkusb khi tạo ổ USB liên tục.

mkusb sử dụng mặc định một lần nữa

Sử dụng mặc định mkusb mặc định nếu nghi ngờ, kích thước phân vùng có thể được điều chỉnh sau nhưng mất thời gian.

Bảng điều khiển DUS

Bảng điều khiển DUS sau khi cài đặt.

GParted trước

GParted trước khi sửa đổi phân vùng.

Gparted sau

Gparted sau khi sửa đổi - Ghi đè sdb4, phân vùng HĐH ISO9660 và sdb5, phân vùng ext2 casper-rw, với phân vùng FAT32 cho các tệp lưu trữ lâu dài.

Phân vùng bền bỉ

Phân vùng liên tục - Tạo thư mục tên duy nhất cho mỗi HĐH, (yêu cầu kiên trì)

Thư mục bền bỉ

Thư mục kiên trì - Thêm tệp casper-rw và tệp home-rw tùy chọn vào mỗi thư mục lưu trữ. Một tập tin home-rw có thể được thực hiện bằng cách đổi tên tập tin casper-rw. Một tập tin home-rw giống như một phân vùng nhà riêng biệt trên bản cài đặt đầy đủ, nó có thể được sử dụng lại sau khi nâng cấp phiên bản.

Thư mục ISO

Tạo một thư mục cho các tệp ISO trên phân vùng usbdata NTFS.

Nội dung thư mục ISO

Thêm một số ISO vào thư mục ISO.

Vị trí GRUB

vị trí grub.cfg

grub.cfg

Chỉnh sửa grub.cfg để lặp lại các tệp ISO. Bao gồm:persistent persistent-path=/<persistent-folder-name>/ nếu bạn muốn kiên trì.

EDIT 18.04+ Trong grub chỉ định vmlinuz không vmlinuz.efi và initrd không initrd không initid.lz

sudo chia tay -ls / dev / sdb

sudo chia tay -ls / dev / sdb

sudo lsblk -f / dev / sdb

sudo lsblk -f / dev / sdb

Nếu cần có trình cài đặt Windows, có thể dễ dàng nhất để bắt đầu với chức năng "giải nén trình cài đặt Windows" của mkusb, (tôi phải trích xuất Windows ISO sang TAR theo cách thủ công),

mkusb Trình cài đặt Windows

Sau khi cài đặt, hãy tạo một thư mục cho ISO và nếu cần, các thư mục để duy trì, (tương tự như quy trình trên).

mkusb Windows grub

Chỉnh sửa /boot/grub/grub.cfg để lặp lại bất kỳ ISO nào và chỉ định bất kỳ thư mục lưu trữ nào.

(chưa tìm thấy cách lặp lại tệp ISO của Windows).

Nếu ở trên được sử dụng như một thanh USB, nó có thể được sử dụng để khởi động ISO được lưu trữ trên máy tính chỉ có Windows. Grub là không cần thiết trên ổ đĩa nội bộ.


Và làm thế nào để bạn lấy lại những thứ này trên ổ cứng / SDD ??? Câu hỏi là về việc bây giờ muốn chúng trên một chiếc USB, hay tôi đã bỏ lỡ điều gì?
Fabby

1
@Fabby, Điều này không chỉ dành cho thanh USB. Nếu bạn có ổ đĩa SATA mới, bạn có thể bắt đầu như được mô tả trong câu trả lời này và để mkusb cài đặt hệ thống khởi động mạnh mẽ của nó, hoạt động ở cả chế độ UEFI và BIOS. Ổ đĩa SATA này có thể được cài đặt bên trong hoặc kết nối bên ngoài thông qua USB hoặc eSATA. Có thể thêm cả 'hệ thống được cài đặt theo quy ước' và các tệp iso mới sẽ được khởi động thông qua 'grub-n-iso'.
sudodus

OK, tôi vẫn không hiểu: Tôi muốn có các ISO này /opt/. Làm thế nào để làm điều đó? (+1 trong khi chờ đợi cho nỗ lực mặc dù ...)
Fabby

1
@Fabby: Tôi nghĩ Thay vì tạo một thư mục mới cho ISO như được hiển thị ở trên, hãy trỏ đến vị trí của ISO trong / opt /, trong grub.cfg, grub trên một ổ đĩa có thể khởi động ISO trên ổ cứng. Tôi sẽ thử.
CSCameron

@Fabby: Nếu ISO bật / opt / của ổ đĩa trong thì cùng một mục menu mà bạn đang sử dụng trên ổ đĩa trong sẽ hoạt động trên ổ đĩa ngoài. Có thể có những lợi thế khi khởi động grub trên thanh USB, chẳng hạn như không quá đông hoặc làm hỏng menu grub bên trong.
CSCameron

3

Ba bước đơn giản

để thêm ISO vào menu grub và khởi động từ nó.

Đầu tiên, cài đặt grml-rescueboot

Mở một thiết bị đầu cuối và nhập:

sudo apt install grml-rescueboot

Thứ hai, di chuyển các tệp iso đến /boot/grml/

Trong cùng một thiết bị đầu cuối nhập:

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

Thứ ba, cập nhật grub

Trong cùng một thiết bị đầu cuối nhập:

sudo update-grub

Lặp lại bước thứ hai và thứ ba khi cần thiết

Đừng quên xóa các tệp ISO lỗi thời khỏi /boot/grml.

Tham khảo: Trợ giúp Ubuntu khi khởi động Grub2 ISO

Hi vọng điêu nay co ich


/bootlà nơi tồi tệ nhất để đặt chúng. Xin lỗi, nhìn vào grml, nên đã đề cập đến nó. +1 cho nỗ lực mặc dù
Fabby

Cảm ơn @Fabby vì +1! Đây có thể không phải là cách tốt nhất để làm điều đó, nhưng đây có vẻ là cách dễ nhất, IMHO.
user68186

1
Đó là lý do +1: câu trả lời tốt cho người dùng không có kỹ thuật.
Fabby

2

MultiBootUSB - QEMU

Nếu bạn muốn khởi động các tệp ISO với ít rắc rối nhất và không cần sự kiên trì, MultiBootUSB bao gồm tùy chọn QEMU:

  • Bắt đầu MultiBootUSB và chọn tab Khởi động ISO / USB.

  • Kéo và thả ISO trên không gian Chọn ảnh.

  • Chọn kích thước RAM và nhấn nút Khởi động ISO.

Bạn không cần phải chỉnh sửa grub.cfg hoặc thậm chí đăng xuất.

MultiBootUSB-QEMU


Tiện lợi! Tôi sẽ thử cái này sau!
Fabby

@Fabby: Có phiên bản Windows của MBUSB và phiên bản Linux. Tôi không thể có phiên bản Windows để khởi động ISO, chỉ có USB. Phiên bản Linux 9.2.0 hoạt động rất tốt đối với tôi.
CSCameron

2

SIMPLE mkusb ISO multibooter

Nếu bạn không cần đa kiên trì, có thể dễ dàng sử dụng ISO của hệ điều hành multiboot trên ổ đĩa flash mkusb.

Sử dụng mkusb để tạo một ổ USB liên tục bằng hệ điều hành mặc định mà bạn chọn, https://help.ubfox.com/community/mkusb

Tạo một thư mục trong phân vùng usbdata sdx1, được đặt tên là ISO.

Thêm ISO để được khởi động vào thư mục này.

Thêm menuentries vào /sdx3/boot/grub/grub.cfg để lặp lại các tiêu chuẩn của ISO.

Mẫu:

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
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.