DELL XPS13 (9350 2015/11モデル) Windows10のアップデートでGRUB2を消されてUbuntuが起動しなくなる


なんとかUbuntuとWindows10のデュアルブート構成をして、Ubuntuも16.04にアップデートをして組み込みのWifiチップにも対応してしばらく快適に運用していたのですが悲しい事件が起きました。

Windows10のWindowsUpdate( )にGRUB2を壊されてUbuntuが起動できなくなってしまったのです。(Windows10 Insider Previewにしたのでそのせいかもしれません)

XPS13はUEFIでSSDというところでなかなかうまい参考資料が見当たらず苦戦しました。
(先人たちの資料ではMBRのブートローダーを使う方法だったり、HDD前提だったりでうまくXPS13に合う情報がなかなかありませんでした)

こちらの資料が最も参考になりました。

手順

1. インストールディスクで起動

まず、Ubuntu16.04のインストールディスクが必要です。(15.10の起動ディスクではなぜかうまく起動せず…自分の起動ディスクが壊れているだけかも)

私の場合かれこれ2度食らったので、この先も食らう可能性を考慮して快適な速度で起動するUSBメモリで起動メディアを作成しました。(DVDだと起動するのに10分近くかかりました)

2. GRUB2の再構成

起動したらターミナルで以下を実行します。


 $ sudo su
 # mount /dev/nvme0n1p5 /mnt
 # mount /dev/nvme0n1p1 /mnt/boot/efi
 # mount --bind /dev /mnt/dev
 # mount --bind /dev/pts /mnt/dev/pts
 # mount --bind /proc /mnt/proc
 # mount --bind /sys /mnt/sys
 # modprobe efivars
 # chroot /mnt
 # grub-install /dev/nvme0n1
 # update-grub
 # exit

3. GRUB2のメニューにWindowsも追加

上記の手順でGrub2のメニューにUbuntuは出てくるが、Windowsが出ていない状態だと思います。
一旦Ubuntuにログインしてupdate-grubを実行することでGrub2のメニューにWindowsが追加されます。

$ sudo update-grub

若干解説

まず、XPS13のデバイス名は毎度おなじみのsdaとかsdbとかではありません。nvme0n1というデバイス名になっています。

自分の場合以下のようなパーティション状況になっています。

パーティション名 用途
nvme0n1p1 UEFIのBoot領域
nvme0n1p5 Ubuntu
nvme0n1p3 Windows

 # mount /dev/nvme0n1p5 /mnt
 # mount /dev/nvme0n1p1 /mnt/boot/efi

で、こうなるわけです。

そしてchroot /mnt を使って /mnt/ として扱います。

なぜにchrootを使うのかというと、参考資料にもあるとおり

$ sudo grub-install /dev/nvme0n1
  Installing for i386-pc platform.
  grub-install: error: failed to get canonical path of `/cow'.

これが出てしまうためです。

あとは、


 # grub-install /dev/nvme0n1
 # update-grub

で、 /boot/efi/EFI/ubuntu/shimx.efiを再度インストールし、設定ファイルを再構成します。