Detectar se executando na VM e montar de forma diferente dependendo

0

Contexto: sou uma segunda pessoa que tinha este problema - um sistema de boot duplo com uma partição de dados compartilhada, além de querer executar um dos sistemas operacionais em uma VM no outro. Pensando nisso, percebi que poderia ser resolvido movendo a montagem do disco de /etc/fstab para um script de inicialização separado que monta a partição de dados diretamente da unidade ou de uma pasta compartilhada pelo software da VM, dependendo sobre se o sistema está sendo executado em uma VM ou não. De qualquer maneira para o mesmo lugar no sistema de arquivos.

Eu preferiria um método que pode ter três estados: "Executando na VM", "Executando fora da VM" e "não é possível identificar". Dessa forma, se ele estava sendo executado na VM, mas o software da VM foi configurado incorretamente para que a pasta compartilhada não apareça no sistema operacional virtualizado (já aconteceu comigo antes), ele não tenta montar a unidade real e quebrar tudo . Infelizmente, isso conta a única idéia que eu tive, que era "verificar a pasta compartilhada e, se ela não está lá, suponha que não seja uma VM".

Então, como isso pode ser feito? De preferência sem precisar que eu o monte manualmente toda vez que eu inicializo.

Se for relevante, um SO é o Windows 10 e o outro é o Linux Mint, e o Mint seria o que está em uma VM (às vezes).

    
por David Heyman 10.12.2016 / 23:10

1 resposta

1

No Linux, qualquer Linux em execução em um ambiente de VM é sinalizado pela presença de um sinalizador hypervisor em / proc / cpuinfo . Então, rodando um convidado do Arch Linux dentro de um host Debian, eu recebo (como sudo !):

# cat /proc/cpuinfo
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 61
model name  : Intel(R) Core(TM) i7-5500U CPU @ 2.40GHz
stepping    : 4
cpu MHz     : 2394.460
cache size  : 4096 KB
physical id : 0
siblings    : 1
core id     : 0
cpu cores   : 1
apicid      : 0
initial apicid  : 0
fdiv_bug    : no
f00f_bug    : no
coma_bug    : no
fpu     : yes
fpu_exception   : yes
cpuid level : 20
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx rdtscp lm constant_tsc xtopology nonstop_tsc eagerfpu pni pclmulqdq monitor ssse3 cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm 3dnowprefetch rdseed
bugs        :
bogomips    : 4790.45
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

Às vezes, as pessoas usam um script chamado virt-what (disponível na maioria dos repos) para fazer isso, mas isso é mais incômodo do que vale no seu caso; Além disso, é necessário instalar software extra ( virt-what e dmidecode se isso não for fornecido por padrão com sua distro, como é o caso, por exemplo, do Arch Linux).

    
por 11.12.2016 / 12:11