過程描述:
- 創(chuàng)建虛擬機(jī)win2008
- 通過sysprep封裝下win2008并關(guān)機(jī)
- 基于此vm創(chuàng)建模版win2008-tmpl
- 基于模版win2008-tmpl創(chuàng)建clone/thin模式虛擬機(jī)win2008-vm003
- 首次啟動(dòng)win2008-vm003成功
- 關(guān)機(jī)再啟動(dòng)win2008-vm003失敱昊ΑC颗瘛(可重現(xiàn))
日志分析
less /var/log/libvirt/qemu/win2008_vm003.log (vdsm.log,engine.log略過)
2015-07-30T05:43:49.621585Z qemu-kvm: -drive file=/var/run/vdsm/payload/4c90582e-f337-4240-8747-50ed94dcd044.8580d6eeef5171d2fbdca8f7699028b8.img,if=none,id=drive-fdc0-0-0,format=raw,serial=:
could not open disk image /var/run/vdsm/payload/4c90582e-f337-4240-8747-50ed94dcd044.8580d6eeef5171d2fbdca8f7699028b8.img:
Could not open '/var/run/vdsm/payload/4c90582e-f337-4240-8747-50ed94dcd044.8580d6eeef5171d2fbdca8f7699028b8.img': Permission denied
2015-07-30 05:43:49.787+0000: shutting down
根據(jù)日志應(yīng)該是找不到payload的img,查看/var/run/vdsm/payload目錄,確實(shí)沒有此img(但首次啟動(dòng)vm時(shí)此img存在)
另:redhat有提這個(gè)bug,但沒提出目前版本3.5.3的解決方法,只說ovirt3.6已解決此問題。
解決方法##
1. 分析
由于本vm是通過模版創(chuàng)建且模版機(jī)通過sysprep封裝過驳糯,engine會(huì)在vm首次啟動(dòng)時(shí)創(chuàng)建sysprep payload(前面報(bào)錯(cuò)的img),當(dāng)關(guān)閉vm時(shí)payload的img會(huì)自動(dòng)刪除,但數(shù)據(jù)庫并沒有清理該device條目氢橙。而我們?cè)俅藛?dòng)時(shí)并不需要掛載此payload,且所在路徑/var/run/vdsm/payload也已沒有img酝枢,導(dǎo)致數(shù)據(jù)庫中的記錄和實(shí)際不一致,而啟動(dòng)虛擬機(jī)時(shí)會(huì)自動(dòng)讀數(shù)據(jù)庫條目并添加了啟動(dòng)選項(xiàng)
`-drive file=/var/run/vdsm/payload/4c90582e-f337-4240-8747-50ed94dcd044.8580d6eeef5171d2fbdca8f7699028b8.img`悍手,而實(shí)際上已沒用此img隧枫,所以報(bào)錯(cuò)無法找到payload的img。
2. 解決方法
根據(jù)上面的分析谓苟,考慮直接刪除engine的數(shù)據(jù)庫相關(guān)條目,vm的device都存放在表vm_device中协怒。以下為具體操作命令(除非緊急需要涝焙,不建議修改生成環(huán)境中的engine數(shù)據(jù)庫):
su - postgres #切換到數(shù)據(jù)庫賬戶
ps_dump engine > engine.sql.bak #備份engine的數(shù)據(jù)庫
psql engine #連接到engine數(shù)據(jù)庫
SELECT vm_guid FROM vms WHERE vm_name='win2008_vm003'; #查找win2008_vm003的ID(4c90582e-f337-4240-8747-50ed94dcd044)
DELETE FROM vm_device WHERE vm_id='4c90582e-f337-4240-8747-50ed94dcd044' and device=floppy; #根據(jù)查找到的ID來刪除vmPayload設(shè)備
3. 驗(yàn)證
再次啟動(dòng)win2008_vm003
查看qemu/win2008_vm003.log,未發(fā)現(xiàn)啟動(dòng)項(xiàng)目
`-drive file=/var/run/vdsm/payload/4c90582e-f337-4240-8747-50ed94dcd044.8580d6eeef5171d2fbdca8f7699028b8.img`
查看win2008_vm003狀態(tài),已正常啟動(dòng)