デュアルブートシステムを使用するときにWindowsがGRUBを上書きするのを防ぐ方法

デュアルブートシステムを使用するときにWindowsがGRUBを上書きするのを防ぐ方法

私は二重ブートについてたくさん読んでいて、WindowsをロードしてからGRUBを使ってLinuxをロードするのと同じくらい簡単ですが、誰もがWindowsがチャンスがあるたびにGRUBを捨てるのが好きだと言います。このようなことが起こらないようにするには、どのような措置を講じる必要がありますか?

答え1

Windowsは、Windowsをインストールするか、新しいバージョンにアップグレードするか、以前のバージョンなどのツールを使用するたびにbootrec /fixmbr起動セクタを上書きします。通常、Windowsを最初にインストールしてからLinuxをインストールします。上記のいずれかの操作を実行するまで、ブートセクタは変更されていません。 (MBRに書き込む他の方法があるかもしれません。)しかし、GRUBを失った場合は回復するのは簡単です。bootrec /fixbootfdisk /mbr

  • Live CD(CD/DVD またはフラッシュドライブ)から起動します。
  • root としてログインするか、sudo次のコマンドを使用します。
  • 必要に応じて使用可能なパーティションをリストします。fdisk -l
  • Windowsはほぼ確実に/dev/sda1に存在します。mount /dev/sda1 /mnt
  • MBRにGRUBを再インストールします。grub-install --root-directory=/mnt/ /dev/sda
  • 再起動:shutdown -r now
  • GRUBメニューを復元します。update-grub

コンピュータが十分に強力な場合は、100%Unix、Linux、またはBSDをインストールし、仮想マシンでWindowsを実行することもできます。

さらに:コンピュータのBIOSには、ブートセクタを保護するオプションがあります。

答え2

私が見つけた解決策オンラインどこか(unix.stackexchange.com)には、Windowsブートマネージャの無効化が含まれています。 Linux(オリジナルのインストール、または利用可能な場合はライブCD / DVD)に移動して、次のコマンドを実行します。

efibootmgr

この方法は、LinuxがUEFIモードでインストールされている場合にのみ機能するため、Linuxがレガシーモードでインストールされている場合はエラーメッセージが表示されます。 UEFIモードでインストールすると、いくつかの情報とリストが表示されます。リストのどこかにWindowsブートローダ/管理者とLinuxが表示されます。 Windowsの優先順位が高い場合があります(リストの上の起動順序)。

一部の項目は、横にアスタリスク * が表示され、アクティブであることを示します。

Windowsエントリの横にある4桁の開始番号を見つけて実行します。

sudo efibootmgr --bootnum #### --inactive

これにより、Windowsエントリが無効になります。また、現在無効になっているWindowsの優先順位が高いことを確認してください(まだそうでない場合)。

sudo efibootmgr --bootorder ####,$$$$,&&&&,%%%%

ここで、####はWindowsの開始番号です。

今すぐ再起動すると、grubで起動します(Linuxオプションが最も高い優先順位で有効になっている場合)。

Windowsは無効になっていることを認識していないようで、Windowsを起動または更新しても復元されません。

私は興味のある人のためにLinuxをインストールするローカルLinuxインストールフェスティバルに出席します。ほとんどのWindowsは、次のセカンダリオペレーティングシステムとして使用されます。私はまだこのアプローチが失敗したことを見たことがなく、複数のディストリビューション(主にUbuntuとMint)と複数のベンダー(Asus、Acer、HP、Lenovo)で試しました。

答え3

上記の良い提案のいくつかを試しましたが、役に立ちませんでした。 MSがもっとトリッキーになると思います。

2021年に私に最も効果があったのは、Windowsを起動し、コマンドプロンプトで次のコマンドを実行することを提案する起動リカバリの概要に記載されているアドバイスに従うことでした(これを行うには、管理者権限でコマンドを実行する必要がありました) 。

bcdedit /set {bootmgr} path \EFI\ubuntu\shimx64.efi

注:上記のコマンドはUEFIセキュアブートの状況に合わせてカスタマイズされているため、この方法に従うには推奨boot-repair修正を実行して記録する必要があります。

実行する代わりに、boot-repairLinuxで次のコマンドを使用して正しいefiパスを取得できます(Linuxディストリビューションにアクセスできない場合は、それをインストールするかlive-usbを使用する必要があります)。

efibootmgr -v

Windowsでこのコマンドを実行するとbcdedit、常にgrubメニューが表示されます。 Windowsで起動すると、grubが中断されないように見え、再起動時にデフォルトでLinuxに設定されているgrubメニューが再表示されます。これはとても美しいことです。

答え4

以下は私が使用した解決策であり、介入なしにWindowsアップデートで機能します。 EFI/MicrosomethingでEFI/Microsoftの名前を変更し、grub.cfgのWindowsブートパスを次のようにEFI/Microsomething/bootmfgw.efiに変更します。

menuentry "Microsoft Windows UEFI-GPT" {
    insmod part_gpt
    insmod fat
    insmod search_fs_uuid
    insmod chain
    search --fs-uuid --set=root <PROVIDE YOUR EFI DRIVE UUID>
    chainloader /EFI/Microsomething/Boot/bootmgfw.efi
}

関連情報