しかし、新しいLFSシステムを起動しようとすると、Linux From Scratchはほぼ完了しました。 GRUBはシステムを起動できません:
エラー:ディスク '(hd0、)'が見つかりません。
次に出力を使用しますgrub> ls
。(hd0) (hd0, gpt4) (hd0, gpt3) (hd0, gpt2) (hd0, gpt1)
ホストシステムがUEFIとGPTを使用しているため、UEFIと一緒にGRUBを使用していることを除いて、特別なガイドラインに従いました。
以下はパーティションテーブルです。
- /dev/sda GPT
- /dev/sda1: サイズは 512MB です。 EFIシステムパーティション。 FAT32
- /dev/sda2: サイズは 16 GB です。 Linuxスワップ。 【交換】
- /dev/sda3: サイズは 64 GB です。 Linux x86_64ルート。拡張4.ホストシステム。
- /dev/sda4: サイズは 32 GB です。 Linux x86_64ルート。拡張4. LFSシステム。 sda1にgrubをインストールしました。 sda1のファイルツリーは次のとおりです。
.
├── config-5.16.9
├── EFI
│ └── LFS
│ └── grubx64.efi
├── grub
│ ├── fonts
│ ├── grub.cfg
│ ├── grubenv
│ ├── i386-pc
│ ├── locale
│ │ ├── ast.mo
│ │ ├── ca.mo
│ │ ├── ...
│ │ └── zh_TW.mo
│ └── x86_64-efi
│ ├── acpi.mod
│ ├── ...
│ └── zstd.mod
├── System.map-5.16.9
└── vmlinuz-5.16.9-lfs-11.1-systemd
内容は次のとおりですgrub.cfg
。
set default=0
set timeout=5
insmod part_gpt
insmod vfat # I've tried fat here.
set root=(hd0) #I've tried (hd0,gpt1), (hd0,gpt4), (hd0,1) .etc here.
if loadfont /boot/grub/fonts/unicode.pf2; then
set gfxmode=auto
insmod all_video
terminal_output gfxterm
fi
menuentry "GNU/Linux, Linux 5.16.9-lfs-11.1"{
linux /boot/vmlinuz-5.16.9-lfs-11.1 root=/dev/sda4 ro
}
menuentry "Firmware Setup"{
fwsetup
}
私は主に次の参考資料を参考にしました。
また、CSMサポートやレガシーなしでUEFIを有効にしました。
詳細は:
- GRUB バージョン 2.06
- LFS バージョン 11.1-systemd
- Linuxカーネルバージョン5.16.9
- セキュアブートが無効
答え1
最初に、GRUBはUEFIサービスを使用してESPにアクセスしたので、ファームウェアのサポートがなければ、ext4
GRUBはFAT32のみを読み取ることができます。ext4
後で読むことができますが、insmod ext2
そのためにはext2.mod
最初に読む必要があります。
さらに機能を得るには、GRUBは明らかにモジュールを/grub/x86_64-efi
ロードできる必要があります/dev/sda1
。ただし、これを行うには、GRUBが2つの重要な変数であることをroot
正しく設定する必要がありますprefix
。
あなたの場合、set root=(hd0,gpt1)
ディスクが1つしかないと仮定してください。ディスクが複数ある場合、正しいhdN
数を予測するのは難しいかもしれませんので、最新のディストリビューションではsearch --fs-uuid --set=root <UUID-of-the-filesystem>
directの代わりに構文を使用することを好むことがよくありますset root=
。
prefix
に設定する必要があります。 GRUB変数の現在の状態を表示するには、(hd0,gpt1)/grub
GRUBプロンプトでset
パラメータなしでコマンドを使用します。
GRUBは一度に1つのファイルシステムにのみ集中できるため、として/dev/sda1
マウントし/boot
てからGRUBをroot
に設定すると(hd0,gpt1)
表示されます。したがって、引用されたすべてのパスからこれを省略する必要があります。/boot
/
/boot
sda1
ext4ファイルシステムから何かをロードする必要がある場合は、次の3つの/dev/sda4
手順を実行する必要があります。
insmod ext2
whileroot
とprefix
still上記のように設定set root=(hd0,gpt4)
GRUBフォーカスをLFSルートファイルシステムに切り替える- 必要なものをロードしてください。これは
/boot
マウントポイントにすぎないことを忘れないでくださいsda4
。 Linuxカーネルは後でマウントポイントとして使用します/dev/sda1
が、GRUBでは何もしません。
したがって、修正する必要がある行は次grub.cfg
のとおりです。
...
#set root=(hd0) # not just the disk, but the partition/filesystem GRUB will focus on
set root=(hd0,gpt1)
...
#if loadfont /boot/grub/fonts/unicode.pf2; then # GRUB will see /boot as /
if loadfont /grub/fonts/unicode.pf2; then
...
# linux /boot/vmlinuz-5.16.9-lfs-11.1 root=/dev/sda4 ro # same here, also fix the kernel filename
linux /vmlinuz-5.16.9-lfs-11.1-systemd root=/dev/sda4 ro
...
この/boot/grub/i386-pc
ディレクトリはUEFIシステムでは役に立ちません。自由に削除してください。
この/boot/grub/fonts/unicode.pf2
ファイルは現在sda1
。