Linux

SATA 磁碟被辨識為 SCSI

  • August 15, 2017

我有兩台具有相同硬體和複製 Linux 作業系統的相同伺服器。他們都有 Supermicro HBA AOC-S3008L。然而,一台伺服器將 SATA 磁碟辨識為 SCSI,而另一台伺服器正確地將它們辨識為 SATA。我的問題是我需要使用libatasmartor udisks(而不是smartmontools)來監視磁碟的執行狀況,但是由於其中一台伺服器中的磁碟被辨識為 SCSI,因此我無法這樣做。如何讓 SystemB 辨識通過 SATA 匯流排連接的磁碟?BIOS 中是否有任何特定選項導致此問題?

SystemA(SATA 為 SATA):

SystemA:~$ sudo udevadm info --query=property --name /dev/sda
DEVLINKS=/dev/disk/by-id/ata-WDC_WD60EZRX-00MVLB1_WD-WX21D947N3HR /dev/disk/by-id/wwn-0x50014ee2b5d6e7b0 /dev/disk/by-path/pci-0000:01:00.0-sas-0x500304801eac0aa1-lun-0
DEVNAME=/dev/sda
DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:01:00.0/host0/port-0:0/expander-0:0/port-0:0:1/end_device-0:0:1/target0:0:0/0:0:0:0/block/sda
DEVTYPE=disk
ID_ATA=1
ID_ATA_DOWNLOAD_MICROCODE=1
ID_ATA_FEATURE_SET_HPA=1
ID_ATA_FEATURE_SET_HPA_ENABLED=1
ID_ATA_FEATURE_SET_PM=1
ID_ATA_FEATURE_SET_PM_ENABLED=1
ID_ATA_FEATURE_SET_PUIS=1
ID_ATA_FEATURE_SET_PUIS_ENABLED=0
ID_ATA_FEATURE_SET_SECURITY=1
ID_ATA_FEATURE_SET_SECURITY_ENABLED=0
ID_ATA_FEATURE_SET_SECURITY_ENHANCED_ERASE_UNIT_MIN=66306
ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN=66306
ID_ATA_FEATURE_SET_SMART=1
ID_ATA_FEATURE_SET_SMART_ENABLED=1
ID_ATA_ROTATION_RATE_RPM=5700
ID_ATA_SATA=1
ID_ATA_SATA_SIGNAL_RATE_GEN1=1
ID_ATA_SATA_SIGNAL_RATE_GEN2=1
ID_ATA_WRITE_CACHE=1
ID_ATA_WRITE_CACHE_ENABLED=1
ID_BUS=ata
ID_MODEL=WDC_WD60EZRX-00MVLB1
ID_MODEL_ENC=WDC\x20WD60EZRX-00MVLB1\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
ID_PART_TABLE_TYPE=gpt
ID_PATH=pci-0000:01:00.0-sas-0x500304801eac0aa1-lun-0
ID_PATH_TAG=pci-0000_01_00_0-sas-0x500304801eac0aa1-lun-0
ID_REVISION=80.00A80
ID_SERIAL=WDC_WD60EZRX-00MVLB1_WD-WX21D947N3HR
ID_SERIAL_SHORT=WD-WX21D947N3HR
ID_TYPE=disk
ID_WWN=0x50014ee2b5d6e7b0
ID_WWN_WITH_EXTENSION=0x50014ee2b5d6e7b0
MAJOR=8
MINOR=0
SUBSYSTEM=block
UDISKS_ATA_SMART_IS_AVAILABLE=1
UDISKS_PARTITION_TABLE=1
UDISKS_PARTITION_TABLE_COUNT=1
UDISKS_PARTITION_TABLE_SCHEME=gpt
UDISKS_PRESENTATION_NOPOLICY=0
USEC_INITIALIZED=72490

SystemB(SATA 作為 SCSI):

SystemB:~$ sudo udevadm info --query=property --name /dev/sda
DEVLINKS=/dev/disk/by-id/scsi-350014ee261a4fe1f /dev/disk/by-id/wwn-0x50014ee261a4fe1f /dev/disk/by-path/pci-0000:03:00.0-sas-0x500304801eabe304-lun-0
DEVNAME=/dev/sda
DEVPATH=/devices/pci0000:00/0000:00:03.0/0000:03:00.0/host0/port-0:0/expander-0:0/port-0:0:1/end_device-0:0:1/target0:0:0/0:0:0:0/block/sda
DEVTYPE=disk
ID_BUS=scsi
ID_MODEL=WDC_WD60EZRX-00M
ID_MODEL_ENC=WDC\x20WD60EZRX-00M
ID_PART_TABLE_TYPE=gpt
ID_PATH=pci-0000:03:00.0-sas-0x500304801eabe304-lun-0
ID_PATH_TAG=pci-0000_03_00_0-sas-0x500304801eabe304-lun-0
ID_REVISION=0A80
ID_SCSI=1
ID_SCSI_SERIAL=WD-WX31D55DF9X0
ID_SERIAL=350014ee261a4fe1f
ID_SERIAL_SHORT=50014ee261a4fe1f
ID_TYPE=disk
ID_VENDOR=ATA
ID_VENDOR_ENC=ATA\x20\x20\x20\x20\x20
ID_WWN=0x50014ee261a4fe1f
ID_WWN_WITH_EXTENSION=0x50014ee261a4fe1f
MAJOR=8
MINOR=0
SUBSYSTEM=block
UDISKS_PARTITION_TABLE=1
UDISKS_PARTITION_TABLE_COUNT=1
UDISKS_PARTITION_TABLE_SCHEME=gpt
UDISKS_PRESENTATION_NOPOLICY=0
USEC_INITIALIZED=80270

