为什么CentOS将ATA总线转换为scsi总线?

为什么CentOS将ATA总线转换为scsi总线?

我使用 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 年删除

相关内容