Loop設備不夠導致Xen虛擬機啓動失敗(轉)

今天,在管理Xen虛擬機的時候遇到了問題,新建了一臺虛擬機後無法啓動安裝系統,查看了Xen的日誌,以及手動啓動的時候,都有如下錯誤:
Error: Device 5632 (vbd) could not be connected. /etc/xen/scripts/block failed; error detected.
這錯誤,讓我直接摸不着頭腦,於是修改設置繼續啓動嘗試,突然發現,在沒加載ISO鏡像文件的時候,居然能啓動,腦子裏一個念頭閃過,莫非是鏡像文件的問題,導致無法加載?
於是,我打算檢查一下ISO文件,但是我發現別的虛擬機也是使用的這個鏡像文件,而且主要配置都是一樣的,看來不是文件的問題。
不是文件問題,那就是掛載的問題了,因爲Xen虛擬機是需要用loop設備來掛載ISO,所以我就執行了如下命令,來確認loop設備使用情況:

1
[root@Xen28 ~]# losetup -a

發現loop0到loop7的8個loop設備都在使用中,我心裏開始懷疑是loop設備不夠,導致無法掛載,於是執行:

1
2
[root@Xen28 ~]# losetup -f
losetup: could not findany freeloop device

從命令的結果看,果然是沒有空閒的loop設備了,欣喜萬分。原來別的虛擬機用完ISO,並未卸載,所以造成loop設備沒有釋放。

接下來,開始解決這個問題,希望一切順利,首先看下loop模塊的信息:

1
2
3
4
5
6
7
8
9
[root@Xen28 ~]# modinfo loop
filename:       /lib/modules/2.6.18-274.7.1.el5xen/kernel/drivers/block/loop.ko
alias:          block-major-7-*
license:        GPL
srcversion:     7B77C38DEABD5C685E795FF
depends:
vermagic:       2.6.18-274.7.1.el5xen SMP mod_unload gcc-4.1
parm:           max_loop:Maximum number of loop devices (1-256) (int)
module_sig:     883f3504ea0954be35359b9fcadd151125a9d09f649151114794604f3adde24c301a20c4f78c8fcf0a0c175da675dc147c01d440e1c9698cbe785e76c8

從parm:那行可以看出,我們的系統最多支持256個loop設備,並且在模塊加載的時候支持max_loop參數指定loop設備最大加載個數,我打算設置128個,修改/etc/modprobe.conf文件,加入:

1
options loop max_loop=128

然後需要重新加載loop模塊,我會的方法,有如下兩種:
1.因爲別的虛擬機正在使用loop設備,所以無法直接卸載loop模塊,必須先卸載正在使用的loop設備,
並重啓已經啓動的虛擬機,讓卸載生效,然後執行下面的命令:

1
[root@Xen28 ~]# rmmod loop && modprobe loop

如果沒有錯誤發生,那麼就會正常創建128個loop設備,你可以查看一下:

1
[root@Xen28 ~]# ls /dev/loop*

2.直接重啓系統:

1
[root@Xen28 ~]# shutdown -r now

我採用的第一種方法,我的操作步驟是這樣的(爲了100%確認是loop設備不夠):
1.先卸載某一臺虛擬機的ISO,然後重啓該虛擬機。
2.確認有一個loop設備處於空閒狀態。
3.加載ISO文件啓動新建的虛擬機,發現可以啓動,順利到了安裝系統界面。
4.卸載所有虛擬機ISO並重啓,開始執行rmmod loop && modprobe loop

後話,我暫時沒找到不重啓已經存在的虛擬機或者不重啓系統來解決這個問題的方法,我嘗試過手動創建loop設備文件,可是不生效。如果讀者中有知道的,希望能夠賜教。

我採用第一種方法,先關閉所有虛擬機,修改/etc/modprobe.conf

添加options loop max_loop=128

執行:rmmod loop && modprobe loop

ll /dev/loop*

開啓虛擬機

來源:http://www.litvip.com/599/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章