
检查 Linux 系统是运行在虚拟机上还是物理机上
要检查Linux系统是运行在虚拟机上还是物理机上,我们可以通过查看系统的硬件信息来实现,我们需要知道虚拟机通常使用的是虚拟化技术,如KVM(Kernel-based Virtual Machine),Xen等,而物理机则直接与硬件进行交互,我们可以检查系统中是否存在这些虚拟化技术的相关信息来判断系统是在虚拟机上还是在物理机上运行。
1. 检查CPU信息
在Linux系统中,我们可以使用`lscpu`命令来查看CPU的详细信息,如果输出中包含“Intel(R) Virtualization Technology”或“AMD-V”,那么系统可能是运行在虚拟机上的。
$ 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: 2 Core(s) per socket: 4 Socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 158 Model name: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz Stepping: 9 CPU MHz: 2800.000 CPU max MHz: 3800.0000 CPU min MHz: 800.0000 BogoMIPS: 5599.97 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 6144K 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 dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb invpcid_single pti tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear flush_l1d
2. 检查内存信息
我们还可以使用`free`命令来查看系统的内存信息,如果输出中的“MemTotal”和“MemAvailable”的值相差较大,那么系统可能是运行在虚拟机上的,这是因为虚拟机会为每个虚拟机分配一定数量的内存,这部分内存不会计入“MemTotal”。
$ free -h total used free shared buff/cache available Mem: 7.7Gi 2.1Gi 1.5Gi 349Mi 4.3Gi 3.5Gi Swap: 2.0Gi 1.0Gi 1.0Gi
3. 检查磁盘信息
我们还可以使用`lsblk`命令来查看磁盘的信息,如果输出中包含多个磁盘设备,那么系统可能是运行在虚拟机上的,这是因为虚拟机会为每个虚拟机创建一个磁盘镜像文件,这个文件会被挂载到系统中。
$ lsblk -o MOUNTPOINTS,NAME,SIZE,ROTATED,FSTYPE,LABEL,MODEL,SERIAL NODEID,RODATA,NODENAMES --json devices.json
接下来,我们来回答一个相关问题:如何确定Linux系统是运行在物理机还是虚拟机上?