UEFI 시스템에서 grub2를 사용하여 드라이브에서 ISO 파일을 어떻게 부팅합니까?


12

GParted , CloneZilla , Boot-Repair , Ubuntu 14.04 32 bit ... 와 같은 라이브 ISO 파일이 많이 있습니다 . ... /opt이전 BIOS 시스템 에서 다운로드 한 다음 grub 메뉴에 추가하고 부팅 할 수있었습니다. . :-)

이제 UEFI 시스템이 있으며 찾을 수있는 모든 정보는 BIOS 시스템에 대한 것입니다.

grub에서 이러한 ISO 파일을 부팅하는 단계는 무엇입니까?

나는 단지 내가 필요로하는 막대기를 결코 찾을 수 없기 때문에 나는 항상 USB 막대기에 이것들을 "굽는"것에 질려서 피곤하다. 반면 내 컴퓨터 자체는 내 주위의 혼란에 빠지기 훨씬 힘들다면 ... ) :-(


1
나는이 길을 잠시 갔다가 굉장합니다.
유기농 대리석

1
다른 드라이브에 쉽게 설치하거나 플래시 드라이브에 전체 드라이브를 설치하기 쉽도록 각 드라이브마다 하나씩 별도의 파티션을 사용하고 싶습니다. help.ubuntu.com/community/Grub2/ISOBoot 예 : help.ubuntu.com/community/Grub2/ISOBoot/Examples 파티션을 마운트하기 전과 같이 경로가 정확하고 경로를 찾는 데있어 두 가지 주요 문제로 자세한 부팅 매개 변수를 얻습니다 작동합니다. 플래시 드라이브가 연결되어 있으면 경로도 변경 될 수 있습니다. ISO를 조사하여 부트 스탠자 및 경로를 확인하면 세부 정보를 파악하는 데 도움이됩니다.
oldfred

1
나는이 'grub-n-iso'방법을 많이 사용했으며 잘 작동합니다 :-) 그러나 이제 테스트를 위해 별도의 컴퓨터에서 iso 파일을 테스트하고 iso 파일에서 빠른 USB3 펜 드라이브로 복제하거나 지속적인 라이브를 만듭니다. mkusb 와 USB 펜 드라이브 . (저는 USB
펜 드라이브를

VBox는 ISO 파일을 실행합니다. 종료시 시스템 상태 저장을 사용합니다. MultiBootUSB에는 ISO 부팅 드래그 앤 드롭 옵션이 있으며 Virtual Machine Manager를 사용하는 QEMU는 iso를 빠르게 실행합니다.
CSCameron

1
당분간 grub2 2.02 만 사용하여 ISO를 루프 마운트합니다. Grub2 2.04는 메모리 부족 오류를 발생시킵니다. bugs.launchpad.net/ubuntu/+source/grub2/+bug/1851311 우분투 18.04에는 여전히 grub 2.02가 있습니다.
oldfred

답변:


14

grub 2.04 에는 버그 가 있으므로 이전 버전 이상이 있는지 확인하십시오.

grub에 ISO 파일을 추가하는 기본 사항은 UEFI에서 BIOS 시스템과 동일합니다. 파일을 편집 /etc/grub.d/40_custom하고 menuentry파일 맨 아래에 항목 (이 예에서는 GParted가 사용됨)을 추가합니다.

menuentry "GParted Live ISO" {
}

이제 ISO를 저장 한 디렉토리를 포함하는 변수를 추가 할 것입니다 (지금까지는 BIOS 시스템과 아무런 차이가 없음).

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

나는 /opt내 컴퓨터의 루트에 디렉토리를 만드는 것을 싫어하고 선택적 소프트웨어가 있어야하는 Linux 파일 시스템 계층 에 따라 디렉토리를 저장 하는 데 사용 하고 있습니다 .

loopback변수 를 추가하기 전에 파일이 저장된 하드 디스크를 찾아야하므로 a :를 수행하고 df --output=source /opt/Live-ISOs/gparted-live-0.31.0-1-amd64.iso | tail -1내 컴퓨터의 출력 은 다음 과 같습니다 /dev/sdb2.

그러나 용도 (GRUB hdX,Y) 표기법을하고 UEFI와 BIOS 기계의 차이는 어디에서 오는 것입니다! 이제 컴퓨터를 재부팅 하고 grub 메뉴로 이동하여 다음 을 누르십시오 C. 이렇게하면 다른 명령 을 사용하여 grub 명령 프롬프트가 표시 되지만 필요한 유일한 명령 은 다음과 같습니다 ls..

내 컴퓨터에서 출력은 다음과 같습니다.

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

응? 4 개의 드라이브? 나는 단지 3을 가지고있다! 그리고 그것은 (hd1,4)BIOS가 아니라 (hd1,gpt3)UEFI에 있으며 (hd0)파티션이 전혀 없습니다!

NVRAM의 일부가 스토리지로 사용될 (hd0) 때 드라이브 번호를 1에서 시작해야 할 때 나타납니다 .   ISO 파일 부팅에 대한 모든 정보는 0부터 번호를 시작해야한다고 말하지만 (BIOS 머신에서는 항상 사실이지만 , 일부 UEFI 머신에서는 반드시 그런 것은 아닙니다 !)

의 값이 그래서 loopback하게 (hd2,gpt2)$GPartedISOFile내 컴퓨터에서 ISO 파일로했다 /dev/sdb2(두 번째 드라이브 hd2, 두 번째 파티션 gpt2) :

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

또 다른 차이점은 것입니다 linuxinitrdBIOS 시스템에서가 호출 linuxefi하고 linuxefi우리에게 우리의 최종 결과를 제공 UEFI 시스템에 :

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

이제 해당 파일을 저장하고 다음을 사용하여 grub을 업데이트하십시오.

update-grub

위의 모든 작업을 마친 후 재부팅 하고 grub 메뉴로 이동하여 선택 GParted Live ISO하면 USB 스틱을 다시 찾지 않고도 ISO를 쉽게 부팅 할 수 있습니다!

:-)

