用qemu模拟scsi设备

简介: 用qemu模拟scsi设备

参考

实验

建立下面的PCI总线拓扑,然后来模拟scsi磁盘的添加和删除

  • PCI总线拓扑
root@ubuntu-vm:~# lspci -tv
-[0000:00]-+-00.0  Intel Corporation 440FX - 82441FX PMC [Natoma]
           +-01.0  Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
           +-01.1  Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
           +-01.3  Intel Corporation 82371AB/EB/MB PIIX4 ACPI
           +-02.0  Device 1234:1111
           +-03.0  Red Hat, Inc. Virtio filesystem
           +-04.0  Red Hat, Inc. Virtio network device
           +-05.0  Red Hat, Inc. Virtio block device
           +-06.0  Red Hat, Inc. Virtio block device
           \-07.0-[01]--+-03.0  Red Hat, Inc. Virtio SCSI
                        \-04.0  Red Hat, Inc. Virtio SCSI
  • 实验用的块设备
root@ubuntu-vm:~# ls /sys/block/ -l
lrwxrwxrwx 1 root root 0 Sep  1 16:37 sda -> ../devices/pci0000:00/0000:00:07.0/0000:01:03.0/virtio4/host0/target0:0:0/0:0:0:0/block/sda
lrwxrwxrwx 1 root root 0 Sep  1 16:34 sdb -> ../devices/pci0000:00/0000:00:07.0/0000:01:04.0/virtio5/host1/target1:0:0/1:0:0:0/block/sdb

步骤

启动虚拟机的命令

qemu-system-x86_64 \
        -m 2G \
        -smp 4 \
        --kernel "./linux-6.4/arch/x86_64/boot/bzImage" \
        --append "noinitrd rootfstype=ext4 root=/dev/vda rw console=ttyS0" \
        --nographic \
        -fsdev local,security_model=passthrough,id=fsdev0,path=./share \
        -device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=hostshare \
        -netdev user,id=eth0,hostfwd=tcp::8765-:22 -device virtio-net-pci,netdev=eth0 \
        -drive if=none,file=./slave2.qcow2,format=qcow2,id=hd0 \
        -device virtio-blk-pci,drive=hd0 \
        -drive if=none,file=./test_disk.qcow2,format=qcow2,id=hd1 \
        -device virtio-blk-pci,drive=hd1,num-queues=2 \
        --enable-kvm \
        \
        -device pci-bridge,id=bridge0,chassis_nr=2 \
        -device virtio-scsi-pci,id=scsi0,bus=bridge0,addr=0x3 \
        -device scsi-hd,drive=hd2,bus=scsi0.0 \
        -drive if=none,file=./test_disk2.qcow2,format=qcow2,id=hd2 \
        -device virtio-scsi-pci,id=scsi1,bus=bridge0,addr=0x4 \
        -device scsi-hd,drive=hd3,bus=scsi1.0 \
        -drive if=none,file=./test_disk3.qcow2,format=qcow2,id=hd3 \

查看scsi磁盘

root@ubuntu-vm:~# lsscsi -v
[0:0:0:0]    disk    QEMU     QEMU HARDDISK    2.5+  /dev/sda
dir: /sys/bus/scsi/devices/0:0:0:0  [/sys/devices/pci0000:00/0000:00:07.0/0000:01:03.0/virtio4/host0/target0:0:0/0:0:0:0]
[1:0:0:0]    disk    QEMU     QEMU HARDDISK    2.5+  /dev/sdb
dir: /sys/bus/scsi/devices/1:0:0:0  [/sys/devices/pci0000:00/0000:00:07.0/0000:01:04.0/virtio5/host1/target1:0:0/1:0:0:0]

剔除和增加

方法1

  • 剔除
# echo 1 > /sys/block/sda/device/delete
# echo 1 > /sys/bus/pci/devices/0000\:00\:07.0/0000\:01\:03.0/remove

此时只剩下sdb:

# lsscsi
[1:0:0:0]    disk    QEMU     QEMU HARDDISK    2.5+  /dev/sdb
  • 添加
# echo 1 > /sys/bus/pci/devices/0000\:00\:07.0/rescan

可以看到,sda又被添加回来:

# lsscsi
[0:0:0:0]    disk    QEMU     QEMU HARDDISK    2.5+  /dev/sda
[1:0:0:0]    disk    QEMU     QEMU HARDDISK    2.5+  /dev/sdb

方法2

  • 剔除
# echo 1 > /sys/block/sda/device/delete

此时只剩下sdb:

# lsscsi
[1:0:0:0]    disk    QEMU     QEMU HARDDISK    2.5+  /dev/sdb
  • 添加
# echo 1 > /sys/class/scsi_host/host0/scan

可以看到,sda又被添加回来:

# lsscsi
[0:0:0:0]    disk    QEMU     QEMU HARDDISK    2.5+  /dev/sda
[1:0:0:0]    disk    QEMU     QEMU HARDDISK    2.5+  /dev/sdb
BASH 复制 全屏

完。

相关文章
|
3月前
scsi学习
scsi学习
135 65
|
5月前
|
数据采集 测试技术
常见测试测量接口的比较:PXI、PXIe、PCI、VXI、GPIB、USB
常见测试测量接口的比较:PXI、PXIe、PCI、VXI、GPIB、USB
194 2
|
存储 Linux 开发者
【Linux学习笔记】设备驱动模型详解——总线、设备、驱动和类
设备驱动是计算机系统中的重要组成部分,它们允许操作系统与硬件交互。设备驱动模型是一种通用的抽象框架,用于描述操作系统如何管理硬件设备。这里我们将介绍设备驱动模型中的四个关键概念:总线、设备、驱动和类。
|
固态存储 内存技术
SCSI命令下发方式<续>:对NVMe硬盘如何实现SCSI命令转换?
我们前面有对SATA硬盘下发SCSI命令,其实对NVMe硬盘下发SCSI的方式大同小异。下面我们就来试一下,这里我们用到的SCSI命令是READ CAPACITY。