Sata

什麼可以防止 linux ahci 中的 hdd 熱插拔?

  • November 1, 2021

我正在為這個問題撕扯頭髮。

我想在我的家庭伺服器上添加一個熱插拔托架,以便輕鬆添加和移除 HDD,例如輕鬆輪換異地備份。有問題的主機板是帶有四個本機 SATA 埠的 Asrock J4105-ITX 主機板,這些埠分為 ASM1062 和英特爾處理器 SATA 控制器。兩者都可以正常工作並使用ahci核心模組。BIOS 中有一個熱插拔選項,但似乎沒有效果。

如果驅動器斷開連接(通過echo 1 > /sys/block/sdX/device/delete或粗魯地移除驅動器),重新連接後將無法辨識新設備。我嘗試強制重新掃描 ( echo "- - -" > /sys/class/scsi_host/host<n>/scan) 但無濟於事,SATA 埠實際上在下次重新啟動之前不再可用。我還嘗試了一些更極端的命令,但沒有任何運氣:

echo 1 > /sys/class/scsi_device/2:0:0:0/device/reset
echo 1 > /sys/devices/pci0000:00/0000:00:1f.2/rescan
echo 1 > /sys/devices/pci0000:00/0000:00:1f.2/reset

(取自如何讓 Linux 辨識我在不重新啟動的情況下熱插拔的新 SATA /dev/sda 驅動器?

“好吧,可能是晶片組不支持熱插拔或者BIOS壞了。” 所以我訂購了兩個 PCIe SATA 控制器(一個使用 ASM1064,另一個使用 Marvell 88SE9215)。兩者都表現出相同的問題,儘管其他買家表示熱插拔適用於他們,所以我猜這個問題要麼與軟體有關(我的安裝?我正在執行 Arch OS,它會盡職盡責地保持最新狀態)。

一些希望有用的資訊:

$ uname -a
Linux servername 5.14.14-arch1-1 #1 SMP PREEMPT Wed, 20 Oct 2021 21:35:18 +0000 x86_64 GNU/Linux

$ dmesg | grep ahci
[    0.447450] ahci 0000:00:12.0: version 3.0
[    0.447842] ahci 0000:00:12.0: SSS flag set, parallel bus scan disabled
[    0.457970] ahci 0000:00:12.0: AHCI 0001.0301 32 slots 2 ports 6 Gbps 0x3 impl SATA mode
[    0.457981] ahci 0000:00:12.0: flags: 64bit ncq sntf stag pm clo only pmp pio slum part sxs deso sadm sds apst 
[    0.458750] scsi host0: ahci
[    0.459204] scsi host1: ahci
[    0.469788] ahci 0000:01:00.0: AHCI 0001.0000 32 slots 4 ports 6 Gbps 0xf impl SATA mode
[    0.469801] ahci 0000:01:00.0: flags: 64bit ncq sntf led only pmp fbs pio slum part sxs 
[    0.470767] scsi host2: ahci
[    0.471203] scsi host3: ahci
[    0.471562] scsi host4: ahci
[    0.471904] scsi host5: ahci
[    0.472341] ahci 0000:04:00.0: SSS flag set, parallel bus scan disabled
[    0.472376] ahci 0000:04:00.0: AHCI 0001.0200 32 slots 2 ports 6 Gbps 0x3 impl SATA mode
[    0.472382] ahci 0000:04:00.0: flags: 64bit ncq sntf stag led clo pmp pio slum part ccc 
[    0.472803] scsi host6: ahci
[    0.473011] scsi host7: ahci

$ lspci -v
[...]
01:00.0 SATA controller: Marvell Technology Group Ltd. 88SE9215 PCIe 2.0 x1 4-port SATA 6 Gb/s Controller (rev 11) (prog-if 01 [AHCI 1.0])
   Subsystem: Marvell Technology Group Ltd. 88SE9215 PCIe 2.0 x1 4-port SATA 6 Gb/s Controller
   Flags: bus master, fast devsel, latency 0, IRQ 127
   I/O ports at e050 [size=8]
   I/O ports at e040 [size=4]
   I/O ports at e030 [size=8]
   I/O ports at e020 [size=4]
   I/O ports at e000 [size=32]
   Memory at a1340000 (32-bit, non-prefetchable) [size=2K]
   Expansion ROM at a1300000 [disabled] [size=256K]
   Capabilities: [40] Power Management version 3
   Capabilities: [50] MSI: Enable+ Count=1/1 Maskable- 64bit-
   Capabilities: [70] Express Legacy Endpoint, MSI 00
   Capabilities: [e0] SATA HBA v0.0
   Capabilities: [100] Advanced Error Reporting
   Kernel driver in use: ahci
[...]

終於找到原因了:我的powertop-tuning太激進了!

因為這台伺服器 24/7 全天候執行,而且這裡的電費有點貴,所以我添加了一個 systemd 服務來自動調整所有 powertop 選項:

$ cat /etc/systemd/system/powertop.service
[Unit]
Description=Powertop tunings

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/powertop --auto-tune

[Install]
WantedBy=multi-user.target

這與打開 powertop tui 並將所有選項設置為“好”相同。關鍵的一點是關於 的四行Runtime PM for port ataX

  Good          Runtime PM for port ata3 of PCI device: Marvell Technology Group Ltd. 88SE9215 PCIe 2.0 x1 4-port SATA 6 Gb/s Controller
  Bad           Runtime PM for port ata4 of PCI device: Marvell Technology Group Ltd. 88SE9215 PCIe 2.0 x1 4-port SATA 6 Gb/s Controller
  Good          Runtime PM for port ata5 of PCI device: Marvell Technology Group Ltd. 88SE9215 PCIe 2.0 x1 4-port SATA 6 Gb/s Controller
>> Good          Runtime PM for port ata6 of PCI device: Marvell Technology Group Ltd. 88SE9215 PCIe 2.0 x1 4-port SATA 6 Gb/s Controller
  Good          Runtime PM for PCI Device Marvell Technology Group Ltd. 88SE9215 PCIe 2.0 x1 4-port SATA 6 Gb/s Controller

他們執行echo 'auto' > '/sys/bus/pci/devices/0000:01:00.0/ata4/power/control';這顯然會導致 SATA 卡永遠無法辨識埠上的新設備!

只有設置power/controlon(根據powertop的’Bad’選項)後,卡才會在執行後找到新設備echo 0 0 0 | sudo tee /sys/class/scsi_host/host*/scan

我唯一缺少的是自動重新掃描,因為我的台式電腦會自動查找新設備而無需寫入hostX/scan,但我現在可以忍受這個。這是一次非常令人沮喪的經歷,所以我希望這可以幫助面臨同樣問題的人。

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