2015-11-16 47 views
1

我正在尋找一種獨特的方式來識別虛擬機(VM)在Azure或Hyperv上運行。 像所有僅在Azure上運行的虛擬機都具有此標識。 我也需要知道VM啓動階段本身,而不是VM啓動並運行之後。我想主要區分在Azure上運行的VM和Hyper-v。從Linux虛擬機如何檢測/識別Azure平臺

例如,我們可以使用PCI BUS ID 14145353(讀取總線/ pci/devices文件)來檢測Hyper-v上運行的VM。我正在尋找類似於天藍色的東西。

-Thanks

回答

1

你可以通過/var/log/waagent.log,尋找最近的Retrieved GoalState from Windows Azure Fabric,或者尋找面料終點IPv4地址,並檢查它是否到達。不太友善但同樣有效的方法是查看最新的DHCP租約並查找選項245.

2

選項「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/dh​​client/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 

sourcesource

相關問題