1. 程式人生 > 實用技巧 >openstack宿主機故障,虛擬例項恢復

openstack宿主機故障,虛擬例項恢復

前言: 因為機房伺服器執行不穩定的原因導致計算節點掛掉,然後上面的Centos7虛擬機器在遷移之後開機報錯。這個解決方法同樣適用於其它作業系統的虛擬機器。基於映象建立的虛擬機器例項。

I/O error, can't read device /dev/vda 的報錯資訊

首先做疏散先把虛擬例項從宿主機上面疏散到其它主機,關閉雲主機。

1.找到虛擬機器的ID可以通過dashboard介面或者使用openstack server list命令,找到虛擬機器的ID;然後檢視虛擬機器的詳細資訊。

比如:

nova show 8fa3d2eb-2401-48a9-850a-f800314c6950

# 與這個命令相同功能的命令還有
openstack server show ID

連線到所在的計算節點,例項名稱確定是哪臺主機。

通過ID可以確定該虛擬機器例項的資料目錄,如果openstack沒有對接儲存的話那麼在這個目錄下就會存在資料檔案,因為對接了ceph所以資訊在libvirt.xml的檔案裡面。

cat /var/lib/nova/instances/8fa3d2eb-2401-48a9-850a-f800314c6950/libvirt.xml 裡面就是它的vda的ID。

2.當找到這個磁碟的ID之後,在ceph叢集裡面去檢視這個裝置

rbd ls volumes | grep 8fa3d2eb-2401-48a9-850a-f800314c6950

3.取消它原來有的一些屬性

# 檢視卷
rbd info volumes/0859147d-27aa-49a5-8373-7c515c4f3a02_disk

#取消它原來有的一些屬性
rbd feature disable exclusive-lock object-map fast-diff  deep-flatten --image 8fa3d2eb-2401-48a9-850a-f800314c6950_disk -p volumes

4.把它對映到本地

rbd map 8fa3d2eb-2401-48a9-850a-f800314c6950_disk -p volumes

# 如果對映不了執行下這個命令。
rbd flatten volumes/8fa3d2eb-2401-48a9-850a-f800314c6950_disk

5.使用命令修復

# 有的可能修復不了就只能做好丟失資料的準備了
xfs_repair -L /dev/rbd0p1

可以ls /dev/rbd* 檢視一下,rbd0p1表示的事一個啟動分割槽。

6.取消對映

rbd unmap 8fa3d2eb-2401-48a9-850a-f800314c6950_disk -p volumes

這個時候再重新啟動就正常了。