# Windows 執行模組 6-3 錯誤排除 ## 錯誤描述 - 環境: Windows 10/11 搭配 Virtualbox - 問題: 跟著講義步驟操作,確認設定檔正確的情況下,Free5GC 的其中一個程式會出現執行錯誤 ### 錯誤原因 - Free5GC 本身使用了 MongoDB;模組 6-3 提供的 VM,使用的 MongoDB 是 5.0 之後的版本 - MongoDB 5.0 開始,使用了 AVX 指令集 (一種 SIMD 的 CPU 指令) - 因為 Windows 的環境不同,可能導致在 Virtualbox 中無法使用該指令集,從而造成 MongoDB 無法正常執行 - 進而導致 Free5GC 無法正常啟動 ### 確認是否同為此錯誤 :::warning - 本文提供的解決方式只針對上面提出的問題 - 請先按照下列步驟,檢驗自己遇到的錯誤是否和本文描述的相同 ::: - 下列指令請在 **虛擬機中操作** - 使用 `systemctl` 確認 MongoDB 是否異常 ```bash sudo systemctl status mongod.service ``` - 若錯誤訊息顯示 <font color=red>**Core Dump**</font>,請接著嘗試下面步驟 - 使用下面指令,確認 CPU 是否支援 AVX 指令 ```bash lscpu | grep avx ``` - **若沒有任何輸出**,表示 MongoDB 是因為缺少 AVX 指令集而發生異常,請接著嘗試下面提出的解決方式 - 若有輸出,表示 MongoDB 是因為其他原因才發生異常,建議先嘗試重啟 MongoDB,或是重新安裝 VM ```bash # 重啟 MongoDB sudo systemctl restart mongod.service ``` ## 解決方法 MongoDB [官方提供的解決方式](https://www.mongodb.com/community/forums/t/setting-up-mongodb-v5-0-on-ubuntu-20-core-dump-status-4-ill/120705/4) 1. 使用 MongoDB 4.XX 2. 自行重新編譯 MongoDB 5.XX,避免出現不支援的 CPU 指令 3. 使用支援 AVX 的 CPU (使 VM 環境可以支援 AVX 指令) 因為不確定 MongoDB 是否已有必要的資料,重新安裝 MongoDB 可能會有其他問題,所以本文提供的方法,將嘗試讓 Virtualbox 的 VM 可以使用 AVX 指令集 ### 在 Virtualbox 啟用 AVX 在 Virtualbox 啟動 AVX 需要以下條件 - 停用 Windows 上的 Hyper-V、Windows 虛擬化平台 - VM 必須啟動 PNE/NX、AMD-V - **Windows 11** 需要關閉 *核心隔離* 中的 *記憶體完整性* 功能 ### 關閉 Windows 上的虛擬機平台 - 下列指令請在 **主機 (Windows)** 上操作 - 找到 **Powershell**,點右鍵選擇 **以管理員身分執行** - 執行下面指令,關閉虛擬機平台 ```bash bcdedit /set hypervisorlaunchtype off ``` - 執行下面指令,關閉 Hyper-V Hypervisor ```bash Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Hypervisor ``` <!-- - 執行下面指令,關閉 Hyper V ``` DISM /Online /Disable-Feature:Microsoft-Hyper-V ``` --> :::info - 因為每台電腦上啟用的服務可能有差異 - 上面的指令可能出現錯誤訊息 - 請先忽略錯誤訊息,並繼續往下執行 ::: - 打開控制台 - 打開 **程式集**  - 選擇 **開啟或關閉 Windows 功能**  - 關閉 Hyper-V 和虛擬機平台 - 若這兩項功能未被列出,則可跳過此步驟  ### 啟動 Virtualbox 的虛擬化設定 - 點選要使用的虛擬機,進入設定頁面 (虛擬機必須是電源關閉的狀態)  - 選擇 **系統** > **處理器**,勾選下方的兩個擴充功能後,按下確認  :::danger **Nested VT-x/AMD-V 可能無法勾選** - 此情況需要透過 Virtual Box 的管理工具指令強制開啟 - 請繼續執行 **強制啟動虛擬化設定** 中的操作 ::: ### 強制啟動虛擬化設定 :::success 若上個步驟 **啟動 Virtualbox 的虛擬化設定** 已經成功,請跳過這一個章節 ::: - 打開任意的終端機(Power Shell, cmd, git bash ...),切換到 Virtual Box 的安裝路徑 (預設為 *C:\Program Files\Oracle\VirtualBox*) - 可以直接使用 `cd` 指令切換目錄,由於路徑中有空白字元,需要加上雙引號 `""` ``` cd "C:\Program Files\Oracle\VirtualBox" ```  - 執行 `./VBoxManage.exe` 強制開啟必要的虛擬化選項 ``` ./VBoxManage.exe modifyvm <VM_NAME> --nested-hw-virt on ``` - :warning: `<VM_NAME>` 要替換成虛擬機的名稱 (`<>` 不要保留) - 以下面的截圖為例,使用的虛擬機名稱為 **5GC**  - 則啟動虛擬化的指令應為 ``` ./VBoxManage.exe modifyvm 5GC --nested-hw-virt on ``` :::warning - 實際安裝路徑可能不同,手動確認正確的安裝路徑 - 可以在 **開始選單** 中 **搜尋 VirtualBox**,**點右鍵** > **開啟檔案位置**  - 再對 VirtualBox 捷徑 **點右鍵** > **開啟檔案位置**  ::: ### Windows 11 需關閉 "記憶體完整性" :::warning - 若系統是 Windows 11,需要額外執行此步驟 - 若為 Windows 10 請跳過此步驟 ::: - 搜尋 "核心隔離"  - 關閉 "記憶體完整性"  ### 重啟虛擬機 - 啟動虛擬機,並在虛擬機中執行以下指令 ``` lscpu | grep avx ``` - 若有以下輸出,代表設定成功  - 執行以下指令確認 MongoDB 正常執行 ``` systemctl status mongod.service ``` - 若顯示 **active**,代表 MongoDB 正常執行  - 重新執行 *project1/run.sh* 啟動 Free5GC ```bash # 建議切換到 project1 底下執行 run.sj # 會自動修改 Free5GC 的設定檔,以確保 IP address 設定正確 cd project1 ./run.sh ``` <!-- ## 分析原因 ### 觀察 Free5GC Log - 運行一段時間後發現是 (左上角) 會出現錯誤並導致其他三個 processes 跟著出錯 - 觀察其 config,發現它會使用 MongoDB ### 查看 MongoDB Log - 使用 `systemctl status mongod.service` 查看其 log - 發現錯誤是 `core dump`,初步判斷是 binary package 中使用了不支援的 CPU instruction - 進一步搜尋其 error code,發現有 MongoDB 5.X 版有使用 AVX 指令集,導致無法啟動的災情 - 使用 `dpkg -l | grep mongo` 確認目前版本確實是 5.X -->
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.