$ sudo skdump /dev/sda
Device: sat16:/dev/sda
Type: 16 Byte SCSI ATA SAT Passthru
Size: 5723166 MiB
Awake: Operation not supported
ATA SMART not supported.

更新: 伺服器有 32 個托架連接到 PCI-E SAS3 HBA。我之前已經將一些磁碟從 SystemB(將 SATA 公開為 SCSI)移動到 SystemA(將它們公開為 SATA),並且它們被標識為 SATA。所以我想我們可以排除導致這種情況的磁碟。請注意,我的目標是兩個伺服器都將磁碟辨識為 ATA,以便skdump(或udisks)能夠檢查磁碟。

# lsscsi -g<-輸出

# lshw<-系統A 系統B

$ udevadm info -a -p $(udevadm info -q path -n /dev/sdb) 系統A 系統B

$ dmesg 系統A 系統B

已解決: 問題原來是 SAS 控制器的韌體太舊。更新韌體可以解決問題:

$ sudo sas3flash -o -f 3008IT14.ROM -b mptsas3.rom

更新

哇,那個驅動器很舊,而且很大。 http://products.wdc.com/library/SpecSheet/ENG/2879-800026.pdf

最大傳輸速率為 175 MB/s,因此如果在 gen1 協商連結,您將被限制在 150 MB/s 以下

而且.. 如果您在 2014 年購買它們,保修期似乎剛剛到期

結束更新

首先,所有磁碟在 Linux 上都以 SCSI 的形式呈現(除非它是一些提供原始塊設備的頑固的 raid 控制器)。自從引入 libsas 並集成了 libata(2008 年?)以來,情況就是如此。不同的是您的驅動器獲得的支持級別。

是的,您的驅動器由所述控制器驅動,並且根據 sysfs,這些物理被饋送到看似 SAS 擴展器中。我不知道您有多少個托架,但是無論哪種方式,在發現過程中似乎都存在協商問題,擴展器決定該物理層的驅動器無法通過。

http://www.sasexpanders.com/faq/

我建議獲取 SMP 實用程序並將連結重置發送到驅動器,看看是否可以改善問題。您也許可以通過 sysfs 執行此操作,查看它是否公開了重置或類似文件並向其回顯 1。

http://sg.danny.cz/sg/smp_utils.html

驅動器韌體版本似乎相同…

# GOOD ID_MODEL=WDC_WD60EZRX-00MVLB1
# GOOD ID_REVISION=80.00A80

# BAD ID_MODEL=WDC_WD60EZRX-00M
# BAD ID_REVISION=0A80

僅提供 4 個字元的問題是我在壞驅動器上不是“80 ..”。如果將它們放在同一個工作系統中,比較起來會容易得多。如果它在那裡執行良好,那麼您就知道它不是磁碟。和型號一樣…

SATA 規範認為只報告四個字元是個好主意。這是一個線索。儘管它們都以 SD 設備的形式出現,但其中一個從 libata 獲得的支持比另一個多。工作的驅動器正在獲得完整的韌體版本,這意味著它遵循 SAT、scsi 到 ata 轉換規範。這就是 SCSI 驅動器的樣子。另一個不是。

  • 相同的作業系統和核心版本?
  • 相同的控制器韌體?
  • 相同的物理擴展器?
  • 相同的擴展器韌體?
  • 如果將驅動器插入不同的埠,問題是否會出現在驅動器上?
  • 插入該埠的任何驅動器是否無法獲得 ATA 直通?

它沒有說明壞的連結速度是多少。這裡作弊。

ppetraki@:scaleout_demo$ dmesg | grep -i link | grep SATA
[    1.759912] ata6: SATA link down (SStatus 0 SControl 300)
[    1.763905] ata5: SATA link down (SStatus 0 SControl 300)
[    1.927906] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[    1.935870] ata2: SATA link up 1.5 Gbps (SStatus 113 SControl 300)

還有這個。

ppetraki@:scaleout_demo$ sudo hdparm -t /dev/sda

/dev/sda:
Timing buffered disk reads: 762 MB in  3.00 seconds = 253.77 MB/sec

一個 3Gb SAS/SATA 鏈路傳輸大約 300 MBps 等等。這反映在 hdparm -t 中,它以盡可能快的速度從媒體中讀取。以 253 MB/s 的速度執行意味著此驅動器正在按預期執行,或者正在執行。這意味著如果您將 6G SSD 放入該連結,您獲得的吞吐量不會超過 253 MB/s。

我這樣說是因為好的驅動器說它在第 2 代進行了談判,而第二代沒有說。如果您在兩個驅動器上執行 hdparm 測試並且數字大不相同,那麼壞驅動器可能有問題,迫使它以較低的連結速度進行協商。

SAS 和 SATA 使用相同的電氣/物理線格式。唯一不同的是,SAS 驅動器在開機或重置時會發出啁啾聲,然後是 COMSAS,而 SATA 驅動器只會發出啁啾聲 (OOB) COMINIT。根據該協商,啟動適當的發現狀態機等等。

我不記得哪個狀態機決定了 ATA 直通在哪裡可行。草案規格在那裡……而且很厚。

希望這可以幫助。

引用自:https://serverfault.com/questions/868398