xend呼叫xenstore的出錯揭秘

2021-06-17 23:46:00 字數 1085 閱讀 7089

近期發現幾例問題,均是xend裡面報了同乙個錯誤

file "/usr/lib64/python2.4/site-packages/xen/xend/xenstore/xstransact.py", line 29, in __init__

self.transaction = xshandle().transaction_start()

error: (2, 'no such file or directory')

好吧,可能有人會覺得我們太土了,怎麼還在用xend,我也很鄙視自己。不管怎樣,既然有問題,就得解決。剛好xenstore的實現之前也不是非常了解,藉此好好學習下。

根據xend報錯的路徑,可以發現xshandle這個方法,裡面的乙個例項,只在xend start初始化一次即可。那麼可以排除xshandle()這個方法出錯。

transaction_start這個方法是python呼叫xenstore的c庫方法。

xenstore一般大家都理解成乙個小型db,裡面存了各種domain有用的資訊,我們用的還是c版的,社群已有乙個ocalm寫的,不過還沒試用過。還好是c的,還能看懂,換了ocalm的,又要多花點一點時間了。

具體**邏輯也就不多說了,看了應該都能明白。大致流程簡單說下,就是開啟xenstore的時候,建立乙個連線,有對應的connection的資料結構,還有乙個全域性的context的東西,它裡面的儲存著最新資料的檔案fd,及相關資料資訊。所以有時候,讀xenstore,可以直接記憶體返回,有的時候,需要重新讀檔案,寫檔案,這個就是transaction做的事情。

乙個transaction_start,就是會用原來的fd讀取所有資料,然後把它寫到乙個新的檔案, transaction_end的時候,會rename成原來的檔案,這就是事務的實現方法。

所以看到這裡,結合errorcode,就很容易懷疑是檔案操作出錯之類,然後翻看系統的message日誌,果然,在xend出錯的時間點都對應有磁碟出錯的日誌。

謎底揭曉:系統盤出錯導致xend呼叫xenstore出錯

解決方案:可以臨時把/var/lib/xenstored/ 軟連線到/dev/shm, 再把tdb考到/dev/shm下。中間最好xend stop,避免資訊出現不一致問題。

Xen的配置和xend伺服器的相關命令

xen 的配置和 xend 伺服器的相關命令 一 xen 的相關檔案存放位置 xen 安裝後,檔案放在什麼地方了呢?主要放在以下幾個目錄 1 核心及xen 自身存放於 boot 安裝有xen 的作業系統下的 boot 目錄中,存放 xen 本身及支援 xen 的核心檔案。比如檔名帶有 xen0 和x...

C 函式的傳值呼叫 指標呼叫 引用呼叫

該方法把引數的實際值複製給函式的形式引數。在這種情況下,修改函式內的形式引數對實際引數沒有影響。include using namespace std 函式宣告 void swap int x,int y int main 函式定義 void swap int x,int y 呼叫函式的時候,在函式...

Lua函式的呼叫( 和 的呼叫區別)

本人稍加修改。lua中類的函式定義方式有三種方法 定義方式 tab.func function 引數 body end function tab.func 引數 body end function tab func 引數 body end其中,兩種定義方式與普通函式的定義一樣。方式 採用 來定義,實...