(2023.06)レンタルサーバ変更に伴い、ドメイン変更致しました(旧URL:https://i-topics.net)。

【Debian11】GRUB メニューからWindowsが消えた時の対処方法

この記事は約9分で読めます。

Dell Optiplex 780 SFF のSSDを新調し、Windows10 ProとDebian11(bullseye) 64-bit のデュアルブートを作成すると、
初めてのアップデート・アップグレード後、GRUBのOS選択画面からWindows10の項目が消え去ってしまいました。

私の備忘録も兼ねて、復旧の対処方法をログとして残します。

GRUBとは何か?

正式には、GNU GRUB(GRand Unified Bootloader)。グラブ。
コンピュータにインストールされた複数のOSを、ユーザーに選択肢として提示するプログラム。

引用:Wikipedia

Debian インストール時の最後あたりでGRUBインストールを行っています。

install debian GRUB

上のGRUBインストール過程を経た結果、PC起動時にDebianとWindows10を選択できるような仕様になります。

で、今回、Debian11 64-bit インストール直後の初めてのアップデート・アップグレードで、
Windows10 のOS選択項目が消失してしまいました。

GRUB OS選択画面からWindows10の項目が消える!?

現象:
Debian 64-bit インストール直後sudo apt update, sudo apt upgradeを行い、再起動すると、
Windows10の項目が消失し、Windows10を選択できなくなった。

上の画像の3行目がごっそり無くなり、Debianしか選べない状態になりました。
原因はよく分かりません。Optiplex 780 SFFが14年前の古いマシンだからかもしれませんが、原因追求にエネルギーを割くよりも復旧できればそれで良いスタンスでおります。

Optiplex 780 SFFでWindowsとLinuxのデュアルブートは2018年から6年間、何度も作成してきていますが、GRUBメニューからWindowsが吹っ飛んだ経験は初めてです。

Windowsが消えた」と焦っておられるDebianユーザーのお役に立てるかと思い、以下に対処方法を書きます。

Windows10をGRUBに追加する対処方法

Windows10ブートローダーのUUIDを調べ、Windows10をGRUBメニューに追加

SSD 240GB のデュアルブート構成

入力するコマンドは赤字
着目点は黄色のアンダーライン

deb@debian:~$ sudo fdisk -l
Disk /dev/sda: 223.57 GiB, 240057409536 bytes, 468862128 sectors
Disk model: KINGSTON SQ500S3
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xcb51d1e0

Device     Boot     Start       End   Sectors  Size Id Type
/dev/sda1  *         2048    206847    204800  100M  7 HPFS/NTFS/exFAT
/dev/sda2          206848 205473791 205266944 97.9G  7 HPFS/NTFS/exFAT
/dev/sda3       205475838 467617791 262141954  125G  f W95 Ext'd (LBA)
/dev/sda4       467617792 468858879   1241088  606M  7 HPFS/NTFS/exFAT
/dev/sda5       205475840 410275839 204800000 97.7G  7 HPFS/NTFS/exFAT
/dev/sda6       410277888 465616895  55339008 26.4G 83 Linux
/dev/sda7       465618944 467617791   1998848  976M 82 Linux swap / Solaris

Partition table entries are not in disk order.
deb@debian:~$

上の結果のBootに「*」の付いたパーティション /dev/sda1 にWindows10のブートローダーが入っているのが分かる。
次に、このパーティションのUUIDを確認。

deb@debian:~$ sudo blkid /dev/sda1
/dev/sda1: LABEL="System" BLOCK_SIZE="512" UUID="1A625C33625C163B" TYPE="ntfs" PARTUUID="cb51d1e0-01"
deb@debian:~$ 

/etc/grub.d/40_customファイルをnanoで編集。
Debian公式マニュアルでは、「/boot/grub/grub.cfg を直接編集はダメ」と記述されている)

deb@debian:~$ sudo nano /etc/grub.d/40_custom

最下行に以下の行を追加して、nanoを保存
黄色アンダーラインは上で取得したUUIDを入力。

