Kali Linuxをインストールしてデュアルブートするとき、GPUドライバに苦しめられた話

# はじめに
デュアルブートが上手く動かない(あるいは動いているように見えない)原因は、環境によって様々です。例えば、

- パーティションの設定が上手くできていない
- `.iso`ファイルを直接USBメモリにダウンロードしただけで、EtcherやRufusでブートメディアを作成していない←こういう初歩的なミスも初心者には多い(経験談)
- BIOS/UEFI設定でセキュアブートがONになっている
- ファームウェアのバージョンが古い
- OSが要求する最低スペックや機能要件をみたしていない
- すでにインストールされているOSが、新しくインストールするOSの起動を妨げている
- ストレージ(SSD, HDD)が損傷している
- MBRが壊れている
- OSやパッケージが、GPUなどのハードウェアに対応していない

などなど。
この記事では、Kali Linuxをインストールして、Windowsとのデュアルブートをする手順を紹介します。ただし、全ての問題を解説・解決するのではなく、「とりあえずデュアルブートを動かすために」私がやったこと(あるいは応急処置)をまとめています。個々の問題に関する詳しい解説は他の記事に譲ります。

:::note warn
**デュアルブートは、失敗するとPCが起動しなくなる恐れがあります！実際に行う場合は自己責任でお願いします！この記事をもとに操作をした結果損害が生じても、執筆者のウシタは責任を負えません。**
:::

# 環境
パソコン本体
- DELL XPS 8960
- CPU: Core i7-13700
- GPU: NVIDIA RTX 4060 Ti (8GB)
- メモリ: DDR5-4800 16GB x 2
- ストレージ1: SSD 1TB
- ストレージ2: HDD 2TB
- OSその1: Windows 11 Pro 23H2
- OSその2: Kali 2023.4
※KaliはDebian系のLinuxディストリビューションです

使用したUSBメモリ
- KIOXIA TransMemory U366 64GB
- KIOXIA TransMemory U301 256GB

最初の状態では、既にインストールされているWindowsがSSDとHDDを両方とも使っています。ここからパーティションを切ってKaliをインストールし、最終的には、SSDを1個まるまるWindowsに、HDDを1個まるまるKaliに割り当てました。そのため、1個のハードディスクの中に異なるOSが同居する、という状態にはなっていません。

また、後述しますが、トラブルそのものはNVIDIAのGPUドライバとCUDA Toolkitをインストールして解決しました。Kaliをインストールするときにデフォルトでnouveauというドライバが入っているのですが、これが4060 Tiに対応していないのでディスプレイに上手く表示されません。そのため、代わりにNVIDIAのツールを使う必要があるようです。~~4060 Tiが新しいせいかな？nouveauじゃなくてvieuxやんけ~~

# 本題
## Kaliインストールおよびデュアルブートの準備

### バックアップ
まず、Windowsのデータなどをバックアップします。(可能ならシステムイメージを作成します)
本来は、十分な容量のあるUSBメモリやハードディスクなどにWindowsで使用しているデータやシステムファイルをコピーします。しかし、今回はPCを購入してから日が浅く、退避すべきデータがほとんどなかったので、写真フォルダの中身だけiCloudにアップロードするにとどめました。その代わり、回復ドライブの作成をしました。

手順は簡単で、USBメモリ(ここでは64GBのものを使う)をPCに挿して、Windowsのタスクバーの検索ボックスに「回復ドライブの作成」を入力してツールを開きました。

![recovery-drive1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/12d670fd-7c83-87cc-66b5-2a89f8434a96.png)

ツールを開いで、早速回復ドライブを作成します。
デュアルブートの作業をするとき、OSやシステムを壊す可能性があるので、必ず「システムファイルを回復ドライブにバックアップします。」にチェックを入れます。

![recovery-drive2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/0276df51-b9b1-544b-642b-bb819fb7dda2.png)

回復ドライブを作成するには、ある程度大きな容量のUSBメモリが必要になります。また、回復ドライブにするUSBドライブに、元々入っていたデータは削除されます。

![recovery-drive3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/7c2e44d9-d7dd-bea9-f721-667418c80934.png)


https://support.microsoft.com/ja-jp/windows/回復ドライブを作成する-abb4691b-5324-6d4a-8766-73fab304c246

:::note
バックアップは、インストールやデュアルブートの手順を間違えない、誤ってデータを吹き飛ばさない、データを吹き飛ばしても問題ない場合には必要ありません。
ですが、OSの再インストールができないと困るので、よほど自信がある人以外は(完全でなくても、重要な部分だけでいいので)バックアップをすることをお勧めします。
:::