CloneZilla Live 예제 ( 이 질문에 대한 )

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
}

Clonezilla를 아직 설정하셨습니까? 그것은 조금 다릅니다, 당신이 아직 그것을 이해하지 못했다면 게시 할 수 있습니다.
유기농 대리석

1
나는 "내가 추가 할 모든 사람들을 위해 또 다른 답변을 게시 할 것입니다." "gimme the codez"사람들을 위해 ... @OrganicMarble
Fabby

+1이지만 요즘 2부터 하락하는 것이 안전합니다 update-grub2.
WinEunuuchs2Unix

@ WinEunuuchs2Unix 그것은 내 역사에있다 ... 나는 단지 타이핑 upd↑하고 복사-붙여 넣기를한다. 알림 주셔서 감사합니다!
Fabby

6

대안은 다음과 같이 구성 파일을 40_custom에 추가하는 것입니다.

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
} 

ISO를 업데이트 할 때 항상 실행하는 것을 잊어 버립니다 sudo update-grub. 위의 항목은 변경할 필요가 없으며 40_custom과 동일한 형식이지만 헤더 행이없는 livecdimage.cfg를 편집 할 수 있으며 ISO 파티션의 / ISO 폴더에 있습니다.

다른 부트 매개 변수로 toram을 추가하고 Nvidia add nomodeset 부팅 매개 변수가있는 시스템에서 toram을 추가합니다. 그러나 여전히 / isodevice를 마운트 해제해야합니다.

isodevice를 마운트 해제 할 수 없습니다. ISO 마운트 해제 https://bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1155216

sudo umount -l -r -f /isodevice

그리고 이것은 내 livecdimage.cfg 파일의 일부입니다

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

나는 재부팅이 마음에 들었습니다. :-) +1 왜 추가 insmod합니까? 채팅으로 나를 핑할
Fabby

inmod는 아마 필요하지 않을 것입니다. grub2를 사용하면 일부 기능이 내장되어 있고 일부는 addin (insmod)이었습니다. 아마도 처음에 2010 년에 gpt를 사용하기 시작했을 때 또는 pc가 UEFI이고 grub2가 새로운 것이었고 BIOS로 gpt에서 부팅하더라도 grub2는 BIOS / MBR 전용이었습니다.
oldfred

답변 감사합니다. 그렇다면 대답에서 해당 줄을 제거하는 것이 더 좋지 않습니까?
Fabby

