前言: 因為機房服務器運行不穩定的原因導致計算節點掛掉,然后上面的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
#取消它原來有的一些屬性;根據ceph的提示操作,因為有的屬性linux不支持。
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
這個時候再重新啟動就正常了。
感謝網上上傳資料分享的博客,我搜集並處理了故障,終結了出來,希望更多的人看到早日跳出坑!