### パーティションを設定する
先述の通り、Kaliをインストールする前の状態では、SSD(約1000GB)とHDD(約2000GB)が両方ともWindows用になっています。このまま無理にKaliをインストールしようとすると、Windows側で予期せぬエラーが起きる可能性があります。
**↓元々のパーティション**

![partition1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/cb4cfa19-cd07-9861-0577-f8de90192421.png)

そのため、Kaliをインストールしたい領域を予め空けておきます。削除したいパーティション(ディスク)で右クリックをして、「ボリュームの縮小」または「ボリュームの削除」で、未割り当て領域を作ることができます。
**↓Kaliインストールのために、HDDのパーティションを削除した後**

![partition2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/85db68ac-e277-d8f1-4bc4-99fce8abab01.png)

### 高速スタートアップを無効化
Windowsメニューで「コントロールパネル」を起動し、「ハードウェアとサウンド」→「電源オプション・電源ボタンの動作の変更」→「高速スタートアップを有効にする」のチェックボックスを外します。このとき、「現在利用可能でない設定を変更します」を一度クリックする必要があります。

![fast-startup2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/42f2ed28-54c5-ca8c-97de-cf291c40ef4d.png)

![fast-startup3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/0c680ae0-e64d-7f0e-1df1-59f79e54d473.png)


### BitLockerを無効化
後々のトラブルを回避するために、WindowsのBitLockerを無効にしておきます。
コントロールパネルを起動し、「管理」と検索すると、BitLockerのメニューが出てきます。

![BitLocker.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/1a7d6a86-e72c-0f2a-26e5-b04cc73897a9.png)

### BIOS/UEFI設定 (セキュアブート、SATA/NVMe)
インストールメディアの作成をしたら、PCを再起動して、BIOS/UEFI設定を開きます。設定の開き方はPCによって異なりますが、このPC(XPS 8960)の場合は、企業のロゴ(DELL)が出た瞬間に`F12`キーを連打して出します。(BIOS/UEFI設定は今後何度か開くので、起動する方法を覚えておくと便利です)

![BIOS-Settings2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/97bca776-293b-992c-5345-adcbb325da43.jpeg)

設定を開いたら、(PCの機種によって異なりますが)「Security」→「Secure Boot」の項目を選択し、Disabled(無効)にします。

![Secure-Boot2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/9b24225d-9d17-646d-7915-5a48f827a14b.jpeg)
 
![Secure-Boot1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/438a5f78-ab48-9558-0f90-31d1a178fcb2.jpeg)

セキュアブートを無効にした後は、再起動して再びBIOS/UEFI設定を開きます。その時に、キュアブートが無効になっていることが確認できます。(画面のレイアウトはPCによって変わります)

![Secure-Boot3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/9301d306-8655-b57f-d63a-7e3e04973aad.jpeg)

続けて、これもPCによりますが、SATA(HDD)とNVMe(SSD)が両方ある場合は「SATA/NVMe Operation mode」を変更する必要があるらしいです。
「RAID on」というのはダメらしいので「AHCI/NVMe」にしました。

https://www.dell.com/support/kbdoc/ja-jp/000132465/nvme-ssd-および-sata-ドライブ-を-搭載-した-windows-10-の-インストール

![AHCI-NVMe.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/0930f105-bb2f-5320-87a9-8f17abf99d10.jpeg)


### セキュアブート後のWindowsの起動、ファームウェア(BIOS)アップデート
青い画面をいじる工程が続きます。PCを起動し、Windowsにサインインしようとすると、ブルースクリーンが出ることがあります。(特にBitLockerを無効化していない場合)

![BitLocker1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/5f1f060e-d673-d561-f25d-4e86aaf2ba58.jpeg)

![BitLocker2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/1d8fb07b-be1f-b012-521d-80359bb7696c.jpeg)

この時は、BitLocker回復キーを(別のPCやスマホなどでMicrosoftアカウントにログインして)取得してください。
なお、回復キーIDと回復キーは別物なので、画面に表示されているものをそのまま入力しても動きません。回復キーIDは0~9の数字のみで構成されています。

https://support.microsoft.com/ja-jp/windows/windows-で-bitlocker-回復キーを見つける-6b71ad27-0b89-ea08-f143-056f5ab347d6

Windowsにサインインした後は、回復ドライブとは別のUSBメモリ(ここでは256GBのものを使う)を用意し、PCメーカーのサイトからファームウェアのアップデートをダウンロードします。写真はDELLのサイトにログインして、PCの機種を特定した上でドライバを探した結果です。

