Xen创建虚拟机 loop device 数目限制问题

Ubuntu 14 默认对 loop devices 支持的最大数目是8,所以当我创建第九个虚拟机的时候,出现了下面的错误:

Parsing config from /home/ye/ubuntu-pv/ubuntu-pv-9/ubuntu-pv-9.cfg
libxl: error: libxl_exec.c:118:libxl_report_child_exitstatus: /etc/xen/scripts/block add [7615] exited with error status 1
libxl: error: libxl_device.c:1138:device_hotplug_child_death_cb: script: Failed to find an unused loop device
libxl: error: libxl_create.c:1176:domcreate_launch_dm: unable to add disk devices
libxl: error: libxl_exec.c:118:libxl_report_child_exitstatus: /etc/xen/scripts/block remove [7668] exited with error status 1
libxl: error: libxl_device.c:1138:device_hotplug_child_death_cb: script: /etc/xen/scripts/block failed; error detected.
libxl: error: libxl.c:1610:libxl__destroy_domid: non-existant domain 22
libxl: error: libxl.c:1568:domain_destroy_callback: unable to destroy guest with domid 22
libxl: error: libxl.c:1495:domain_destroy_cb: destruction of domain 22 failed
查看一下当前正在使用的的 loop devices:

root@ccrfox141:/home/ye/ubuntu-pv/ubuntu-pv-9# losetup -a
/dev/loop0: [0804]:79497528 (/home/ye/ubuntu-pv/ubuntu-pv-1/ubuntu-pv-1.img)
/dev/loop1: [0804]:79497536 (/home/ye/ubuntu-pv/ubuntu-pv-2/ubuntu-pv-2.img)
/dev/loop2: [0804]:79497539 (/home/ye/ubuntu-pv/ubuntu-pv-3/ubuntu-pv-3.img)
/dev/loop3: [0804]:79497546 (/home/ye/ubuntu-pv/ubuntu-pv-4/ubuntu-pv-4.img)
/dev/loop4: [0804]:79497552 (/home/ye/ubuntu-pv/ubuntu-pv-5/ubuntu-pv-5.img)
/dev/loop5: [0804]:79497556 (/home/ye/ubuntu-pv/ubuntu-pv-6/ubuntu-pv-6.img)
/dev/loop6: [0804]:79497564 (/home/ye/ubuntu-pv/ubuntu-pv-7/ubuntu-pv-7.img)
/dev/loop7: [0804]:79497570 (/home/ye/ubuntu-pv/ubuntu-pv-8/ubuntu-pv-8.img)

在Ubuntu14下增加loop设备数量的方法

通过查看内核的配置文件可知(/boot/config-VERSION-generic),默认情况下,loop内核模块是编译进内核的,而不是单独成一个独立模块,而且默认情况下是只有8个Loop设备(最少只能够是8个)。

CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_LOOP_MIN_COUNT=8

这样的情况下,你有两种方法修改Loop设备的数量,一种是自己重新编译内核,修改内核的配置文件。而另外一种就是给内核传递参数,指定Loop设备的数量。这里不推荐使用第一种方式,所以忽略第一种,只讲解第二种方式:

一、Loop是一个独立的内核模块

Ubuntu14在默认情况下,loop内核模块是编译进内核的,可以通过lsmod命令查看模块是否是独立模块。

1. umount所有挂载在loop设备上的设备

2. 给loop模块指定参数 

cat 'options loop max_loop=64 > /etc/modprobe
3. 卸载loop模块 
4. 重新加载loop模块(有max_loop参数)
sudo modprobe loop
5. 查看现在loop设备的个数,现在loop设备的个数应该跟内核参数指定的一样
ls /dev/loop*

二、Loop模块被编译进内核

如果Loop被编译进内核,上面的方法是无效的,这个时候需要在启动系统的时候就告诉内核模块你需要的参数是什么,而不是进去系统后才告诉它。

把该参数添加到grub的控制文件中,只需要在/etc/default/grub里面进行修改:

GRUB_CMDLINE_LINUX="max_loop=64"
然后执行命令更新grub的配置

sudo update-grub
最后在/boot/grub里面检查配置文件,看是否更新成功后重启即可。




参考自: http://blog.csdn.net/kyle__shaw/article/details/53307252
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值