首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么能阻止hdd热交换在linux下ahci?

什么能阻止hdd热交换在linux下ahci?
EN

Server Fault用户
提问于 2021-10-25 12:55:01
回答 1查看 840关注 0票数 0

我正为这个问题大发雷霆。

我想在我的主页中添加一个hotswap,以便轻松地添加和删除HDD,例如轻松地旋转场外备份。主板是一个AsrocJ4105-ITX主板,它有四个本地SATA端口,它们分别是一个ASM1062和一个英特尔处理器SATA控制器。两者都很好地工作,并使用ahci内核模块。BIOS中有一个热交换选项,但它似乎没有任何效果。

如果驱动器断开(通过echo 1 > /sys/block/sdX/device/delete或粗鲁地移除驱动器),重新连接后将不会识别任何新设备。我尝试过强制使用rescan (echo "- - -" > /sys/class/scsi_host/host/scan),但是没有效果,在下一次重新启动之前,SATA端口实际上是不可用的。我也尝试了一些更极端的命令,没有任何运气:

代码语言:javascript
复制
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 (一个使用ASM1064,另一个使用Marvell88SE9215)。虽然其他买家表示热交换对他们有效,但两者都展示了相同的问题,所以我想问题要么与软件有关(我的安装?)我正在运行一个Arch,它是尽职尽责地保持最新的)。

一些有希望的有用信息:

代码语言:javascript
复制
$ 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
[...]
EN

回答 1

Server Fault用户

回答已采纳

发布于 2021-11-01 11:02:41

我终于找到了原因:我的动力头调太激进了!

由于这台服务器全天候运行,而且这里的电费有点贵,所以我添加了一个systemd服务来自动调优所有的电源选项:

代码语言:javascript
复制
$ 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并将所有选项设置为“Good”相同。关键的部分是关于Runtime PM for port ataX的四行代码:

代码语言:javascript
复制
   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/control设置为on (根据powertop的“坏”选项)之后,卡才会在执行echo 0 0 0 | sudo tee /sys/class/scsi_host/host*/scan后找到新设备

我唯一缺少的是自动刷新,因为我的台式机会自动找到新设备,而不需要写到hostX/scan,但我现在还能忍受这种情况。这是一次非常令人沮丧的经历,所以我希望这能帮助那些面临同样问题的人。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1081622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档