本文转自:http://www.dmo.ca/blog/detecting-virtualization-on-linux/
Update: You may be interested in [[the perl module|perl-module-for-virtualization-detection]] implementing these tricks. Frequently, our customers want to install our software in a virtual machine. This can be OK, but frequently they hit a CPU, memory, or IO limit caused by running in a constrained virtual environment. When this happens, we really like to know if they're running under virtualization when we try to support them. Here's some tricks to detect, from a shell, if the system is virtualized. The first thing to check is dmesg. On a recently-booted system, checking the 'dmesg' command output may be sufficient. Otherwise, try "cat /var/log/dmesg" instead of "dmesg" VMWare: QEmu or KVM: If the "-cpu host" option has not been used, QEmu and KVM will identify themselves as: otherwise, the host's CPU information will be used both in dmesg, or in /proc/cpuinfo. However, you should see something like: on newer kernels that understand that they're running under paravirtualization. (Thanks to René Pfeiffer for pointing this out) Microsoft VirtualPC: Xen (thanks, wardi and others) Virtuozzo On longer-running systems, you may need to grep /var/log/dmesg instead. If that doesn't produce anything useful, try using dmidecode to look at the BIOS information. Frequently, there will be at least one component identifying itself as virtualized: VMWare: Microsoft VirtualPC: QEMU or KVM: Virtuozzo: Xen: You should just examine the output of dmidecode directly rather than trying to grep as above, in case the output changes. QEMU, for example, doesn't report the vendor in all versions. Next, check disk devices for identification as virtualized: VMWare: Microsoft VirtualPC: QEMU, KVM, or Xen: Virtuozzo: If you've got tips for other virtualized environments, let me know and I'll add them to the list.
# dmesg | grep -i virtual VMware vmxnet virtual NIC driver Vendor: VMware Model: Virtual disk Rev: 1.0 hda: VMware Virtual IDE CDROM Drive, ATAPI CD/DVD-ROM drive
# dmesg | grep -i virtual CPU: AMD QEMU Virtual CPU version 0.9.1 stepping 03
$ dmesg | grep -i virtual [ 0.000000] Booting paravirtualized kernel on KVM
# dmesg | grep -i virtual hda: Virtual HD, ATA DISK drive hdc: Virtual CD, ATAPI CD/DVD-ROM drive
# dmesg | grep -i xen Xen virtual console successfully installed as tty1
# dmesg (returns no output) # cat /var/log/dmesg (returns no output) # ls -al /proc/vz veinfo veinfo_redir veredir vestat vzaquota vzdata
# dmidecode | egrep -i 'manufacturer|product' Manufacturer: VMware, Inc. Product Name: VMware Virtual Platform
# dmidecode | egrep -i 'manufacturer|product' Manufacturer: Microsoft Corporation Product Name: Virtual Machine
# dmidecode | egrep -i 'vendor' Vendor: QEMU
# dmidecode /dev/mem: Permission denied
# dmidecode | grep -i domU Product Name: HVM domU
# cat /proc/ide/hd*/model VMware Virtual IDE CDROM Drive # cat /proc/scsi/scsi Attached devices: Host: scsi0 Channel: 00 Id: 00 Lun: 00 Vendor: VMware Model: Virtual disk Rev: 1.0 Type: Direct-Access ANSI SCSI revision: 02
# cat /proc/ide/hd*/model Virtual HD Virtual CD
# cat /proc/ide/hd*/model QEMU HARDDISK QEMU DVD-ROM
# ls -al /dev/vzfs b-----x--- 1 root root 0, 19 2009-04-06 15:04 /dev/vzfs