Centos

為什麼 CentOS 將 ATA 匯流排轉換為 scsi 匯流排?

  • May 20, 2022

我使用 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>

在qem中:

-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 匯流排?我在哪裡可以看到更相關的描述?

這就是 Linux 核心處理並行 ATA (IDE) 的方式。最初,有一套 IDE 特定的驅動程序,IDE 驅動程序以hdaetc 出現。但是當 Serial 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 設備來處理2021 年刪除了舊版 IDE 驅動程序。

引用自:https://unix.stackexchange.com/questions/703094