![BIOS1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/83b4827a-9244-a10c-2e96-4664d8537e3d.png)

ダウンロードしたファイルを実行し、用意したUSBメモリにアップデートするファームウェアを入れます。
そして、PCを再起動し、BIOS/UEFI設定を開いてファームウェアをアップデートします。

![firmware-update1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/9a4327fe-dbc0-7e9f-1bbb-dd480878aece.jpeg)

<details><summary>Windowsが起動しなくなった場合</summary>

原因は不明ですが、BIOSアップデート後にWindowsが起動しなくなることがあります。
そのような場合でも、セーフモードでの起動が可能な場合があります。

予め用意しておいた回復ドライブを使用し、コマンドプロンプトで`bcdedit /set {current} safeboot minimal`を実行してセーフモードで起動します。その後、問題に対処した後`bcdedit /deletevalue {current} safeboot`を実行して、復旧できるかもしれません。

また、MBRやパーティションテーブルの領域が壊れているには、Windows アセスメント & デプロイメント キット (WinPE)やTestDiskなどのツールを用いて修復ができることがあります。

私はこれらのトラブルには対応できないので、ご自身で調べるか専門の業者に依頼してください。

**これらのトラブルは、初心者が生半可な知識で対処しようとすると、かえって状況を悪化させることがあるので注意してください。**

</details>


### インストールメディアの作成
Kali公式はデュアルブートする際に、Live Boot版のダウンロード&インストールを推奨していますが、Installer Imagesでも一応動きます。
↓Kaliのシングルブートをする方法: Installer

https://www.kali.org/docs/installation/hard-disk-install/

↓Kaliのデュアルブートをする方法: Live

https://www.kali.org/docs/installation/dual-boot-kali-with-windows/

以下のサイトから、Kaliの`.iso`ファイルを(私はInstaller Images版で)ダウンロードします。

https://www.kali.org/get-kali/#kali-platforms

次に、ダウンロードした`.iso`ファイルからブートドライブを作ります。この時、ウシタはBIOSアップデート後に用済みとなった(256GBの)USBメモリを、フォーマットして使いました。(Windowsの回復ドライブとは別のUSBメモリを用意します。容量自体は16GBもあれば十分で、容量が大きいとEtcherは警告出します。Rufusは警告出しませんでした。)

「Rufus」でググって、x64の標準バージョンをダウンロードします。

https://rufus.ie/ja/

ダウンロードしたRufusは`.exe`ファイルなのでそのまま実行できます。実行すると、以下のような画面が立ち上がるので、ファイルやUSBメモリを選択して、「スタート」を押します。

![rufus2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/b12cdc2c-946b-b1fc-d35a-60b14e271d60.png)

(写真では`.iso`ファイルがInstallerではなくLiveになっていますが気にしないでください)

https://www.kali.org/docs/usb/live-usb-install-with-windows/

## Kaliインストール
インストールメディア(USBメモリ)を挿して、PCを再起動します。
例によって`F12`を連打し、ブートメニューを表示してそれっぽい(インストーラーっぽい)ものを選択します。

![install1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/4e653e7a-d785-e758-c910-e7f54ca620f7.jpeg)

すると、デカデカと「KALI LINUX」と書かれた画面が表示されます。ウシタはここで、一番上の「Graphical Install」を選択しました。

![install2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/289c03d7-5810-da92-4e7b-8eded8140748.jpeg)

以降の操作は、Kaliのドキュメントと内容が重複するので割愛。英語で書かれていますが平易なので、英語力に自信がなくても大丈夫です。いざという時はDeepLという名の強力な味方もいるので。

https://www.kali.org/docs/installation/hard-disk-install/


## 映像のトラブルはGPUドライバを入れて解消
**今回の山場です。** メニューでKaliを選択し、しばらくするとログイン画面が現れる...はず...と思いながら数分待ちますが、一向に真っ黒な画面のままです。

![black-screen.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/55dc3968-f03b-b1a9-b212-a2061d8d356f.jpeg)

よく見ると、画面の左上にカーソルがあって、点滅しているのが分かります。

先ほどのメニューが表示されているから少なくともBIOSは動いている、その次に何やらメッセージが沢山出ているので、GRUB(ブートローダー)は動いているっぽい、でも何が悪いんだろう...って悩みました。

![messages.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/fb9ce3b2-13e3-e5a9-cc82-3dd944b7074c.jpeg)

