Centos
為什麼 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>
在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 驅動程序以
hda
etc 出現。但是當 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 驅動程序。