며칠 동안 저와 같은 문제를 겪고 있는 사람이 있는지 여기저기 찾아다녔습니다. 이것은 내 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의 공식 데비안 위키 그리고 Debian 및 efistub용 비트 바이너리 가이드
그러나 그들 중 누구도 작동하지 않습니다.
질문 1:
내 펌웨어를 찾을 수 없습니다 EFI/Debian/vmlinuz.efi
(그러나 rEFInd efi 앱을 찾았고 첫 번째 Debian 설치에서 grub을 찾았습니다).
질문 2:
부팅이 vmlinuz.efi
완료 되면 rEFInd
부팅 프로세스가 중지되고 루트 디렉터리를 마운트/찾을 수 없다는 오류와 함께 initramfs 프롬프트가 표시됩니다.
반품
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
. 그것이 당신이 겪고 있는 전체 문제의 핵심입니다(아마도 저도 그랬을 것입니다). 나는 아치 리눅스가 어떻게 ramdisk/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 ).
BuildEFISTUB
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
부팅 시 시작 화면으로 표시하려는 이미지여야 합니다.
$EFISTUB
linuxx64.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
위의 예에서:
-c
만들기(새 시작 항목 만들기)를 나타냅니다.-d
ESP가 있는 디스크를 가리키는 데 사용됩니다.-p
이 디스크의 파티션 번호를 가리킵니다.-L
시작 항목에 적절한 레이블을 제공하는 데 사용됩니다.-l
로더(기본적으로 efistub)를 가리킵니다. ESP의 EFI/debian 디렉토리에 있고 /efi 아래에 설치되어 있다고 가정합니다.
팁: 시작할 때 쉘을 사용하는 것이 매우 편리하다는 efistub
것을 알았습니다 . UEFI
사용자 정의 커널 매개변수를 사용하여 커널을 부팅하는 것을 포함하여 이 셸에서 시도할 수 있는 많은 작업이 있습니다 efistub
.
위 가이드는 부트로더 도움말 없이 EFISTUB를 부팅하기 위한 것입니다. 부팅할 운영 체제(커널)가 여러 개 있는 경우 부트 로더를 추가하여 다양한 efistubs
.
답변2
제 생각에는 데비안 설치 디스크를 찾아서 PC에 연결하면 될 것 같습니다. 그런 다음 디스크로 부팅하고 문제 해결 메뉴를 진행하여 vmlinuz 파일과 기타 시작 파일을 복원합니다.