며칠 동안 나는 누군가가 나와 같은 문제를 겪고 있는지 알아보기 위해 여기저기서 구글링을 했습니다. 여기 내 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.efi
through를 시작할 때 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
. 이것이 당신이 겪고 있는 전체 문제의 핵심입니다(아마도 저도 그랬을 것입니다). 나는 아치 리눅스가 램디스크/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
부팅 시 시작 화면으로 표시하려는 이미지여야 합니다.
$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
create(새 부팅 항목 생성)를 나타냅니다.-d
ESP가 있는 디스크를 가리키는 것입니다.-p
해당 디스크의 파티션 번호를 가리킵니다.-L
부팅 항목에 적합한 레이블을 제공하기 위한 것입니다.-l
로더(기본적으로 eistub)를 가리킵니다. ESP의 EFI/debian 디렉토리에 있고 /efi 아래에 마운트되어 있다고 가정했습니다.
팁: 부팅 작업을 하는 동안 쉘이 efistub
있으면 매우 편리하다는 것을 알았습니다 UEFI
. efistub
사용자 정의 커널 매개변수 등을 사용하여 커널을 부팅하는 등 해당 셸에서 다양한 작업을 시도할 수 있습니다.
위의 가이드는 부트 로더의 도움 없이 EFISTUB를 부팅하는 것입니다. 여러 OS(커널)를 부팅하는 경우 부트 로더를 추가하여 다양한 efistubs
.
답변2
제 생각에는 데비안 설치 디스크를 찾아 PC에 연결하면 될 것 같습니다. 그런 다음 디스크에서 부팅하고 문제 해결 메뉴를 전달하고 vmlinuz 파일 및 기타 부팅 파일을 복구합니다.