在 Ubuntu 14.04 64 位主机上正确设置 virtio

在 Ubuntu 14.04 64 位主机上正确设置 virtio

目前,我的客户机正在 qemu 中运行,主机是 kvm intel,运行 Ubuntu 14.04,内核是 4.3.0 稳定版。在客户机中,当我运行“hdparm -i /dev/sdb”对于客人,我得到:

HDIO_GET_IDENTITY 失败:参数无效

作为错误,但在主机上,我将获得完整的硬盘/SSD 信息。

我可以知道如何解决这个问题,以便主机和客户机的输出相同吗?

我从客户机内部对 hdparm 的跟踪(仅跟踪“-e ioctl”):

ioctl(3,HDIO_GET_MULTCOUNT,0x618ef0) = -1 EINVAL(无效参数)
ioctl(3,SG_IO,{'S',SG_DXFER_FROM_DEV,cmd[16]=[85,08,0e,00,00,00,01,00,00,00,00,00,00,40,ec,00],mx_sb_len=32,iovec_count=0,dxfer_len=512,timeout=15000,标志=0,数据[512]=["@\0\377?7\310\20\0\0\0\0\0?\0\0\0\0\0\0\0HPAD0409105B"...],状态=00,masked_status=00,sb[0]=[],host_status=0,driver_status=0,残差=0,持续时间=184,信息=0})= 0
ioctl(3,HDIO_GET_IDENTITY,0x7fffda088500) = -1 EINVAL(无效参数)
 HDIO_GET_IDENTITY 失败:参数无效
+++ 退出,结果为 22 +++

在主机级别:

ioctl(1、SNDCTL_TMR_TIMEBASE 或 SNDRV_TIMER_IOCTL_NEXT_DEVICE 或 TCGETS、0x7ffd4b096d90) = -1 ENOTTY (设备的 ioctl 不适当)
ioctl(3,HDIO_GET_MULTCOUNT,0x618ef0) = -1 ENOTTY (设备的 ioctl 不合适)
ioctl(3,SG_IO,{'S',SG_DXFER_FROM_DEV,cmd[16]=[85,08,0e,00,00,00,01,00,00,00,00,00,00,40,ec,00],mx_sb_len=32,iovec_count=0,dxfer_len=512,timeout=15000,标志=0,数据[512]=["@\0\377?7\310\20\0\0\0\0\0?\0\0\0\0\0\0\0HPAD0409105B"...],状态=00,masked_status=00,sb[0]=[],host_status=0,driver_status=0,残差=0,持续时间=184,信息=0})= 0
**ioctl(3,HDIO_GET_IDENTITY,0x7ffd4b0976e0)= 0**
+++ 退出,结果为 0 +++

我的 qemu 命令行:

sudo ./x86_64-softmmu/qemu-system-x86_64 -m 1024 -boot c -enable-kvm -net nic -net user \
-设备 virtio-scsi-pci \
-drive if=none,file=/dev/sdb,id=sdb,cache=none,format=raw \
设备 scsi 块,驱动器 = sdb \
-hda /home/用户/ubuntu1404_x86_64/ubuntu1404_x86_64.img

其中 qemu-system_x86_64 是从最新的 qemu-devel git 树中新编译的。

我希望 /dev/sdb 处的 SSD(内部 SATA)直接传递到 qemu。

请推荐最佳解决方案:发行版(CentOS??)、内核版本、qemu 命令以及 libvirtd?或 virtio-scsi?的设置过程。“hdparm”的相同输出将是主要标准。

答案1

如果您想要完全相同的输出,您需要一个单独的磁盘控制器,该控制器上连接有一个单独的磁盘,并通过 pci-passthrough 连接到客户机。

virtio 磁盘映像与它所在的物理驱动器不是同一个磁盘。它只是一个映像,有自己的元数据。virtio 框架可能甚至不提供 hdparm 查询的元数据,因为它不是为此目的而存在的。

相关内容