USB를 통해 부팅하려면 Debian Netinst(작성 당시 8.2)에 대한 grub.cfg 메뉴 항목을 어떻게 작성합니까?

USB를 통해 부팅하려면 Debian Netinst(작성 당시 8.2)에 대한 grub.cfg 메뉴 항목을 어떻게 작성합니까?

저는 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귀하의 아키텍처에 맞는 버전을 다운로드하세요.

행운을 빌어요.

관련 정보