VirtualBoxを使ったcentOS7.xの起動で躓いた話

# はじめに
この記事は私が初めてVirtualBoxを用いてcentOSの仮想マシンを立ち上げようとした際にエラーに苦しめられた話です。同じようなエラーで私のように苦しむ人の一助になればいいと思います。

私自身、初学者なので、記事に不備があるかもしれませんがご容赦していただけると幸いです。

# 最初に試みた時の開発環境
windows10 64bit
VirtualBox 6.1.32　[こちらから]("https://www.oracle.com/virtualization/technologies/vm/downloads/virtualbox-downloads.html#vbox")
centOS7 [こちらから]("https://www.centos.org/download/")

導入の仕方は他サイトに詳しく載っているので割愛。

# エラーの発生
[こちら]("https://qiita.com/apricotcomic/items/035dc1c0c7ad08054495")の記事を見ながら進めていきました。VirtualBoxをインストールし、起動。画面通りに進んでいき、いざ起動・・・

ん・・？エラーが。

[エラー文]
failed to load r0 module c:\program files\oracle\virtualbox/vmmr0.r0: sup_ioctl_ldr_open failed (verr_ldr_general_failure). 
failed to load vmmr0.r0 (verr_ldr_general_failure).

終了コード : E_FAIL (0x80004005) 
コンポーネント: ConsoleWrap 
インターフェース: IConsole {872da645-4a9b-1727-bee2-5585105b9eed}

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2575943/8be0095d-342c-b1fb-fbd0-c1714cf96ee3.png)

最初に添付した記事にはエラーが載っておらず、調べることに。

# バージョンのダウングレード

エラーをコピペし、Google先生に聞いてみると、[こんな記事]("https://karst459.com/856/")が。

若干エラーコードは異なりますが、試してみる。
VirtualBoxはそもそもアップグレードした際にエラーが多々起きるっぽいです。ほかにも色々な記事が。。。

なので、バージョンのダウングレードを試みる。
はじめは他記事にあった6.1.16で試す。しかし、エラーの解消せず。

結果的には6.1.16/6.1.22/6.1.26/6.1.32これらのバージョンを試しましたが、エラー文はすべて同じで、挙動も何も変わらず・・・

次に行きます。

# Hyper-Vなどの設定を無効化する。
Hyper-VとはMicrosoft社が提供している仮想化環境を実現するためのソフトです。Hyper-Vに関してはあまり詳しく調べていないので説明はこれぐらいになるのですが、このHyper-Vが結構悪さをするみたいです。[こちらを参考にしました]("https://docs.microsoft.com/ja-jp/troubleshoot/windows-client/application-management/virtualization-apps-not-work-with-hyper-v")

コントロールパネル＞プログラム＞プログラムと機能＞Windowsの機能の有効化または無効化　からHyper-V、コンテナー、仮想マシンプラットフォームのOFFをしました。
正確には私の場合、元々すべてOFFでした。しかし、一度有効化し、再起動。再度無効化し、再起動ということをしました。

また、PowerShellからHyper-Vを落とすコマンドもあるらしく、管理者権限にて。

```ruby:PowerShell
Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Hypervisor
```
を実行。[こちらが参考になると思います]("https://laboradian.com/win10-virtualbox-error/")

私はHyper-Vの設定自体OFFになっていたはずなので、無意味だったかと。
上に添付したMicrosoftのサイトにて「Device Guard と Credential Guard を無効にする」というのがあります。デバイスガードは無効化できましたが、クレデンシャルガードの無効化は、レジストリがそもそも存在せず。ていうことは無効になっているのではないかと考え、このあたりで再度マシンの起動を試みるも、全く変化なし。。。

# ダウングレードする際に他ファイルも消してみる
[こちら]("https://stackoverflow.com/questions/69864455/virtualbox-6-1-28-fails-to-load-r0-module-verr-ldr-general-failure-on-window")ではコメントの方にVirtualBoxに関す
るファイルをきれいに消した後に再インストールしなさいとのこと。

①VirtualBoxをコントロールパネルからアンインストール
②下記のファイルの削除
C:\Program Files\Oracle\VirtualBox
C:\Program Files (x86)\Oracle\VirtualBox
インストールの配置などを変えた方は他の場所に存在するので、注意。
③下記ファイルも削除
.VirtualBox
VirtualBox VMs
(私はこのファイルの位置がよくわからなかったのと、複数出てきたので、検索で引っかかったものはすべて削除しました。やけくそです。笑)
④Windowsキー+r →　名前に「regedit」と入力し、レジストリーエディターを開く。
Computer\HKEY_CURRENT_USER\SOFTWARE\Oracle\VirtualBoxがあれば削除。
これらを行った後、PCの再起動を行い、VirtualBoxのインストールを行う。
正直何をしているのか初学者の私には半分ぐらいわかっていない。とにかくやってみる。

しかし、結果は全く同じ。。。つらい。

# 解決策　
また出てきます。[このサイト]("https://stackoverflow.com/questions/69864455/virtualbox-6-1-28-fails-to-load-r0-module-verr-ldr-general-failure-on-window")

先ほど紹介したコメントの少し上に行くと・・
[Google翻訳したものをコピペ]
「Windowsハイパーバイザーが適用するコード整合性（HVCI）機能は、VirtualBoxコンポーネントVMMR0.r0（*）を拒否します。回避策は、次のようにHVCI（別名メモリ整合性）を無効にすることです。

Windowsホストで、[スタート]>[設定]>[更新とセキュリティ]>[Windowsセキュリティ]>[デバイスセキュリティ]>[コア分離の詳細]に移動し、メモリの整合性をオフにして、Windowsホストを再起動します。

（*）Windowsイベントログの[アプリケーションとサービスログ] \ Microsoft \ Windows \ CodeIntegrity \ Operationalで、ID 3111のイベント（「検証中のファイルがハイパーバイザーで保護されたコード整合性（HVCI）ポリシーを満たしていませんでした。」）ログに記録されます。」

こちらもよくわからないが言われたとおりに設定をいじってみる。。。

そうするとなんと普通に起動するではないか・・・
VirtualBoxのバージョンを6.1.22に下げた状態でおこなっていたため、念のため現時点での最新バージョン6.1.32にびくびくしながらアップグレード。

こちらでもいけるじゃないか・・・

どうやらこの設定が諸悪の根源だったようです。なんの設定なのかよくわかっていませんが、こちらでとにかく解決することができました。。。

ほんとに疲れたのでこれまでにさせていただきます。
追記が必要そうでしたらまた見直させていただきます。