시스템 사양 선택 | 2번 |
---|
안녕하세요
야크트74님의 rEFInd 활용글을 보고 rEFInd를 활용하여 제 설정을 공유드립니다.
간단하게 되어 있고 몇몇 고생한 내용을 정리해 추후에 동일한 작업할때 참조목적으로 작성합니다.
참고로 OC/Windows Chainload는 야크트74님 글에도 잘나와있습니다.
여기서는Grub을 활용한 팁을 작성합니다.
rEFInd ?
- https://www.rodsbooks.com/refind/index.html
- rEFInd 를 쓰면 다른 bootloader를 불러오기 쉽고 efi 프로그램도 실행 가능합니다.
(야크트74님 글 참고)
- 강력하지는 않지만 간단한 테마 (아이콘, 출력 내용 정도...) 적용 가능
- 이를 이용하여 multibooting 환경을 구성하기 쉽고 필요에 따라 각 기능을 별도로 맵핑 가능합니다.
부트로더 구성
- rEFInd를 기본 부트로더로 사용 (rEFInd를 쓰는 시점에 legacy/csm은 포기해야합니다.)
- OC로 macOS 부팅 가능하도록 설정
- bootmgfw로 Windows 부팅 가능하도록 설정
- 리눅스(크롬OS포함)의 내용은 각각 grub.cfg를 만들고 부팅 시점에 계속 변경하도록 설정
=> 이부분이 중요합니다. 여기에 중점을 둘 예정입니다.
디스크 구성 (참고)
- Disk 1 (NVME 256GB)
EFI 200MB
=> OC 설치 경로, rEFInd도 같이 설치
Macintosh HD 나머지
=> macOS 설치 (Big Sur)
- Disk 2 (SSD 256GB)
ESP 200MB
=> Bootmgfw 설지 경로
WinData
=> VHDX, WIM, Windows Data저장을 위한 경로 (참고만,,, 그냥 Native로 Windows 설치해도 무방)
LinData
=> ChromeOS, Alpine Linux 에서 사용할 파티션. 개별 설치도 무관
=> ChomeOS에서도 Loopback을 멀티 부팅을 권장하고 제가 쓰는 Alpine Linux는 Diskless 모드라 파티셔닝을 잘안합니다....
=> 이부분은 grub 사용법에 무관하게 설치 관련된거라... 알아서 하시면 됩니다.
rEFInd 구성
- 기본적인 구성은 야크트74님 글을 참고로 구성
- grub을 plugin 처럼 쓰기 위해 rEFInd 아래 추가 (prefix 변경)
- rEFInd 폴더 구성
: grub을 모듈처럼 추가
- refind.conf 파일
menuentry "macOS" {
icon \EFI\refind\themes\rEFInd-minimal-black\icons\os_mac.png
volume EFI
loader \EFI\OC\OpenCore.efi
graphics on
}
menuentry "Windows" {
icon \EFI\refind\themes\rEFInd-minimal-black\icons\os_win.png
volume ESP
loader \EFI\Microsoft\Boot\bootmgfw.efi
graphics on
submenuentry "Windows VHDX Reset" {
volume EFI
loader \EFI\refind\grub\shell.efi
options "--launch fs3:\EFI\refind\grub\conf.d\grub-vhdxreset.nsh"
graphics on
}
submenuentry "Windows PE" {
volume ESP
loader \EFI\Microsoft\Boot_PE\bootmgfw.efi
graphics on
}
submenuentry "Recovery" {
volume ESP
loader \EFI\Microsoft\Boot_Recovery\bootmgfw.efi
graphics on
}
}
menuentry "Chrome OS" {
icon \EFI\refind\themes\rEFInd-minimal-black\icons\os_chromeos.png
volume EFI
loader \EFI\refind\grub\shell.efi
options "--launch fs3:\EFI\refind\grub\conf.d\grub-chromeos.nsh"
graphics on
}
menuentry "Alpine Linux" {
icon \EFI\refind\themes\rEFInd-minimal-black\icons\os_alpine.png
volume EFI
loader \EFI\refind\grub\shell.efi
options "--launch fs3:\EFI\refind\grub\conf.d\grub-alpine.nsh"
graphics on
}
menuentry "Tools" {
icon \EFI\refind\themes\rEFInd-minimal-black\icons\os_refind.png
volume EFI
loader \EFI\refind\tools\shell.efi
graphics off
submenuentry "Grub2" {
volume EFI
loader \EFI\refind\grub\shell.efi
options "--launch fs3:\EFI\refind\grub\conf.d\grub.nsh"
graphics off
}
submenuentry "Super Grub2 Disk" {
volume EFI
loader \EFI\refind\tools\super_grub2_disk.efi
graphics off
}
submenuentry "RU.efi" {
volume EFI
loader \EFI\refind\tools\RU.efi
graphics off
}
}
제가 쓰는 Config 인데 Grub은 하나고 grub.cfg 에 멀티 부팅을 설정하면 rEFInd 멀티 부팅 구성의 의미가 없어지죠...
그래서 Grub 한개에 CFG를 여러개 만들고 부팅시마다 변경해보자 해서 shell.efi 에 주목했습니다.
shell.efi 는 FAT32의 경우 안정적으로 READ, WRITE가 가능하고 nsh 를 실행할수 있어 부트로더 로딩 전에 스크립트 실행하고 부트로더를 띄울수 있습니다.!!!
이를 활용하면 무궁무진한 로딩이 가능해지네요.
Grub 자체가 강력한데 여기에 shell.efi 를 이용한 스크립트 실행,부트 로더를 실행하는 것이죠.
이를 활용하면 touch로 파라미터 처럼 쓸수도 있고 (전 이것보다는 cfg 분리를 선호 합니다.) 아무튼 여러가지 작업이 가능합니다.
(혹시 이런 바보 같고 무식한 방식 말고 Grub2_x64.efi 에 Argument를 전달할수 있는 방법이 있으면 알려주세요....)
예를 들어 Linux 로딩을 하는 grub.cfg는 grub/conf.d/grub-alpine.cfg로 만들고 이를 부트로드 (Grub) 로딩전 grub/grub.cfg로 복사하고 grub.cfg를 띄우던가 아예 touch로 특정 파일을 만들어서 grub.cfg에서 if 조건으로 분기로 여러가지 작업이 가능해집니다.
혹시 모들 Debugging을 위해 개별 cfg를 source 로 가져오는 grub.cfg도 등록하면 금상 첨화겠죠.
간단한 linux 로딩을 샘플로 보면
파일은 설정 파일 grub/conf.d/grub-alpine.cfg 를 만들고 이를 실행할 nsh 를 grub/conf.d/grub-alpine.nsh를 만들고 refind.conf에서는 shell.efi 로 nsh 를 실행해 주는 것입니다.
아래내용을 보시면 워낙 간단해서 내용을 쉽게 아실거라 생각됩니다.
이해가 안되는 부분은 제가 아는한 설명 드릴께요.
Linux Loading 샘플
grub-alpine.cfg
menuentry "Alpine Linux" {
search --no-floppy --set=root --file /MULTIBOOT/Alpine/boot/vmlinuz-lts
linux /MULTIBOOT/Alpine/boot/vmlinuz-lts modules=loop,squashfs,sd-mod,usb-storage quiet \
alpine_dev=sda4:ext4 modloop=/MULTIBOOT/Alpine/boot/modloop-lts \
pcie_aspm=off \
i8042.nopnp=1 pci=nocrs
initrd /MULTIBOOT/Alpine/boot/initramfs-lts
}
menuentry "Alpine Linux (debug mode)" {
search --no-floppy --set=root --file /MULTIBOOT/Alpine/boot/vmlinuz-lts
linux /MULTIBOOT/Alpine/boot/vmlinuz-lts modules=loop,squashfs,sd-mod,usb-storage \
alpine_dev=sda4:ext4 modloop=/MULTIBOOT/Alpine/boot/modloop-lts \
pcie_aspm=off \
i8042.nopnp=1 pci=nocrs
initrd /MULTIBOOT/Alpine/boot/initramfs-lts
}
if keystatus --shift; then
set timeout=30
else
set default=0
set timeout_style=hidden
set timeout=0
fi
grub-alpine.nsh
@echo -off
set -v GrubPrefix \EFI\refind\grub
set -v GrubEfi grubx64.efi
set -v GrubConfd conf.d
set -v GrubSrcCfg grub-alpine.cfg
set -v GrubCfg grub.cfg
set -v FsIndex 0
for %b run (0 10)
set -v FsIndex %b
if exist FS%FsIndex%:%GrubPrefix%\%GrubConfd%\%GrubSrcCfg% then
FS%FsIndex%:
goto CFGFOUND
endif
endfor
goto EXITSCRIPT
:CFGFOUND
cp FS%FsIndex%:%GrubPrefix%\%GrubConfd%\%GrubSrcCfg% FS%FsIndex%:%GrubPrefix%\%GrubCfg%
cls
FS%FsIndex%:%GrubPrefix%\%GrubEfi%
:EXITSCRIPT
echo "Exiting Script."
refind.conf
menuentry "Alpine Linux" {
icon \EFI\refind\themes\rEFInd-minimal-black\icons\os_alpine.png
volume EFI
loader \EFI\refind\grub\shell.efi
options "--launch fs3:\EFI\refind\grub\conf.d\grub-alpine.nsh"
graphics on
}
추가
1. Grub은 prefix variable이 중요한데 해당 경로의 cfg, module, font를 import합니다.
해당 값은 grub-install할때 설정한 --boot-directory 가 prefix입니다.
첨부된 grub은 ubuntu 최신 버전으로 /EFI/refind/grub을 prefix 로 지정했습니다.
2. 제가 쓰는 작업 내용 중 Windows Reset 이 가장 만족 스럽습니다.
전 VHDX로 Windows 를 쓰는데 VHDX의 Child를 깨끗한 상태로 백업을 만들어 놓고
alpine linux 의 initrd 시점에 ntfs-3g로 깨끗한 Child를 bcd에 등록한 vhdx로 복사하면 리셋이 되는 구조입니다.
첨부한 grub/conf.d 아래 샘플이 있습니다.
(아주 위험한 방식임을 알지만 어처피 macOS, ChromeOS, Linux 주로 쓰고 Windows는 거의 안써서 날라가면 새로 설치...)
3. tools/shell.efi 와 grub/shell.efi 는 다른 파일 입니다.
tools/shell.efi 는 출력이 잘되고 grub/shell.efi는 clover에서 추출한 Shell64.efi 인데 출력이 안됩니다...
출력이 안되서 스크립트 실행이 오히려 깔끔해지네요...
4. rEFind는 업데이트 하기힘들어서 update_refind.sh 만들었습니다.
이거 실행하면 최신버전으로 업데이트 해줍니다. 물론 조심해야합니다.
결론
- 가장 좋은 방법은 아니지만 Chainloading에 강하고 깔금한 테마를 쓸수 있는 rEFInd와
강력한 기능을 가진 grub을 조합하여 여러가지 쓸수있어서 강력한 조합이 가능해지네요.
- 혹시 grub.efi 에 grub.cfg를 지정할수 있는 방법이 있으면 알려주세요....
- 참고 : 야크트74님의 rEFInd 글
https://x86.co.kr/bootloader/5797622
https://x86.co.kr/bootloader/5806903
https://x86.co.kr/bootloader/5807253
https://x86.co.kr/bootloader/5851955
EFI\Microsoft 폴더가 W10EFI 파티션에 있었는데, W10E 파티션에 있는 것으로 착각해서 발행한 문제였습니다. ^^;
[그림1]
노란박스처럼 "volume W10E" 를 "volume W10EFI" 로 수정하니, 위의 그림처럼 잘 작동했습니다. ^^
volume 을 uuid 대신에 볼륨명으로 표시할 수 있으니, 간편해서 좋네요.
"님의 댓글"
이 댓글을 신고 하시겠습니까?
제목 | 조회 수 | 날짜 | 글쓴이 |
---|---|---|---|
macOS Sequoia 15.0.1 24A348 정식버젼 고스트 이미지 OC 1.0.2 ft: 전체공개 +28 | 821 | 24.10.1121:10 | 좌절금지 |
오픈코어 1.0.2 +22 | 546 | 24.10.0900:22 | 줌바이퍼 |
[중급편] 노트북 해킨 +16 | 1365 | 24.07.1219:19 | Stultus |
macOS Ventura 13.7 22H123 정식버젼 고스트 이미지 OC 1.0.1 ft: 전체 공개 +17 | 560 | 24.09.1917:09 | 좌절금지 |
macOS Sonoma 14.7 23H124 정식버젼 고스트 이미지 OC 1.0.1 ft: 전체공개 +31 | 890 | 24.09.1723:58 | 좌절금지 |
[초급편] 문제 스스로 해결하기 +20 | 3975 | 24.03.2920:07 | Stultus |
[입문편] 첫 해킨 길라잡이 +40 | 5034 | 24.01.1218:54 | Stultus |
[필독 - 안정화] macOS 해킨토시 설치 후 안정화 작업 목록 및 글타래 모음 총정리 📋 +67 | 5.1만 | 23.01.0913:39 | shl628 |
Hot AMD Sequoia용 AppleALC 1.9.2 +3 | 37 | 24.10.2319:04 | 사노라맨 |
Hot OCLP로 지원되지 않는 기기/dGPU를 사용하는 해킨토시의 사이드카 품질 문제 해결방법 +1 | 20 | 24.10.2321:29 | 해킨도전자 |
0 | 24.10.2322:26 | 뿌엥 | |
20 | 24.10.2321:29 | 해킨도전자 | |
37 | 24.10.2319:04 | 사노라맨 | |
462 | 24.10.1412:27 | shl628 | |
599 | 24.10.1316:00 | 수박 | |
324 | 24.10.1222:56 | Stultus | |
821 | 24.10.1121:10 | 좌절금지 | |
407 | 24.10.1115:53 | 수박 | |
546 | 24.10.0900:22 | 줌바이퍼 | |
1365 | 24.07.1219:19 | Stultus | |
1176 | 24.10.0500:31 | 줌바이퍼 | |
564 | 24.10.0410:49 | Tamy | |
733 | 24.09.2923:48 | 머트 | |
623 | 24.09.2822:28 | 머트 | |
448 | 24.09.2808:22 | Tamy | |
879 | 24.09.2321:32 | Stultus | |
990 | 24.09.2210:59 | 좌절금지 | |
627 | 24.09.2203:23 | 누림어멈 | |
1164 | 24.09.1919:17 | 좌절금지 | |
560 | 24.09.1917:09 | 좌절금지 | |
496 | 24.09.1813:37 | Stultus | |
890 | 24.09.1723:58 | 좌절금지 | |
592 | 24.09.1722:40 | 좌절금지 | |
450 | 24.09.1717:13 | 맥가즈아 | |
558 | 24.09.1708:13 | 김경석 | |
226 | 24.09.1617:47 | Panictosh | |
760 | 24.09.1504:35 | Tamy | |
580 | 24.09.1319:18 | Stultus | |
694 | 24.09.1019:44 | 치토 | |
482 | 24.09.0118:13 | 머핀X | |
451 | 24.09.0112:54 | 해킨도전자 | |
537 | 24.08.3115:34 | 머핀X | |
300 | 24.08.2601:42 | 화정큐삼 | |
300 | 24.08.2422:59 | 하나브 | |
316 | 24.08.2316:25 | 화정큐삼 | |
411 | 24.08.1810:56 | CanBe | |
358 | 24.08.1800:04 | 화정큐삼 | |
297 | 24.08.1722:03 | 화정큐삼 | |
197 | 24.08.1710:14 | jbhlyk | |
309 | 24.08.1622:06 | Stultus | |
214 | 24.08.1511:16 | hackillious | |
163 | 24.08.1421:30 | 세유니 | |
416 | 24.08.1419:58 | Stultus | |
375 | 24.08.1311:26 | 오디세이 | |
263 | 24.08.1115:46 | 좌절금지 | |
184 | 24.08.1111:21 | 티타보르 | |
231 | 24.08.1022:46 | Stultus | |
523 | 24.08.1022:10 | 오디세이 | |
166 | 24.08.1019:05 | jbhlyk | |
193 | 24.08.0923:20 | RogerT | |
336 | 24.08.0717:18 | 좌절금지 | |
129 | 24.08.0609:17 | RogerT | |
568 | 24.08.0606:14 | 줌바이퍼 | |
86 | 24.08.0523:34 | jbhlyk | |
260 | 24.08.0521:10 | 수인과윤슈 | |
880 | 24.08.0521:08 | 좌절금지 | |
603 | 24.08.0221:07 | Stultus | |
389 | 24.07.3019:12 | Tamy | |
340 | 24.07.2915:37 | 해킨도전자 | |
272 | 24.07.2813:52 | june119 | |
301 | 24.07.2112:43 | Stultus | |
4030 | 23.05.0502:19 | BlueGuerrilla | |
3727 | 21.08.0213:10 | 김태국 | |
275 | 24.07.1122:47 | Stultus | |
211 | 24.07.1020:44 | Stultus | |
250 | 24.07.0921:44 | Stultus | |
371 | 24.07.0820:57 | Stultus | |
198 | 24.07.0811:28 | 의정이 | |
381 | 24.07.0721:25 | Stultus | |
357 | 24.07.0604:41 | bsiugr | |
645 | 24.07.0509:56 | 애플브리크 | |
2435 | 24.02.1715:21 | 광호 | |
470 | 24.06.2723:24 | 치토 | |
239 | 24.06.2617:24 | talas | |
155 | 24.06.2120:58 | 블루사탕 | |
551 | 24.06.1609:01 | gtrfxdsp | |
387 | 24.06.1401:04 | Mactopia | |
849 | 24.06.1120:40 | Stultus | |
762 | 24.06.1115:07 | 새콤칠리 | |
118만 | 23.02.2118:35 | 좌절금지 |
정보 감사드립니다. ^^
그런데, 내용이 너무 전문적이라서 저에겐 어렵네요.
위의 글중 volume 에 대한 내용을 정독하여, uuid 대신에 볼륨명을 사용하는 방법을 알아낼 생각입니다.