このような時は、`Ctrl+Alt+F3`を押します。そうすると、GUIではなくCUIが立ち上がります。
インストールする時に設定した名前とパスワードを使って、Kali Linuxにログインします。

![no-gui1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/0064e939-f0b0-7023-db8f-c8714b60641c.jpeg)


以下のKaliのドキュメントにも書かれていますが、まずは`update`および`upgrade`をします。
```
sudo apt update
```

```
sudo apt -y full-upgrade -y
```

`upgrade`は時間がかかる(私の場合は1時間程度)ので、気長に待ちましょう。

![no-gui-upgrade.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/40eb0d5e-e842-7c90-5ab8-06f7b9a3791a.jpeg)

`upgrade`したら、再起動をする場面があるかと思います。その後は、以下のドキュメントに書かれているようなコマンドを打つだけです。

https://www.kali.org/docs/general-use/install-nvidia-drivers-on-kali-linux/

`lspcispci | grep -i vga`コマンドを実行して、使いたいGPU(RTX 4060 Ti)の識別番号(01:00.0)を確認してから、`lspci`コマンドにその番号を渡して`lspci -s 01:00.0 -v`とします。

![no-gui3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/22e75382-be4c-88ff-eebb-7575b8d48e6c.jpeg)


`sudo apt install -y nvidia-driver nvidia-cuda-toolkit`を実行した後は、次のような画面が表示されるので、`sudo reboot -f`で再起動します。

![no-gui4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/ca225049-999f-e94e-3768-2cf1a97b4d66.jpeg)


:::note

一部Kali公式のドキュメントと異なるコマンドを実行しているため、適宜読み替えてください。また、実行すべきコマンドは各自の環境によって異なるため、この記事を鵜呑みにするのではなくご自身でも調べることを推奨します。
:::

### 動いた！

![success1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/dbdb0553-f947-cdb0-05c2-07687498558a.jpeg)

Kaliの龍のような~~ドラミドロのような~~アイコン、Etsyと言うらしいです。かっこいいね。

![success2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/e069e5eb-99dd-0f9f-731c-265e32b7dd96.jpeg)

~~オストガロアみたい~~

![success3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/9a185456-750d-b139-62d9-8ce9a8ffcfbb.jpeg)

この後、再び再起動してWindowsにサインインし、パーティションを確認すると、以下のようになっていました。

![partition-after.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/934c551b-bb5e-43f0-e00d-feacdaaa7d1e.png)

## 2024.1.17追記　Windowsで表示される時間がJSTではなくUTCになってしまう問題
WindowsとLinuxでは、BIOSに時刻を保存する方法が異なります。
- Windowsは、BIOSにJST(= UTC+9)を保存し、そのまま使う
- Linuxは、BIOSにUTCを保存し、システムを動かすときは9時間加算してJSTとする

これを修正するためには、Windowsの挙動にLinuxを合わせるか、Linuxの挙動にWindowsを合わせるか、どちらかの方法を取らないといけません。今回は後者をやります。

:::note warn

Windowsのレジストリを編集するので、操作に失敗するとPCがうまく動かなくなる可能性があります。今までのデュアルブートの操作と同様、以下も自己責任でお願いします。
:::

Windowsのタスクバーで、検索ボックスに`cmd`と打ち込むと、コマンドプロンプトが出てきます。これを、管理者として実行し、次を入力します。
```
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f
```

さて、これを実行して、Windowsの設定を開き時刻を同期して、再起動したら、次のようになりました。
![time-windows-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/f64ffb5f-bd33-dba1-a740-d4f1fd299ce4.png)


あれ？UTC+18とかいう、おぞましい時刻になってるぞ？？？

不思議な挙動をしているので、一旦元に戻します。今度はターミナル(PowerShell)を管理者で開いて、以下のコマンドを入力します。
```
reg delete HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /f
```

`reg delete`の後、再起動します。すると表示がUTCに戻ったので、再び先ほどのコマンドを入力します。
```
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f
```
今度は、 **予め設定で時刻を同期せずに、再起動します。** *先ほどは、設定で時刻を同期してから再起動していました。*

すると...


![time-windows-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/4b699bff-9dc6-c883-66c8-2b3fde0daed4.png)


試しにLinuxの方でも確認してみたところ、上手くいってることがわかりました。


![time-linux.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665059/e206675f-e62d-e9cb-c97e-5586474529a5.png)


時刻の設定については、以下のページを参考にしました。

https://hattomo.github.io/posts/main/21/q1/0213-mangae-hardware-clock-windows-utc/

# 最後に
デュアルブートは大変です！Try Harder.