昨天發佈,今天早上來公司,發現線上有臺vm鏡像損壞,vhd-util check -n xxx 之後,報錯“failed to get batmap header”
正好前段時間研究tapdisk2的時候,順便看了vhd的文件格式,及一些元數據處理函數。
在libvhd.c裏面加了一些調試信息,定位到checksum不對。心中暗喜,還好不是數據丟了,只是batmap的問題
解決辦法就是把block的bitmap和batmap,對比,檢查哪個batmap沒更新
由於代碼很久沒碰了,生疏了,花了一下午時間,才搞定了,最後代碼分析的結果是batmap和bitmap完全對應
看來就是在最後回寫到文件的時候,batmap header,沒有成功,導致裏面的checksum沒更新成功。
把最新的checksum更新到文件中,vhd-util check -n xxx後,得到“xxx is valid”
哎,一下午的時間就折騰這個小破文件了,我勒個去啊。