检测是否在虚拟机中运行,并根据情况以不同方式挂载

检测是否在虚拟机中运行,并根据情况以不同方式挂载

背景:我是第二个这个问题- 具有共享数据分区的双启动系统,并且希望在另一个操作系统的 VM 上运行其中一个操作系统。经过思考,我意识到可以通过将磁盘安装移出/etc/fstab并移入单独的启动脚本来解决此问题,该脚本直接从驱动器或 VM 软件共享的文件夹中安装数据分区,具体取决于系统是否在 VM 中运行。无论哪种方式,都可以在文件系统中的同一位置安装。

我更喜欢一种可以有三种状态的方法:“在 VM 中运行”、“在 VM 外运行”和“无法判断”。这样,如果它在 VM 中运行,但 VM 软件配置错误,导致共享文件夹未出现在虚拟化操作系统中(我以前遇到过这种情况),它就不会尝试安装实际驱动器并破坏一切。不幸的是,这排除了我唯一的想法,即“检查共享文件夹,如果它不在那里,则假设不是 VM。”

那么,该怎么做呢?最好不需要我每次启动时手动安装它。

如果相关的话,一个操作系统是 Windows 10,另一个是 Linux Mint,并且 Mint 可能是 VM 中的操作系统(有时)。

答案1

在 Linux 中,任何Linux 在 VM 环境中运行,通过以下方式表示虚拟机管理程序标记/proc/cpu信息。因此,在 Debian 主机中运行 Arch Linux 客户机,我得到(如须藤!):

# 猫/proc/cpuinfo
处理器:0
vendor_id:GenuineIntel
CPU 系列:6
型号:61
型号名称:Intel(R) Core(TM) i7-5500U CPU @ 2.40GHz
步进:4
CPU频率:2394.460
缓存大小:4096 KB
物理 ID:0
兄弟姐妹:1
核心 ID:0
CPU 核心:1
酸碱度:0
初始 apicid : 0
fdiv_bug :否
f00f_bug : 没有
coma_bug :否
fpu:是
fpu_exception :是
cpuid级别:20
wp :是的
标志:fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 系统调用 nx rdtscp lm constant_tsc xtopology nonstop_tsc eagerfpu pni pclmulqdq 监视器 ssse3 cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx rdrand虚拟机管理程序lahf_lm abm 3dnowprefetch rdseed
错误:
博戈米普斯:4790.45
clflush 大小:64
缓存对齐:64
地址大小:39 位物理地址,48 位虚拟地址
能源管理:

有时人们会使用一个名为虚拟什么(在大多数存储库中可用)来执行此操作,但这对你的情况来说麻烦多于它的价值;此外,它需要安装额外的软件(虚拟什么解码如果您的发行版中没有默认附带此功能(例如 Arch Linux 的情况)。

相关内容