我曾经听到这么一个故事: 一个年轻的程序员问一个老程序员(一个比较牛逼的公司的CTO) 年轻程序员: 你为什么这么牛X., 就好像没有你不会的。老程序员: 积累的。年轻程序员: 怎么才能积累到您的程度呢。我每天都在积累。但是似乎都没有感觉到进步。老程序员: 我从20岁开始做到了一件事情,直到今天,而且尽可能地保证不间断。年轻程序员: 到底是什么? 老程序员: 我每天保证自己有2个小时在学习新的东西。

Loop设备不够导致Xen虚拟机启动失败

上一篇 / 下一篇  2012-01-17 16:03:53 / 个人分类:linux

From :http://litvip.com/2011/12/01/599

今天,在管理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 notfindanyfreeloop 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


TAG:

 

评分:0

我来说两句

Open Toolbar