Powód:
Virtualization Station (QVS) w QNAP QTS jest naprawdę przydatnym środowiskiem do uruchamiania maszyn wirtualnych. Jednak kiedy potrzebujesz uruchomić LabConfig - ustanowić środowisko testowe; które pozwoliłoby Ci uruchomić inne hypervisory i narzędzia automatyzacji VM pozostaje rozwiązanie Nested Virtualization. Nested Virtualization, to nic innego jak zagnieżdżona lub rekursywna wirtualizacja – czyli wirtualizacja w wirtualizacji. Nested Virtualization jest wyłączona domyślnie we wszystkich hypervisorach czy to ESXi czy Hyper-V. QNAP Virtuzaliation Station bazuje na KVM i tutaj z pomocć przychodzi Nested KVM, który umożliwi uruchomienie „zabawek” takich jak ESX, XenServer, Hyper-V czy Proxmox.
- Połącz się z serwerem po SSH
- Wykonaj polecenie:
lscpu
, aby wyświetlić parametry i technologie procesora CPU
Przykład:
Kod:Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 8 On-line CPU(s) list: 0-7 Thread(s) per core: 1 Core(s) per socket: 8 Socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 60 Model name: Intel(R) Xeon(R) CPU E3-1246 v3 @ 3.50GHz Stepping: 3 CPU MHz: 3491.932 BogoMIPS: 6983.86 Hypervisor vendor: KVM Virtualization type: full L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 8192K NUMA node0 CPU(s): 0-7 Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm invpcid_single tpr_shadow vnmi flexpriority ept fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm xsaveopt
Zobaczysz, że brakuje technologii VT-x dla wirtualizacji
Virtualization: VT-x
- Możesz też to sprawdzić poleceniem:
Bash:
cat /sys/module/kvm_intel/parameters/nested
Rozwiązanie:
- Dla instancji VM, w której będziesz chciał uruchomić hypervisora, ustaw procesor jako passthrough
- W pliku
../.qpkg/QKVM/usr/etc/qvsd.d/44-preload/01-module
możemy zobaczyć jak stacja wirtualizacji wczytuje moduły kernelowe.
Bash:vim /share/CACHEDEV1_DATA/.qpkg/QKVM/usr/etc/qvsd.d/44-preload/01-module
Bash:load_kvm() { ___load_module kvm.ko ignore_msrs=1 check_ret # load kvm module if [ $VMX_FEATURE -ne 0 ]; then ___load_module kvm-intel.ko check_ret elif [ $SVM_FEATURE -ne 0 ]; then ___load_module kvm-amd.ko nested=0 check_ret elif [ $SVM_FEATURE -ne 0 ]; then elog "Platform not support KVM" exit 1 fi }
- Należy edytować ten plik (permanentne rozwiązanie do czasu kolejnej aktualizacji VM) i dodać do modułu kvm parametr
nested=1
, np:- Dla Intela:
Bash:___load_module kvm-intel.ko nested=1
- Dla AMD:
Bash:___load_module kvm-amd.ko nested=1
- Dla Intela:
- W tym momencie należy wykonać restart QNAP'a
- (Rozwiązanie natychmiastowe, ale nie pemanentne)
- Znajdź nazwę modułu KVM:
Bash:lsmod | grep kvm
Kod:kvm_intel 148558 10 kvm 420352 1 kvm_intel
- Wyszukaj plik modułu:
Bash:find /lib/ -name kvm-amd* # lub... find /lib/ -name kvm-intel*
Kod:/lib/modules/KVM/kvm-amd.ko /lib/modules/5.10.60-qnap/kvm-amd.ko
- Teraz zatrzymaj wszystkie maszyny wirtualne oraz wyłącz Virtualization Station
- Przeładuj moduł z parametrem nested=1 np.:
Bash:rmmod kvm-intel.ko rmmod kvm-amd.ko # Dla Intela: insmod /lib/modules/KVM/kvm-intel.ko nested=1 # Dla AMD: insmod /lib/modules/KVM/kvm-amd.ko nested=1
- Ponownie poleceniem z punktu pierwszego sprawdź czy moduł KVM jest załadowany:
Bash:lsmod | grep kvm
Kod:kvm_intel 148558 10 kvm 420352 1 kvm_intel
- Znajdź nazwę modułu KVM:
- Teraz możesz sprawdzić czy Nested KVM działa prawidłowo:
Bash:cat /sys/module/kvm_intel/parameters/nested
Y
Bash:cat /sys/module/kvm_intel/parameters/ept
Y
-
Bash:
lscpu
Kod:[root@localhost ~]# lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 8 On-line CPU(s) list: 0-7 Thread(s) per core: 1 Core(s) per socket: 8 Socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 60 Model name: Intel(R) Xeon(R) CPU E3-1246 v3 @ 3.50GHz Stepping: 3 CPU MHz: 3491.932 BogoMIPS: 6983.86 Virtualization: VT-x Hypervisor vendor: KVM Virtualization type: full L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 8192K NUMA node0 CPU(s): 0-7 Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm invpcid_single tpr_shadow vnmi flexpriority ept fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm xsaveopt
Voila!
Virtualization: VT-x