저는 USB 스틱에 여러 개의 Linux 배포판을 보관하고 각 배포판에 대해 grub.cfg 항목을 작성하여 관리합니다. 다른 배포판은 스틱 부팅을 유지하고 잘 실행되지만(다른 분들도 있는 것 같더라구요)Debian Jessie(8.x)에 문제가 발생하기 시작했습니다. Debian Netinst는 debian-installercurses 인터페이스로 부팅하지만, iso 경로가 grub.cfg의 커널 줄에 제공되어 있어도 올바른 데비안 iso 파일을 검색하려고 시도합니다.
USB 스틱에서 "debian-8.2.0-amd64-i386-netinst.iso"를 부팅해 보았지만 부분적으로 성공했습니다. 먼저 다음 명령을 사용하여 USB 스틱을 설정했습니다.ArchWiki에서 USB 멀티부팅 지침을 찾을 수 있습니다..
다음은 USB 스틱의 단순화된 파일 및 폴더 구조와 관련 grub.cfg 항목입니다.
USBROOT/
----boot/
----grub/
----grub.cfg
----(other grub paraphernalia)
----iso/
----debian/
----debian-8.2.0-amd64-i386-netinst.iso
----initrd.gz (special initrd)
iso에 initramfs가 있지만 내가 잘 이해할 수 없는 이유로 데비안이 제대로 부팅되는 것을 허용하지 않습니다. 지금까지 제공한 두 링크에서 이에 대해 간략하게 설명합니다.
이제 grub.cfg 항목이 있습니다. 나는 이것이 i386/amd64 다중 아키텍처 ISO라는 것을 알고 있지만 단순화를 위해 64비트 부분에만 집중하겠습니다. 64비트 부분을 알아낼 수 있다면 i386에 대한 또 다른 항목을 쉽게 생성할 수 있을 것입니다.
probe -u $root --set=rootuuid
set imgdevpath="/dev/disk/by-uuid/$rootuuid"
menuentry 'Debian 8.2 Multiarch' {
set isoname='debian-8.2.0-amd64-i386-netinst.iso'
set isopath='/boot/iso/debian'
set isofile=${isopath}/${isoname}
set initrdfile=${isopath}/initrd.gz
loopback loop $isofile
linux (loop)/install.amd/vmlinuz iso-scan/ask_second_pass=true iso-scan/filename=${imgdevpath}/${isofile} config quiet
initrd ${initrdfile}/initrd.gz
}
그런데: initrd 줄을 다음으로 변경하세요.
initrd ${initrdfile}
grub(내 생각에는)이 오류를 발생시키도록 하세요. Grub은 잠시 멈췄다가 데비안이 부팅을 시도하고 즉시 커널 패닉이 발생했습니다. 예상대로 initramfs를 찾을 수 없었기 때문입니다. 하지만 블록코드 예시에 표시된 경로를 그대로 적어보면 이런 일이 발생하지 않습니다. 전체 경로를 수동으로 작성하는 대신 설정된 변수를 사용하여 경로를 지정할 때 오류가 발생하는 이유는 무엇입니까? 하지만 내 주요 질문은 다음과 같습니다.
어떤 커널 부팅 매개변수를 제공해야 합니까?이대로는 없을 거야검색 수행iso는 내가 지정한 경로에 있습니다. 설치 프로그램은 결국 검색을 통해 올바른 ISO를 찾았지만 왜 검색을 해야 합니까?
나는 그것이 리눅스 제품군과 관련이 있다고 거의 확신합니다.
linux (loop)/install.amd/vmlinuz iso-scan/ask_second_pass=true iso-scan/filename=${imgdevpath}/${isofile} config quiet
다음과 같은 변경 사항을 포함하여 최소 20가지 테마 변형을 시도했습니다.
iso-scan/filename=${isofile}
findiso=${imgdevpath}/${isofile}
findiso=${isofile}
편집: initrd 문제를 해결했습니다. $initrdfile을 정의할 때 작은따옴표가 있었습니다. findiso/iso-scan/모든 문제가 지속됩니다.
답변1
netinst를 부팅하는 중이므로 ISO를 완전히 건너뛰고 부팅할 수 있습니다.커널+initrdUSB 파일 시스템에서 직접. 이것은 네트워크 부팅 di이며 데비안 저장소의 나머지 구성 요소만 로드합니다.
iso 검색과 관련된 프로세스는 다음과 같습니다.
- grub은 ISO를 로드하고 커널과 initrd를 메모리로 읽습니다(귀하의 경우 initrd는 USB 드라이브로 추출되었습니다).
- grub은 커널에 제어권을 부여합니다
- 커널은 initrd의 init 스크립트에 제어권을 넘깁니다.
- init 스크립트는 debian-installer에 제어권을 넘깁니다.
- 이것iso-scan di 모듈
iso-scan/filename
사용 가능한 모든 드라이브를 마운트하고 제공된 드라이브를 찾으세요. - ISO가 발견되고 루프백 설치가 발견되면 데비안 설치 프로그램은 프로세스를 계속합니다.
(섹션 6.3.1.4 참조)설치 문서자세한 내용은)
이와 같은 경로를 제공하면 이는 블록 장치이고 파일이 상주할 수 있는 마운트된 파일 시스템이 아니기 /dev/disk/by-uuid/UUID/debian/debian8.iso
때문에 의미가 없습니다 ./dev/disk/by-uuid/UUID
iso-scan으로 검색 범위를 좁히려면 iso-scan/filename을 사용하는 대신 * shared/ask_device=manual
및 값을 미리 설정할 수 있습니다 shared/enter_device=/dev/disk/UUID
(커널 라인에 추가하기만 하면 됩니다).
이것이 grub.cfg여야 합니다:
set imgdevpath="/dev/disk/by-uuid/UUID"
menuentry 'Debian 8.2 Multiarch' {
set isofile='/boot/iso/debian/debian-8.2.0-amd64-i386-netinst.iso'
loopback loop $isofile
linux (loop)/install.amd/vmlinuz iso-scan/filename=$isofile shared/ask_device=manual shared/enter_device=$imgdevpath no-prompt no-eject
initrd (loop)/install.amd/initrd.gz
}
실제로 이것을 테스트하지는 않았으며 이전 데비안 버전의 유사한 설정에서 복사하여 붙여넣고 있습니다.
이것으로 시작하고 작동하지 않는 경우에만 다른 initrd를 시도하는 것이 좋습니다. UUID 프로브를 읽기 전에 "수동으로" 작동하는지 확인하십시오.
*이것들은 제가 앞서 "팁"이라고 불렀던 것입니다. 우분투나 다른 배포판에 대한 팁이 기억나는 것 같아요
답변2
이 솔루션을 사용해 보세요.
grub.cfg
와 일치하도록 파일을 편집하세요 mini.iso
. 모든 mini.iso
건물은 고유합니다.
menuentry "Debian Stable | Testing | Experimental AMD64 Netinst" {
set isoname="mini.iso"
set isopath="/boot/iso/debian/amd64"
set isofile="${isopath}/${isoname}"
echo "Using ${isoname}..."
loopback loop $isofile
linux (loop)/linux priority=low vga=788 ---
initrd (loop)/initrd.gz
}
menuentry "Debian Stable | Testing | Experimental i386 Netinst" {
set isoname="mini.iso"
set isopath="/boot/iso/debian/i386"
set isofile="${isopath}/${isoname}"
echo "Using ${isoname}..."
loopback loop $isofile
linux (loop)/linux priority=low vga=788 ---
initrd (loop)/initrd.gz
}
여기에서 mini.iso
귀하의 아키텍처에 맞는 버전을 다운로드하세요.
행운을 빌어요.