- 當你身為一個廠商連到客戶端的設備時,是否也有過質疑客戶使用虛擬機造成效能不彰的問題?
- 抑或是 host 造成的 bugs 影響 guest
- 或是單純你只想知道目前所使用的 host software 是哪一種
記得當時找了蠻久的,都沒有相對應的 solution,結果就在我一個無意間的 Google 逛街下看到「7 Ways to Detect Virtualization from your VM」
從文中選了一個號稱能在任何的 Linux 編譯成功,並且在我目前環境中都能判斷成功的 virt-what
On Parallels
$ virt-what
parallels
On VirtualBox
$ virt-what
virtualbox
On OpenStack
$ virt-what
kvm
由於用 virt-what 判斷 OpenStack 不會明顯的提示為 OpenStack,僅會顯示 kvm,這樣就無法判別是 OpenStack 或 KVM 了。
好在可以從 /dev/disk/by-id 這個目錄來確認是不是 OpenStack !! 如果是 OpenStack 通常不會存在 /dev/disk/by-id 這個目錄。
Why
在一般的 Virtual Machine 都會在 /dev/disk/by-id 替 disk 產生一個 UUID link 到實際硬碟位置 (sda、sda1、sdb ... etc)
$ ls -l /dev/disk/by-id/
total 0
lrwxrwxrwx 1 root root 9 Jan 2 00:33 ata-u02-Ubuntu-0_SSD_H27AXNE0H76MV18T13AG -> ../../sda
lrwxrwxrwx 1 root root 10 Jan 2 00:33 ata-u02-Ubuntu-0_SSD_H27AXNE0H76MV18T13AG-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Jan 2 00:33 ata-u02-Ubuntu-0_SSD_H27AXNE0H76MV18T13AG-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 Jan 2 00:33 ata-u02-Ubuntu-0_SSD_H27AXNE0H76MV18T13AG-part5 -> ../../sda5
..
..
etc
但是在 OpenStack 在新增 disk 的時候就會自動生成 UUID 了,所以不會在 /dev/disk/by-id 裡面產生 UUID link,這個在 Cinder bugs 有提到是 VMWare 的 default 設定
The work around given is to set disk.EnableUUID to True for the Linux VM. In case of Openstack volumes, as the uuid of virtual disk/VMDK disk is autogenerated, if user tries to enable this property the /dev/disk/by-id shows the autogenerated uuids for the VMDK disks. Due to this the user/application has no means to identify the Openstack volume. Instead if the uuid of VMDK disk is same as the Openstack volume ID, it helps in identifying the Openstack created volumes.
但是他也可以透過修改 vmx 啟動啦,不過通常沒有這個必要。
disk.EnableUUID = True
參考資料:
Cinder VMDK driver : uuid of VMDK disk file needs to be the same as of corresponding Cinder volume ID
7 Ways to Detect Virtualization from your VM [Xen,VirtualBox,KVM,OpenStack with KVM]
Orignal From: 用 virt-what 判斷是否為虛擬機、了解為何 OpenStack / VMWare 為何沒有 disk by-id
沒有留言:
張貼留言