Dell Optiplex 780 SFF のSSDを新調し、Windows10 ProとDebian11(bullseye) 64-bit のデュアルブートを作成すると、
初めてのアップデート・アップグレード後、GRUBのOS選択画面からWindows10の項目が消え去ってしまいました。
私の備忘録も兼ねて、復旧の対処方法をログとして残します。
GRUBとは何か?
- 公式サイト:GNU GRUB
- GRUB2 – Debian Wiki
正式には、GNU GRUB(GRand Unified Bootloader)。グラブ。
引用:Wikipedia
コンピュータにインストールされた複数のOSを、ユーザーに選択肢として提示するプログラム。
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が15年前の古いマシンだからかもしれませんが、原因追求にエネルギーを割くよりも復旧できればそれで良いスタンスでおります。
Optiplex 780 SFFでWindowsとLinuxのデュアルブートは2018年から6年間、何度も作成してきていますが、GRUBメニューからWindowsが吹っ飛んだ経験は初めてです。
「Windowsが消えた」と焦っておられるDebianユーザーのお役に立てるかと思い、以下に対処方法を書きます。
Windows10をGRUBに追加する対処方法
Windows10ブートローダーのUUIDを調べ、Windows10をGRUBメニューに追加
入力するコマンドは赤字。
着目点は黄色のアンダーライン。
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 |
0 | Debian GNU/Linux |
1 | Advanced options for Debian GNU/Linux |
2 | Windows 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公式ページに、メニューカラーや背景画像を変更する方法が記載されています。
細かな部分までカスタマイズできるのを知り、感心しました。
以上で本記事のコンテンツは終わりです。
お役に立てれば嬉しく思います。
以下の記事も一緒にどうぞ。
コメント