数日間、私と同じ問題を抱えている人がいるのか、あちこち探していました。これは私の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ブートローダ)を使用するために、2つのガイドに従いました。
efistubの公式Debian Wiki そして Debianおよびefistub用のビットバイナリガイド
しかし、それらのどれも動作しません。
質問1:
私のファームウェアが見つかりませんでしたEFI/Debian/vmlinuz.efi
(しかし、rEFInd efiアプリを見つけ、最初のDebianインストールでgrubを見つけました)。
質問2:
起動がvmlinuz.efi
完了すると、rEFInd
起動プロセスが停止し、ルートディレクトリをマウント/見つからないというエラーが表示されます。
返品
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
。それがあなたが経験している問題全体の中心です(おそらく私もそうでした)。私はアーチLinuxがどのようにramdisk / initramfsを構築するのか理解しています。プロセスをDebian(または使用している他のディストリビューション)に変換する必要があるかもしれません。
私はビルドプロセス中に利用可能なmakinitcpio initramfsの3つのフックから始めました。
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
私の考えでは、Debianのインストールディスクを見つけてPCに接続するだけです。次に、ディスクから起動し、トラブルシューティングメニューに進み、vmlinuzファイルと他の起動ファイルを復元します。