我使用了来自的解决方案这个线程但我总是得到
VirtualBox error: The medium 'lvol.vmdk' can't be used as the requested device type (0x80004005)
我已经尝试了所有 SATA、SCSI、IDE 和 SAS 控制器,但仍然无法正常工作。
主机SO:Ubuntu 12.04.1 amd64 VirtualBox 4.1
lvol.vmdk 是用以下命令创建的
vboxmanage internalcommands createrawvmdk -filename /VDK/lvlol.vmdk -rawdisk /dev/vg/lv
原始磁盘有:
1 primary ext3 156MB
2 primary swap 2147MB
3 primary ext3 4137MB
答案1
如果您正在运行与 Ubuntu 12.10 相当的系统,使用 udev,那么您必须指示 udev 为要分配给 Virtualbox 的逻辑卷分配适当的权限。
要检查逻辑卷的当前权限:
$ ls -lL /dev/mapper/vg_usbraid-vm_webserver
brw-rw---- 1 root disk 252, 8 Oct 26 09:26 vg-lv
id
uid=1000(username) gid=1000(groupid) groups=1000(groupid),4(adm),20(dialout),24(cdrom),46(plugdev),115(lpadmin),117(admin),122(sambashare)
并通过命令检查设备的组 ID 是否在组列表中列出id
。
上面示例中的问题是“root”和“disk”都不在id
输出的列表中。虽然扩展用户的组列表很容易,但这实际上不是您想要的,因为将root
或添加disk
到您的用户帐户是一个主要的安全风险。您可以作为普通用户写入任何磁盘处于非常低的水平。下面解释更好的解决方案。
由于目前可用的信息有限,我无法详细介绍,但这就是我为实现在我自己的用户名下从逻辑卷运行的 Vbox 虚拟机所做的事情:
创建以下文件:/etc/udev/rules.d/65-vmdmsetup.rules
内容:
SUBSYSTEM!="block", GOTO="vm_device_mapper_end"
KERNEL!="dm-*", GOTO="vm_device_mapper_end"
ACTION!="add|change", GOTO="vm_device_mapper_end"
# Obtain device status
IMPORT{program}="/sbin/dmsetup export -j%M -m%m"
ENV{DM_NAME}!="?*", GOTO="vm_device_mapper_end"
ENV{DM_NAME}=="vg_usbraid-vm_webserver", GROUP="groupid"
LABEL="vm_device_mapper_end"
在哪里:
vg_usbraid
是卷组的名称vm_webserver
是逻辑卷的名称groupid
是您的用户名附带的组 ID。检查输出中的“gid=”id
当然,您需要重新加载 udev,但是在 udev 规则中输入错误可能会导致系统崩溃。因此,请确保关闭尽可能多的应用程序,并且可能只是运行 async
将尽可能多的数据刷新到磁盘。考虑提高日志级别,这样万一它不起作用,至少您可以找到一些导致问题发生的原因。
$ udevadm control --log-priority=info
$ sudo udevadm control --reload
在 Ubuntu 上,日志记录被重定向到/var/log/syslog
.
只有在设置了 udev 后,您才应该创建逻辑卷,否则 udev 将看不到事件。如果您的 LV 已经存在,请运行:
$ sudo udevadm trigger --subsystem-match=block
然后最后使用以下命令检查权限是否设置正确:
$ ls -lL vg_usbraid-vm_webserver
brw-rw---- 1 root groupid 252, 8 Oct 26 09:26 vg_usbraid-vm_webserver
^^^^^^^
并将日志记录杆恢复为默认设置:
$ sudo udevadm control --log-priority=err