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

目前,我的客户在qemu里面运行,主机是kvm intel,运行Ubuntu 14.04,内核是4.3.0稳定。 在guest中,当我在客户端运行“hdparm -i / dev / sdb”时,我得到:

HDIO_GET_IDENTITY失败:参数无效

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

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

我在客人的hdparm strace(只是“-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,0,00,00,00,00,00,40,ec,00 ],mx_sb_len = 32,iovec_count = 0,dxfer_len = 512,timeout = 15000,flags = 0,data [512] = [“@ \ 0 \ 377?7 \ 310 \ 20 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0状态= 00,masked_status = 00,sb [0] = [],host_status = 0,driver_status = 0,resid = 0,持续时间[0] = 184,info = 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,0,00,00,00,00,00,40,ec,00 ],mx_sb_len = 32,iovec_count = 0,dxfer_len = 512,timeout = 15000,flags = 0,data [512] = [“@ \ 0 \ 377?7 \ 310 \ 20 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0状态= 00,masked_status = 00,sb [0] = [],host_status = 0,driver_status = 0,resid = 0,持续时间[0] = 184,info = 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 \
 -device virtio-scsi-pci \
 -drive if = none,file = / dev / sdb,id = sdb,cache = none,format = raw \
 - 设备scsi-block,drive = sdb \
 -hda /home/user/ubuntu1404_x86_64/ubuntu1404_x86_64.img

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

我想将/ dev / sdb中的SSD(内部SATA)直接传递给qemu。

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

如果需要完全相同的输出,则需要一个单独的磁盘控制器和一个单独的磁盘,并通过pci-passthrough连接到guest虚拟机。

虚拟磁盘映像与其驻留的物理驱动器不是同一个磁盘。 这只是一个图像,有自己的元数据。 virtio框架可能甚至不提供元数据hdparm查询,因为它不在那里。