1
내 스탠자를 편집하고 18.04가 부팅되는지 확인하겠습니다. 나는 그것을 기대합니다. 또한 현재 매우 오래된 gparted ISO 부팅 항목을 업데이트하고 싶었습니다.
oldfred

1
부팅했습니다. 나는 18.04 플래시 드라이브가 연결되어 있고 시스템에서 hd0이되는 것을 잊어 버렸으므로 부팅 할 때 올바른 드라이브를 갖기 위해 하나의 hdX를 수동으로 편집해야합니다. gparted .25 부팅이 .30으로 변경되어 작동하지 않았습니다. ISO를 조사하고 grub.cfg를보고 해당 매개 변수 및 grub의 루프 명령을 사용하여 작동했습니다.
oldfred

5

mkusb 멀티 부팅 해킹

Mkusb는 BIOS와 UEFI 기능을 모두 갖춘 맞춤형 부팅 드라이브 프로젝트를위한 훌륭한 기반을 제공합니다.

이 핵은 Windows 설치 프로그램을 포함하여 여러 ISO 파일을 부팅하며 grub2 메뉴가 있습니다.

대부분의 OS에 대한 Grub2 메뉴 항목은 Google 검색을 통해 사용할 수 있으며이 답변 범위를 벗어납니다.

mkusb 기본값

영구 USB 드라이브를 작성할 때 mkusb 기본값을 사용하십시오.

mkusb는 기본값을 다시 사용합니다

확실하지 않으면 파티션 크기를 나중에 조정할 수 있지만 시간이 걸리는 경우 mkusb 지속성 기본값을 사용하십시오.

DUS 콘솔

설치 후 DUS 콘솔.

GParted Before

파티션 수정 전 GParted.

이후에 갈라짐

수정 후 구분-지속성 파일 용 FAT32 파티션으로 sdb4, ISO9660 OS 파티션 및 sdb5, ext2 casper-rw 파티션을 덮어 씁니다.

지속성 파티션

지속성 파티션-각 OS에 대해 고유 한 이름의 폴더를 만듭니다 (지속성이 필요함)

지속성 폴더

지속성 폴더-casper-rw 파일 및 선택적 home-rw 파일을 각 지속성 폴더에 추가하십시오. casper-rw 파일의 이름을 바꾸어 home-rw 파일을 만들 수 있습니다. home-rw 파일은 전체 설치시 별도의 홈 파티션과 같으며 버전 업그레이드 후 재사용 할 수 있습니다.

ISO 폴더

NTFS usbdata 파티션에 ISO 파일 용 폴더를 만듭니다.

ISO 폴더 내용

ISO 폴더에 ISO를 추가하십시오.

GRUB 위치

grub.cfg 위치

grub.cfg

ISO 파일을 루프 마운트하려면 grub.cfg를 편집하십시오. persistent persistent-path=/<persistent-folder-name>/지속성을 원한다면 포함하십시오 .

편집 18.04+ grub에서 vmlinuz가 아닌 vmlinuz.efi를 지정 하고 initrd가 initd가 아닌 initrd를 지정하십시오.

sudo parted -ls / dev / sdb

sudo parted -ls / dev / sdb

sudo lsblk -f / dev / sdb

sudo lsblk -f / dev / sdb

Windows 설치 프로그램이 필요한 경우 mkusb "Windows 설치 프로그램 추출"기능으로 시작하는 것이 가장 쉽습니다 (Windows ISO를 TAR로 수동으로 추출해야 함).

mkusb Windows 설치 프로그램

설치 후 ISO 폴더를 작성하고 필요한 경우 지속성을위한 폴더를 작성하십시오 (위의 절차와 유사).

mkusb 윈도우 그럽

/boot/grub/grub.cfg를 편집하여 ISO를 루프 마운트하고 지속성 폴더를 지정하십시오.

(Windows ISO 파일을 루프 마운트하는 방법을 찾지 못했습니다).

위의 내용을 USB 스틱으로 사용하면 Windows 전용 컴퓨터에 저장된 ISO를 부팅하는 데 사용할 수 있습니다. 내장 드라이브에는 그럽이 필요하지 않습니다.


그리고 어떻게 HDD / SDD에 다시 넣을 수 있습니까 ??? 문제는 이제 USB 스틱에 넣기를 원하거나 무언가를 놓친 것입니까?
Fabby

