grub(2) ルートをハードコーディングする方法=

grub(2) ルートをハードコーディングする方法=

Debianシステム(SID)からの起動に一連の問題が発生しました。

/grub/i386-pc/normal.mod not found.

最終的に私はそれを再び得ました(fsckは/bootからLost + foundに多くの項目を移し、grub-installで置き換える必要がありました)

しかし、すべてが機能した後、さまざまなgrub-*パッケージを再インストールしました(今は紛失+発見状態の場合)。 grub.cfgで、次のような多くの違いを見つけました。

<               set root='hd2,msdos1'                                                                                                                                                                
---                                                                                                                                                                                                  
>               set root='hd0,msdos1'                                                                                                                                                                
  

                        

実際、私の/boot(および/(root))デバイスは/dev/sda(hd0)の代わりに/dev/sdc(hd2)です。一方では、どのように/なぜ変更されたのかわかりませんが、他方では/dev/sdX名が固定されておらず、あるブートから次のブートに変更される可能性があります。したがって、これらすべてを念頭に置いて、私の質問は次のとおりです。

grub.cfgに次のエントリが含まれる方法:

set root='hd2,msdos1'

(マッピングファイルなし)これは/ dev / sdcと同じですので、次回の起動時にディスクがsdbまたはsdaとして表示されるとどうなりますか?

ABTW。最初の原因は破損した/bootかもしれません。 ext2であることを確認しましたが、ext4を使用できませんか? ...これはデフォルトではありませんか? [抜け穴985470 ]

答え1

次のように見えます。

    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1'  f19c92f4-9ead-4207-b46a-723b7a2c51c8
    else
      search --no-floppy --fs-uuid --set=root f19c92f4-9ead-4207-b46a-723b7a2c51c8
    fi

したがって、初期値は単なるオプションのヒントです。実際に行うことは、ファイルシステムのUUIDを検索することです。

答え2

これはgrub-probehttps://www.gnu.org/software/grub/manual/grub/html_node/Invoking-grub_002dprobe.html/dev/sda1は名前をに変換します(hd0,msdos1)

ただし、変換が失敗した場合は、デバイスマッピングファイルを使用してヘルプを入手できます(https://www.gnu.org/software/grub/manual/grub/html_node/Device-map.html#Device-map)。

Grub 命名方式を入力してgrub-probe -t drive /ドライブをインポートできます。/

関連情報