数日間、私はグーグルであらゆる場所を検索し、私と同じ問題を抱えている人がいないか調べました。これが私の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 の bitbinary ガイド
しかし、どれも機能しませんでした。
問題 1:EFI/Debian/vmlinuz.efi
私のファームウェアは(ただし、最初にDebianをインストールしたときにはrEFInd efiアプリとgrubは見つかりました)を見つけられ ませんでした。
問題2:vmlinuz.efi
を 起動するとrEFInd
、initramfs プロンプトと、ルートをマウント/見つけることができなかったというエラーが表示され、ブート プロセスが停止します。
また
cat /proc/cmdline
私のはエコーしません/proc/cmdline
が、ルートマウントのオプションが指定されていない一般的なものです
問題3:
私が使用したガイドどおりですefibootmgr
が、再起動するたびに新しいエントリが削除されます。
私は (U)EFI の世界では比較的初心者ですが、これがうまく機能するようになればと本当に願っています。今のところアイデアがほとんどないので、何か役立つことをご存知でしたら、ぜひ教えてください。
ありがとう。
答え1
この質問は古いものですが、回答がないので、最近、上記の構成で Arch Linux システムを起動したので、その方法を書いておきます。私の仕様:
OS : arch Linux (mainline kernel, Linux-zen kernel, linux-clear kernel).
System : HP laptop with UEFI 2.
それとは別に、私は自分のキーを使用してセキュア ブートを設定しようとしていました (これにより、設定がさらに複雑になりました)。ただし、ここではその部分については触れません。
initramfs
まず最初に、 を正しく設定する必要がありますhooks
。これが、あなたが抱えている問題の要点です (おそらく、私もそうでした)。私は、Arch 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 ).
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
作成を意味します(新しいブートエントリを作成します)-d
ESP があるディスクを指すためのものです。-p
そのディスクのパーティション番号を指します。-L
ブート エントリに適切なラベルを付けるためです。-l
ローダー (基本的には efistub) を指します。これは ESP の EFI/debian ディレクトリの下に配置され、/efi の下にマウントされていると想定しました。
ヒント: 起動中にefistub
、シェルがあると非常に便利だとわかりました。カスタム カーネル パラメータを使用してUEFI
カーネルを起動するなど、シェルからさまざまなことを試すことができます。efistub
上記のガイドは、ブートローダーを使用せずに EFISTUB を起動する方法です。複数の OS (カーネル) を起動する場合は、異なる OS を管理するためにブートローダーを追加できますefistubs
。
答え2
Debian インストール ディスクを見つけて PC に接続すれば、それが可能だと思います。次に、ディスクから起動し、トラブルシューティング メニューと回復 vmlinuz ファイルおよびその他の起動ファイルを渡します。