update-grubとgrub-install?

オンラインで見つかったいくつかの例では、update-grubはgrub-installの後に実行する必要があるとされています。他の人は順序を逆にします。どちらが正しいですか?

2つのLinuxインストール(1つはsdaに、もう1つはsdbに)がある場合、sdaインストールでupdate-grubを実行すると、sdaインストールがブートの上部に配置されます。メニュー。 sdbインストールでupdate-grubを実行すると、sdbインストールがメニューの上部に配置されます。

DEFAULT = 0とすると、理論的には、を選択してOSを選択できます。 BIOSでデバイスを起動します。 「grub-install / dev / sda」は、Linuxのsdaバージョンまたはsdbバージョンのどちらから実行されたかに関係なく、最後の「update-grub」に対応するようにsdaブートメニューを変更しますか?

回答

update-grubは、少なくともDebianとUbuntuのようなその親戚では、基本的にgrub-mkconfig。したがって、実際のブートローダー自体ではなく、GRUB 構成を作成/更新/再生成します。

grub-installが実際に行うことは、どちらかによって異なります。実行しているGRUBのバージョン:従来のBIOSGRUBまたはUEFIGRUB?

従来のBIOSGRUBでは、grub-installは、マスターブートレコードに埋め込まれたGRUBの一部を(再)書き込み、物理ディスクブロックにエンコードします。 GRUBの次の部分を読む場所からの番号。また、実際のGRUB構成ファイル(/boot/grub/grub.cfg)がどのパーティションから読み取られるかを決定します。ここで重要な要素は/boot/grub/device.mapファイルです。このファイルは、BIOS(したがってGRUB)のデバイス番号がLinuxディスクデバイスにどのようにマップされるかをGRUBに通知します。

With GRUBブートローダーの主要部分であるUEFIGRUBは、EFIシステムパーティション内のファイルとして、通常は/boot/efi/EFI/<name of distribution>/grubx64.efiなどとして配置されます。このブートローダーのパス名は、UEFIブート変数のシステムNVRAM(= BIOS設定が保存される場所)に保存されます。 GRUBの主要部分は完全に自己完結型である場合があります(セキュアブートが使用されている場合は必須です!)。または、通常はの/boot/grubディレクトリからGRUBモジュールとして追加機能をロードする場合があります。その一部であるLinuxディストリビューション。

UEFIブート変数は、システムがEFIシステムパーティションとその中のブートローダーファイルを探すために使用するディスクを識別します。これらの変数は、を使用して自分で表示できます。 efibootmgr -vコマンド。--no-nvramオプションを使用しない限り、grub-installコマンドはこれらの変数を更新します。

その結果、従来のBIOSとUEFIの両方で、grub-installを実行すると、ブートローダーを更新して、完全に異なるGRUB構成ファイルを読み取ることができます。別のディスク-そのプロセスの詳細は完全に異なりますが。

UEFIを使用すると、OS内からブートデバイスの選択を実際に変更できます。 efibootmgrまたはgrub-install。ただし、grub-installは、そのための大規模なやり過ぎです。両方のインストールがUEFIであり、独自の個別のESPパーティションがある場合、それらには独自のUEFIブート変数があり、どちらかを簡単に選択できます。 efibootmgrを使用するか、実際にはUEFIBIOS設定で使用します。

従来のBIOSでは、「少し面倒です。各インストールを確認する必要があります」 /boot/grub/device.mapは、その特定のインストールのディスクをhd0として識別し、もう1つのディスクをhd1として識別します。 。次に、grub-installを使用して、各インストールの独自のディスクにのみブートローダーを書き込みます。 「反対側」のディスクには絶対に使用しないでください。そうすれば、もう一方のディスクが完全に取り外された場合でも、両方のディスクが完全にスタンドアロンで起動可能になります。必要に応じて、各GRUBの構成ファイルにメニュー項目を追加して、「反対の」インストールを起動できるようにすることができます。または、BIOSを使用して起動するディスクを選択することもできます。

従来のBIOSの起動順序セレクターは通常、「最初の」ディスクを起動するためにディスクを選択することで機能することを知っておく必要があります。 BIOS機能の場合、GRUBのhd0は常に「BIOSで起動するために現在選択されているディスク」を参照します。

つまり、現在/dev/sdaから起動しており(BIOSではsdahd0と表示されます)、そのディスクのGRUBメニュー項目を/dev/sdbのブートメニューに切り替えるには、次のようなものを使用します。

menuentry "Switch to /dev/sdb" { # flip the disk mappings and reload configuration drivemap -s (hd0) (hd1) set root=<the identifier for sdb"s partition that contains grub.cfg> configfile /boot/grub/grub.cfg # or just /grub/grub.cfg is /boot is a separate partition } 

…および/ dev / sdbのGRUB構成でも同様です。

コメント

  • したがって、grub-installの前にupdate-grubを実行します。 (違いを生むはずではありませんが、UEFIの場合)またはその逆ですか?
  • grub-installはGRUBのバイナリ部分をインストールし、update-grubは構成ファイルのみを生成します。 GRUBを完全に再インストールする必要がある場合は、最初にgrub-installを実行すると'言います。実際には、ジョブの一部としてupdate-grubを実行する場合があります。' tでない場合は、後で自分で実行できます。
  • "独自のUEFIブート変数 s "->では、UEFIセットアップを正しく理解していれば、NVRAMのUEFIブート変数はブートディスクを指定する配列のようなものですか? 1つのディスクに障害が発生した場合はどうなりますか。この配列のフォールバック/複数の値を指定できますか?さらに、私が理解した場合、ユーザーはブートディスクを手動で指定するだけでいつでもUEFIブート変数をバイパスできますか(事実上、UEFIブート変数が実行していること)?ありがとうございます。
  • @ninjageckoあなたの理解は正しいですが、おそらく不完全です。 UEFIブート変数は、ブート元のパーティションUUIDだけでなく、ブートローダーファイルのパス名、人間が読み取れる名前、およびオプションのパラメーターフィールドを指定します。はい、複数の(セットの)値を指定し、それらを試行する順序を指定し、システムに特定のオプションを通常の順序から一度だけ起動してから、通常の順序を使用して再開するように指示することもできます。これらはすべてUEFI仕様の標準機能です。ファームウェアの作成者は、必要に応じてさらに多くのオプションを提供できます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です