menuentry “Windows 10” {
search –fs-uuid –no-floppy –set=root (1A625C33625C163B)
chainloader +1
}

チェーンロードとは、別のブートローダーを使用して、サポートされていないOSを読み込むためのメカニズムです[1]引用:Oracle.com, 2023-03-06閲覧。

GRUBの設定を更新。

sudo update-grub

<再起動してもGRUBにWindowsが表示されず直っていない場合の対処策(2023.06.03 追記)>

新しいPC、NucBox3のDebianをメインにしていたため、本日、久しぶりにOptiplex780 のDebianを大掛かりにアップグレードしたところ、上記の方法ではGRUBにWindowsを追加出来ませんでした。

以下のコマンド[2]出典:gihyo.jp, 2023.06.03閲覧。赤字)を入力するときちんと直り、GRUBにWindows項目エントリを追加できました。

deb@debian:~$ echo 'GRUB_DISABLE_OS_PROBER="false"' | sudo tee -a /etc/default/grub
deb@debian:~$ sudo update-grub

再起動後、反映されているのかご確認ください。

Windows10 の起動順位の確認

入力するコマンドは赤字
着目点は黄色アンダーライン

deb@debian:~$ grep -e "^\(menuentry\)\|\(submenu\)" /boot/grub/grub.cfg
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-ab4469a8-c6dc-4903-9cfc-1f0d8fed090d' {
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-ab4469a8-c6dc-4903-9cfc-1f0d8fed090d' {
menuentry 'Windows 10 (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-chain-1A625C33625C163B' {
deb@debian:~$

起動メニューが表示され、上から0番目、1番目、2番目、と読み解きます。
つまり、GRUB構成ファイルではmenuentryを以下のような番号で対応させ、
以下の順序で項目が並びます。

番号OS
0Debian GNU/Linux
1Advanced options for Debian GNU/Linux
2Windows 10 (on /dev/sda1)

ここで注意しなければならない点は、OS選択項目の並びと起動順序は必ずしも合致しない点です。

Debianをデフォルト起動OSにしたい場合は、現時点で再起動するとGRUBは直り復旧しています
しかし、Windows10をデフォルトOSにした場合は、GRUB画面最下行から起動することになります。

項目の並びと起動順序は合致しない

GRUBでWindows10をデフォルト起動OSにしたい場合

Windows10 をデフォルト起動にしたい場合は、以下のコマンドを実行します。

sudo nano /etc/default/grub

上でWindows 10は2番目と洗い出したので、下の赤字部分を0から2に変更します。

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=2
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""

「GRUB_TIMEOUT」はデフォルトOSが自動起動するまでの秒数[3]参考:gnu.org, 2023-03-06閲覧。なので、OS選択画面を長く表示したければ、数値を大きくします(例:30秒GRUB画面を表示したければ、30に変更)。

nano を保存し、以下のコマンドを実行。

sudo update-grub

Debian 再起動後、Windows10 がデフォルトで起動するよう変更されています。

GRUB2の色などカスタマイズしたい方へ

以下のDebian公式ページに、メニューカラーや背景画像を変更する方法が記載されています。
細かな部分までカスタマイズできるのを知り、感心しました。

GRUB2 - Debian Wiki

以上で本記事のコンテンツは終わりです。
お役に立てれば嬉しく思います。

以下の記事も一緒にどうぞ。

  1. 【Debian11】bullseye ダウンロード・インストール
  2. 【Debian11】bullseye インストール後、最初に行うこと
  3. 【Debian11】bullseye GRUBメニューからWindowsが消えた時の対処方法
  4. 【Debian11】bullseye Wi-Fiが繋がらない不具合への対処方法
  5. 【Debian11】bullseye Windowsとのデュアルブート作成方法
  6. 【Debian11】bullseye ターミナル(端末)が起動しない時の対処方法

脚注

脚注
1 引用:Oracle.com, 2023-03-06閲覧。
2 出典:gihyo.jp, 2023.06.03閲覧。
3 参考:gnu.org, 2023-03-06閲覧。

コメント