EFISTUB 구축

EFISTUB 구축

며칠 동안 나는 누군가가 나와 같은 문제를 겪고 있는지 알아보기 위해 여기저기서 구글링을 했습니다. 여기 내 Lenovo Z50-70의 Linux 커널이 있습니다(중요할 수도 있습니다).

 $ uname -a
Linux Z50-Debian 4.7.0-1-amd64 #1 SMP Debian 4.7.8-1 (2016-10-19) x86_64 GNU/Linux

 $ lvdisplay  |grep -i path
  LV Path                /dev/Debian/Home
  LV Path                /dev/Debian/Root
  LV Path                /dev/Debian/Swap

# gdisk /dev/sda -l |grep 0
GPT fdisk (gdisk) version 1.0.1
Disk identifier (GUID): 4A75B640-D8A2-03A2-906D-9D9228B6E800
Partitions will be aligned on 2048-sector boundaries
Total free space is 3707 sectors (1.8 MiB)
   1            2048         3653631   1.7 GiB     2700  Basic data partition
   2         3653632         4601855   463.0 MiB   EF00  EFI system partition
   3         4601856         6752255   1.0 GiB     EF00  Basic data partition
   4         6752256         7014399   128.0 MiB   0C01  Microsoft reserved ...
   5         7014400       907063665   429.2 GiB   0700  Basic data partition
   6       907065344       908787711   841.0 MiB   2700  
   7       908787712       910155775   668.0 MiB   EF00  
   8       910155776       953745407   20.8 GiB    8E00  Linux
   9       953745408       976773119   11.0 GiB    2700  Basic data partition

efi-stub(커널 UEFI 자체 부트로더)를 사용하기 위한 두 가지 가이드를 따랐습니다.

efistub의 공식 데비안 위키 그리고 데비안과 efistub에 대한 비트바이너리 가이드

하지만 그들 중 누구도 일하지 않았습니다.

문제 1: 내 펌웨어가 찾을 수 없습니다 EFI/Debian/vmlinuz.efi(하지만 데비안을 처음 설치할 때 rEFInd efi 앱과 grub을 찾았습니다)

문제 2:vmlinuz.efithrough를 시작할 때 rEFIndinitramfs 프롬프트와 함께 부팅 프로세스가 중지되고 루트를 마운트/찾을 수 없다는 오류가 발생합니다.

또한

cat /proc/cmdline 

my 를 에코하지 않지만 /proc/cmdline루트 마운트를 위한 지정된 옵션이 없는 일반적인 것입니다.

문제 3: 내가 사용한 가이드와 동일 efibootmgr하지만 재부팅할 때마다 새 항목이 삭제됩니다.

저는 (U)EFI 세계를 처음 접했지만 이 작업을 수행할 수 있었으면 정말 좋겠습니다. 현재로서는 아이디어가 거의 없기 때문에 도움이 될 수 있는 내용을 알고 계시다면 알려주세요!

감사합니다.

답변1

이 질문은 오래되었지만 대답이 없고 최근에 언급된 구성으로 내 archlinux 시스템을 부팅했기 때문에 어떻게 했는지 적어보겠습니다. 내 사양 :

OS : arch Linux (mainline kernel, Linux-zen kernel, linux-clear kernel).
System : HP laptop with UEFI 2.

그 외에도 나는 내 키를 사용하여 보안 부팅을 설정하려고 했습니다(설정이 더욱 복잡해졌습니다). 하지만 여기서는 그 부분을 다루지 않겠습니다.

가장 먼저 해야 할 일은 initramfs올바른 hooks. 이것이 당신이 겪고 있는 전체 문제의 핵심입니다(아마도 저도 그랬을 것입니다). 나는 아치 리눅스가 램디스크/initramfs를 구축하는 방법에 대해서만 경험했습니다. 데비안(또는 사용 중인 다른 배포판)용 프로세스를 변환해야 할 수도 있습니다.

나는 makinitcpio initramfs 구축 프로세스에서 사용할 수 있는 세 가지 후크로 시작했습니다.

base hook ( this is the main and necessary hook )
udev hook ( it does the detection of the devices  of the system including the hard disk and root filesystem ).
LVM hook ( since you have LVM, this hooks would include the device mapper and set up the LVM volumes ).

EFISTUB 구축

binutils 패키지의 objcopy 도구를 사용하십시오.

objcopy \
    --add-section .osrel="/etc/os-release"                          --change-section-vma .osrel=0x20000    \
    --add-section .cmdline=<(echo -n "${cmdline}")                  --change-section-vma .cmdline=0x30000  \
    --add-section .splash="${SPLASH}"                               --change-section-vma .splash=0x40000   \
    --add-section .linux="${linux}"                                 --change-section-vma .linux=0x2000000  \
    --add-section .initrd=<(cat "${INITRD_PREPEND[@]}" "${initrd}") --change-section-vma .initrd=0x3000000 \
    "${EFISTUB}" "${output}"
  wait $!

위 명령은 기본적으로 커널, iniramfs 및 커널 매개변수를 가져와 펌웨어(UEFI)에서 직접 부팅할 수 있는 단일 EFISTUB로 변환합니다.

다음은 $cmdline기본적으로 커널 매개변수이며 최소한 루트 경로를 포함해야 합니다. 예를 들어 root=/dev/Debian/root $SPLASH부팅 시 시작 화면으로 표시하려는 이미지여야 합니다.

$EFISTUBlinuxx64.efi.stub와 함께 제공되는 일반 제품입니다 systemd. 에서는 일반적으로 디렉토리 Arch Linux아래에 배치됩니다 ./use/lib/systemd/efi/

$output파일을 출력하려는 ​​위치입니다(펌웨어가 이를 감지할 수 있도록 분명히 ESP(EFI 시스템 파티션)에 있어야 합니다).

그런 다음 의 도움으로 efibootmgr새로 생성된 부팅 항목을 만들 수 있습니다 EFISTUB.

# efibootmgr -c -d /dev/sda -p 2 -L "Debian EFISTUB" -l /efi/EFI/debian/linux-efi.efi 

위의 예에서:

  • -ccreate(새 부팅 항목 생성)를 나타냅니다.
  • -dESP가 있는 디스크를 가리키는 것입니다.
  • -p해당 디스크의 파티션 번호를 가리킵니다.
  • -L부팅 항목에 적합한 레이블을 제공하기 위한 것입니다.
  • -l로더(기본적으로 eistub)를 가리킵니다. ESP의 EFI/debian 디렉토리에 있고 /efi 아래에 마운트되어 있다고 가정했습니다.

팁: 부팅 작업을 하는 동안 쉘이 efistub있으면 매우 편리하다는 것을 알았습니다 UEFI. efistub사용자 정의 커널 매개변수 등을 사용하여 커널을 부팅하는 등 해당 셸에서 다양한 작업을 시도할 수 있습니다.

위의 가이드는 부트 로더의 도움 없이 EFISTUB를 부팅하는 것입니다. 여러 OS(커널)를 부팅하는 경우 부트 로더를 추가하여 다양한 efistubs.

답변2

제 생각에는 데비안 설치 디스크를 찾아 PC에 연결하면 될 것 같습니다. 그런 다음 디스크에서 부팅하고 문제 해결 메뉴를 전달하고 vmlinuz 파일 및 기타 부팅 파일을 복구합니다.

관련 정보