1
@Fabby, USB 스틱 전용이 아닙니다. 새 SATA 드라이브가있는 경우이 답변에 설명 된대로 시작하여 mkusb 가 강력한 부팅 시스템을 설치하게하여 UEFI 및 BIOS 모드에서 작동합니다. 이 SATA 드라이브는 내부에 설치하거나 USB 또는 eSATA를 통해 외부에 연결할 수 있습니다. '일반적으로 설치된 시스템'과 'grub-n-iso'를 통해 부팅 할 새 iso 파일을 모두 추가 할 수 있습니다.
sudodus

그래, 나는 아직도 그것을 얻지 못한다 : 나는이 ISO를 원한다 /opt/. 어떻게해야합니까? (그 동안 노력에 +1하지만 ...)
Fabby

1
@Fabby : 위와 같이 ISO의 새 폴더를 만드는 대신 / opt /의 ISO 위치를 가리키고 grub.cfg에서 pendrive의 grub은 하드 드라이브에서 ISO를 부팅 할 수 있습니다. 나는 이것을 시도 할 것이다.
CSCameron

@Fabby : ISO가 내장 드라이브의 / opt /에 있으면 내장 드라이브에서 사용하는 것과 동일한 메뉴 항목이 외장 드라이브에서 작동합니다. 내부 그룹 메뉴가 과도하게 사용되거나 손상되지 않는 등 USB 스틱에서 그룹을 부팅하면 이점이있을 수 있습니다.
CSCameron

3

쉬운 3 단계

grub 메뉴에 ISO를 추가하고 부팅합니다.

먼저 설치 grml-rescueboot

터미널을 열고 다음을 입력하십시오.

sudo apt install grml-rescueboot

둘째, iso 파일을 /boot/grml/

동일한 터미널에서 다음을 입력하십시오.

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

셋째, 그룹 업데이트

동일한 터미널에서 다음을 입력하십시오.

sudo update-grub

필요에 따라 두 번째 및 세 번째 단계를 반복하십시오.

에서 사용되지 않는 ISO 파일을 삭제하는 것을 잊지 마십시오 /boot/grml.

참조 : Grub2 ISO 부팅에 대한 Ubuntu 도움말

도움이 되었기를 바랍니다


/boot가장 최악의 장소입니다. 죄송합니다, grml을 살펴 보았습니다. 노력에 +1
Fabby

+1을위한 @Fabby에게 감사합니다! 이것이 최선의 방법은 아니지만 IMHO가 가장 쉬운 것 같습니다.
user68186

1
그래서 +1 : 비 기술적 인 사용자에게 좋은 대답입니다.
Fabby

2

멀티 부트 USB-QEMU

번거롭지 않고 ISO 파일을 부팅하려는 경우 지속성이 필요하지 않은 경우 MultiBootUSB에는 QEMU 옵션이 포함됩니다.

  • MultiBootUSB를 시작하고 Boot ISO / USB 탭을 선택하십시오.

  • 이미지 선택 공간에서 ISO를 끌어다 놓습니다.

  • RAM 크기를 선택하고 Boot ISO 버튼을 누르십시오.

grub.cfg를 편집하거나 로그 아웃 할 필요가 없습니다.

멀티 부트 USB-QEMU


맵시 있는! 나는 이것을 나중에 시험해 볼 것이다!
Fabby

@Fabby : MBUSB의 Windows 버전과 Linux 버전이 있습니다. Windows 버전에서 ISO 만 부팅하고 USB 만 부팅 할 수는 없었습니다. Linux 버전 9.2.0은 저에게 효과적입니다.
CSCameron

2

간단한 mkusb ISO 멀티부터

다중 지속성이 필요하지 않은 경우 mkusb 플래시 드라이브에서 운영 체제 ISO를 멀티 부팅하기 쉽습니다.

mkusb를 사용하여 원하는 기본 OS ( https://help.ubuntu.com/community/mkusb)를 사용하여 영구 USB 드라이브를 만드십시오.

usbdata 파티션 sdx1에 ISO라는 이름의 폴더를 만듭니다.

이 폴더에 부팅 할 ISO를 추가하십시오.

ISO를 루프 마운트하려면 /sdx3/boot/grub/grub.cfg에 메뉴 항목을 추가하십시오.

견본:

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
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.