Una domanda interessante Ho effettuato l'accesso a un host Linux (molto probabilmente SuSE). C'è un modo per dire a livello di codice che sono un host di macchine virtuali o no?
Supponi anche che i vmtools non siano installati.
Una domanda interessante Ho effettuato l'accesso a un host Linux (molto probabilmente SuSE). C'è un modo per dire a livello di codice che sono un host di macchine virtuali o no?
Supponi anche che i vmtools non siano installati.
Risposte:
Utilizzare strumenti Linux standard per ispezionare l'hardware sul sistema.
cat /proc/scsi/scsi
o
ethtool -i eth0
o
dmidecode | grep -i vmware
Se l'output di questi comandi mostra l'hardware con il nome del produttore "VMWare", ci si trova su una VM VMWare. Qui vengono forniti più comandi perché le configurazioni e gli strumenti di sistema differiscono.
cat /proc/scsi/scsi
è bello perché sembra essere disponibile ovunque e non richiede l'installazione di nuovo software o l'esecuzione con diritti privilegiati.
/proc/scsi/scsi
sulla mia scatola di Debian 7 ...
man virt-what
lo script euristico creato per questo scopo di rilevamento (per sistemi RedHat / Fedora) e per le avvertenze coinvolte.
facter virtual
xenu
indica che si tratta di una macchina virtuale. Se ha restituito "fisico", è vero il contrario (non una macchina virtuale), ad esempio:
facter virtual
Physical
Potresti essere in grado di ottenere e idea guardando in giro /sys
. Ad esempio /sys/class/dmi/id/sys_vendor
ha un valore di VMware, Inc.
.
Se è installato è possibile utilizzare lshw . Il comando lshw -class system
restituisce questo sul mio sistema:
server1
description: Computer
product: VMware Virtual Platform
vendor: VMware, Inc.
version: None
serial: VMware-...
width: 64 bits
capabilities: smbios-2.4 dmi-2.4 vsyscall64 vsyscall32
Alcuni ambienti virtuali nominano alcuni dei loro dispositivi virtuali con nomi un po 'rivelatori, ad esempio VirtualBox che presenta una scheda grafica che si chiama "VirtualBox Display Adapter". Ma la ricerca di questi ti lega a una particolare VM e forse a una gamma ristretta di versioni.
Potrebbe essere possibile per il tuo codice vedere quale tipo di virtualizzazione potrebbe impostare. Se il problema persiste, potresti trovarti in una macchina virtuale. Ma potresti essere facilmente su una scatola che non ha hardware compatibile con VM.
Per Linux scrivi dmesg |grep DMI
:
[root @ myhost ~] # dmesg | grep DMI DMI 2.3 presente. DMI: macchina virtuale Microsoft Corporation / macchina virtuale, BIOS 090006 23/05/2012 [root @ myhost ~] # dmesg | grep -i virtual DMI: macchina virtuale Microsoft Corporation / macchina virtuale, BIOS 090006 23/05/2012 Avvio del kernel paravirtualizzato su hardware nudo input: emulazione del pulsante del mouse Macintosh come / devices / virtuale / input / input1 scsi 0: 0: 0: 0: QQ del disco virtuale Msft ad accesso diretto 1.0: 0 ANSI: 4 input: Mouse conforme a Microsoft Vmbus HID come / devices / virtuale / input / input4
[root @ backdev1 ~] # dmesg | grep DMI DMI 2.5 presente. DMI: IBM System x3650 M3 - [7945AC1] - / 90Y4784, BIOS - [D6E153AUS-1.12] - 30/06/2011
C'è un sacco di codice là fuori per rilevare se ci si trova in una VM o no. Inizia con la pillola rossa e cerca da lì. Anche questo articolo su Offensive Computing è una buona lettura.
Questo se nessuno di quelli facili sopra funziona :)
Puoi anche cercare la prima parte del tuo indirizzo mac qui e vedere se è elencato come assegnato a una delle società di virtualizzazione.
Non mi è piaciuta nessuna di queste soluzioni, in quanto di solito è installato un driver VMware CDROM o un driver di memoria, quindi dmesg lo conferma o lo nega rapidamente per me.
[server @ utente ~] $ dmesg | grep VMware hda: unità CDROM IDE virtuale VMware, unità CD / DVD-ROM ATAPI Venditore: Modello VMware: Disco virtuale Rev: 1.0 Venditore: Modello VMware: Disco virtuale Rev: 1.0 Venditore: Modello VMware: Disco virtuale Rev: 1.0 Venditore: Modello VMware: Disco virtuale Rev: 1.0 Venditore: Modello VMware: Disco virtuale Rev: 1.0 Venditore: Modello VMware: Disco virtuale Rev: 1.0 Venditore: Modello VMware: Disco virtuale Rev: 1.0 Driver di controllo memoria VMware inizializzato
Questo ha funzionato meglio per me in quanto mi fornisce informazioni specifiche sul produttore e sul nome del prodotto.
dmidecode -t system|grep 'Manufacturer\|Product'
Uscita sul server Dell:
Manufacturer: Dell Inc.
Product Name: PowerEdge C5220
Output su Virtualbox VM:
Manufacturer: innotek GmbH
Product Name: VirtualBox
Uscita su KVM / QEMU:
Manufacturer: QEMU
Product Name: Standard PC (i440FX + PIIX, 1996)
Questo è ottimo per gli script che possono analizzarli per una migliore identificazione dei server ... ma se usi Chef nella tua infrastruttura, puoi controllare l'attributo del nodo Virtualization -> system
nel server chef.
Mi piace molto:
hostnamectl status
o concreto:
hostnamectl status | grep "Chassis:"
Come verificare se un sistema Linux è una macchina fisica o virtuale
16 metodi per verificare se un sistema Linux è una macchina fisica o virtuale