qemu-img check命令詳解


1、問題現象

生產環境上,對計算節點文件系統修復,導致某些虛機的鏡像文件數據丟失,出現異常,最終造成虛機無法啟動,查看對應計算節點的nova日志,報如下錯誤

nova-compute: File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py", line 2560, in power_on
nova-compute: self._hard_reboot(context, instance, network_info, block_device_info)
nova-compute: File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py", line 2449, in _hard_reboot
nova-compute: vifs_already_plugged=True)
nova-compute: File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py", line 5191, in _create_domain_and_network
nova-compute: destroy_disks_on_failure)
nova-compute: File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 220, in __exit__
nova-compute: self.force_reraise()
nova-compute: File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 196, in force_reraise
nova-compute: six.reraise(self.type_, self.value, self.tb)
nova-compute: File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py", line 5163, in _create_domain_and_network
nova-compute: post_xml_callback=post_xml_callback)
nova-compute: File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py", line 5081, in _create_domain
nova-compute: guest.launch(pause=pause)
nova-compute: File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/guest.py", line 145, in launch
nova-compute: self._encoded_xml, errors='ignore')
nova-compute: File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 220, in __exit__
nova-compute: self.force_reraise()
nova-compute: File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 196, in force_reraise
nova-compute: six.reraise(self.type_, self.value, self.tb)
nova-compute: File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/guest.py", line 140, in launch
nova-compute: return self._domain.createWithFlags(flags)
nova-compute: File "/usr/lib/python2.7/site-packages/eventlet/tpool.py", line 186, in doit
nova-compute: result = proxy_call(self._autowrap, f, *args, **kwargs)
nova-compute: File "/usr/lib/python2.7/site-packages/eventlet/tpool.py", line 144, in proxy_call
nova-compute: rv = execute(f, *args, **kwargs)
nova-compute: File "/usr/lib/python2.7/site-packages/eventlet/tpool.py", line 125, in execute
nova-compute: six.reraise(c, e, tb)
nova-compute: File "/usr/lib/python2.7/site-packages/eventlet/tpool.py", line 83, in tworker
nova-compute: rv = meth(*args, **kwargs)
nova-compute: File "/usr/lib64/python2.7/site-packages/libvirt.py", line 1065, in createWithFlags
nova-compute: if ret == -1: raise libvirtError ('virDomainCreateWithFlags() failed', dom=self)
nova-compute: libvirtError: internal error: process exited while connecting to monitor: 2020-03-16T01:44:43.128499Z 
qemu-kvm: -drive file=/os_instance/3dc75704-f729-4c33-865b-313f0e8a8df8/disk,format=qcow2,if=none,id=drive-virtio-disk0,cache=none:
qcow2: Image is corrupt; cannot be opened read/write

2、修復方法

進入到虛機disk的目錄下,執行qemu-img check disk,檢查鏡像數據的一致性,發現很多error,執行qemu-img check -r all disk命令,對磁盤鏡像進行修復,最后重啟虛機即可

3、qemu-img check命令詳解

qemu-img check [-f fmt]  [--output=ofmt]  [-r [leaks | all]]  filename

對磁盤鏡像文件進行一致性檢查,查找鏡像文件中的錯誤,目前僅支持對“qcow2”、“qed”、“vdi”格式文件的檢查。其中,qcow2是QEMU 0.8.3版本引入的鏡像文件格式,也是目前使用最廣泛的格式。qed(QEMU enhanced disk)是從QEMU 0.14版開始加入的增強磁盤文件格式,為了避免qcow2格式的一些缺點,也為了提高性能,不過目前還不夠成熟。而vdi(Virtual Disk Image)是Oracle的VirtualBox虛擬機中的存儲格式。

參數-f fmt是指定文件的格式,如果不指定格式qemu-img會自動檢測,filename是磁盤鏡像文件的名稱(包括路徑)。

如果指定了“-r”,qemu-img將嘗試修復在檢查時發現的任何非一致性。在使用qemu-img check -r 命令執行,最好對磁盤文件進行備份,-r leaks 僅修復集群損壞。

-r all修復各種類型的錯誤,該命令執行后,會有一個退出碼,不同的數字,表示不同的檢測結果

0 檢查完成,鏡像(現在)是一致的

1 檢查由於內部錯誤而未完成

2 檢查完成,鏡像已損壞

3 檢查完成,鏡像已泄漏集群,但沒有損壞

63 鏡像格式不支持檢查



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM