我正在尋找一種獨特的方式來識別虛擬機(VM)在Azure或Hyperv上運行。 像所有僅在Azure上運行的虛擬機都具有此標識。 我也需要知道VM啓動階段本身,而不是VM啓動並運行之後。我想主要區分在Azure上運行的VM和Hyper-v。從Linux虛擬機如何檢測/識別Azure平臺
例如,我們可以使用PCI BUS ID 14145353(讀取總線/ pci/devices文件)來檢測Hyper-v上運行的VM。我正在尋找類似於天藍色的東西。
-Thanks
我正在尋找一種獨特的方式來識別虛擬機(VM)在Azure或Hyperv上運行。 像所有僅在Azure上運行的虛擬機都具有此標識。 我也需要知道VM啓動階段本身,而不是VM啓動並運行之後。我想主要區分在Azure上運行的VM和Hyper-v。從Linux虛擬機如何檢測/識別Azure平臺
例如,我們可以使用PCI BUS ID 14145353(讀取總線/ pci/devices文件)來檢測Hyper-v上運行的VM。我正在尋找類似於天藍色的東西。
-Thanks
你可以通過/var/log/waagent.log
,尋找最近的Retrieved GoalState from Windows Azure Fabric
,或者尋找面料終點IPv4地址,並檢查它是否到達。不太友善但同樣有效的方法是查看最新的DHCP租約並查找選項245.
選項「unknown-245」是Azure專有選項,它只能由Azure DHCP服務器發佈。由於在Azure中,您始終會通過DHCP獲取地址(靜態IP也由DHCP和REST管理API管理),您將始終(僅在理論上)在機器運行時將此選項作爲DHCP租用屬性的一部分在Azure中。
您可以創建一個bash腳本,例如以下腳本來檢測選項unknown-245是否可用,以獲取是否在Azure中運行的第一個指示符。
Ubuntu的
if `grep -q unknown-245 /var/lib/dhcp/dhclient.eth0.leases`; then
echo 「Running in an Azure VM」
fi
爲CentOS基於虛擬機的DHCP租用選項的確存儲在路徑/var/lib/dhclient/dhclient.leases(或在多個網絡接口的dhclient-eth0.leases情況下而部分eth0需要用您要檢查的網絡接口設備替換)。
因此,在只有一個以太網適配器默認配置腳本需要如下的CentOS的虛擬機的內部工作進行更新:
# manually start dhclient (seems to be a workaround)
dhclient
# then check against the lease files
if `grep -q unknown-245 /var/lib/dhclient/dhclient.leases`; then
echo "Running in Azure VM"
fi
另一種方法是閱讀從微軟Azure代理其配置總是安裝在Linux VM上,並嘗試在主機代理端訪問它的ping對象。如果虛擬機未在Azure中運行,則嘗試訪問主機代理端點始終會導致超時。下面是這樣一個示例腳本:
curl –connect-timeout 1 `grep FullConfig /var/lib/waagent/GoalState.1.xml | perl -pe ‘s/<.?FullConfig>//g; s/\s//g’` && echo azure || echo no-azure