我使用 libvirt + qemu 来启动带有 IDE 总线磁盘的虚拟机
libvirt 中的设备:
<disk type='network' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native'/>
<source protocol='iscsi' name='xxx'>
<host name='127.0.0.1' port='xxx'/>
</source>
<target dev='hdb' bus='ide'/>
<boot order='3'/>
<alias name='ide0-0-1'/>
<address type='drive' controller='0' bus='0' target='0' unit='1'/>
</disk>
在 qemu 中:
-drive file.driver=iscsi,file.portal=127.0.0.1:xxx,file.target=xxx,file.lun=xxx,file.transport=tcp,format=raw,if=none,id=drive-ide0-0-1,cache=none,aio=native
-device ide-hd,bus=ide.0,unit=1,drive=drive-ide0-0-1,id=ide0-0-1,bootindex=3,write-cache=on
来宾操作系统是 CentOS-7.9-x86_64-DVD-2009
启动后,dmesg 中显示
May 18 06:07:37 localhost kernel: ata1: PATA max MWDMA2 cmd 0x1f0 ctl 0x3f6 bmdma 0xd120 irq 14
May 18 06:07:37 localhost kernel: ata2: PATA max MWDMA2 cmd 0x170 ctl 0x376 bmdma 0xd128 irq 15
May 18 09:15:54 localhost kernel: ata1.00: ATAPI: QEMU DVD-ROM, 2.5+, max UDMA/100
May 18 09:15:54 localhost kernel: ata1.01: ATA-7: QEMU HARDDISK, 2.5+, max UDMA/100
May 18 09:15:54 localhost kernel: ata1.01: 6291456 sectors, multi 16: LBA48
May 18 09:15:54 localhost kernel: ata1.00: configured for MWDMA2
May 18 09:15:54 localhost kernel: ata1.01: configured for MWDMA2
May 18 09:15:54 localhost kernel: scsi 0:0:0:0: CD-ROM QEMU QEMU DVD-ROM 2.5+ PQ: 0 ANSI: 5
May 18 09:15:54 localhost kernel: scsi 0:0:1:0: Direct-Access ATA QEMU HARDDISK 2.5+ PQ: 0 ANSI: 5
May 18 09:15:54 localhost kernel: sr 0:0:0:0: [sr0] scsi3-mmc drive: 4x/4x cd/rw xa/form2 tray
May 18 09:15:54 localhost kernel: cdrom: Uniform CD-ROM driver Revision: 3.20
May 18 09:15:54 localhost kernel: sd 0:0:1:0: [sda] 6291456 512-byte logical blocks: (3.22 GB/3.00 GiB)
May 18 09:15:54 localhost kernel: sd 0:0:1:0: [sda] Write Protect is off
May 18 09:15:54 localhost kernel: sd 0:0:1:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
May 18 09:15:54 localhost kernel: sd 0:0:1:0: [sda] Attached SCSI disk
并在 lshw 中显示
[root@localhost ~]# lshw -class disk
*-cdrom
description: DVD reader
product: QEMU DVD-ROM
vendor: QEMU
physical id: 0.0.0
bus info: scsi@0:0.0.0
logical name: /dev/cdrom
logical name: /dev/sr0
version: 2.5+
capabilities: removable audio dvd
configuration: ansiversion=5 status=ready
*-medium
physical id: 0
logical name: /dev/cdrom
capabilities: partitioned partitioned:dos
configuration: signature=6b8b4567
*-disk
description: ATA Disk
product: QEMU HARDDISK
physical id: 0.1.0
bus info: scsi@0:0.1.0
logical name: /dev/sda
version: 2.5+
serial: 918a6997-1928-38a1-9
size: 3GiB (3221MB)
configuration: ansiversion=5 logicalsectorsize=512 sectorsize=512
为什么CentOS要将ATA总线转换为scsi总线?在哪里可以看到更相关的描述?
答案1
这就是 Linux 内核处理并行 ATA (IDE) 和串行 ATA (SATA) 的方式。最初,有一套 IDE 专用的驱动程序,IDE 驱动器出现了hda
诸如此类。但是当串行 ATA 出现时,Jeff Garzik 决定使用现有的 SCSI中间层在内核中;他给出了很多理由, 尤其:
- 许多优点都源于scsi中间层的存在。它为我们做了很多工作,让我几乎可以专注于 ATA 命令协议(PIO-in、PIO-out、DMA 等)。
[…]
串行 ATA 即将出现。设备和主机控制器 SATA 实现确实适合
SCSI 中已经存在一段时间的行为。 SATA 甚至定义了 SCSI 附件服务的使用。Linux SCSI 层处理热插拔,并且更加模块化。它已经重新计数了设备和 sysfs 等。从头开始创建新的块设备驱动程序意味着处理所有这些小细节。
SCSI 做基本的错误恢复和队列控制已经有一段时间了。即将推出的 SATA2 以及
ATA TCQ(如果我有时间实现后者)都将从中受益匪浅。ATAPI 类似于 SCSI。
结果是libata
,它提供了对 ATA 设备的支持,并通过 SCSI 中间层将它们呈现为 SCSI 驱动器。最初,这涵盖了 SATA 设备和一些 Intel PATA 控制器(尽管据我所知,后者仍然默认使用旧的 IDE 设备驱动程序)。
几年后,libata 已扩展以支持大多数 PATA 控制器和大多数 IDE 设备最终被作为 SCSI 设备处理。旧版 IDE 驱动程序已于 2021 年删除。