在 Linux 中弹出 SATA 设备

Ser*_*erg 5 linux eject sata

如何在 Linux 中正确弹出 SATA 设备?我知道eject 命令可以为USB 设备做到这一点:

eject usbDevicePath 
Run Code Online (Sandbox Code Playgroud)

它对 SATA 设备的工作方式是否相同?它会同步缓存并正确关闭 SATA 设备吗?

小智 9

解决方案是在关闭和拔下驱动器之前通过软件降低驱动器的转速。执行此操作的最佳方法是使用名为 scsiadd 的实用程序。该程序可以向 Linux 的 SCSI 子系统添加和删除驱动器。此外,对于相当现代的内核,移除设备将发出停止命令,这正是我们正在寻找的。

跑:

$ sudo scsiadd -p
Run Code Online (Sandbox Code Playgroud)

应该打印如下内容:

Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: SAMSUNG HD300LJ  Rev: ZT10
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi4 Channel: 00 Id: 00 Lun: 00
  Vendor: LITE-ON  Model: DVDRW LH-20A1L   Rev: BL05
  Type:   CD-ROM                           ANSI  SCSI revision: 05
Host: scsi5 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: WDC WD10EACS-00Z Rev: 01.0
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Run Code Online (Sandbox Code Playgroud)

确定要删除的驱动器,然后发出:

$ sudo scsiadd -r host channel id lun
Run Code Online (Sandbox Code Playgroud)

替换来自 scsiadd -p 输出的相应值。例如,如果我想删除“WDC WD10EACS-00Z”,我会运行:

$ sync & sudo scsiadd -r 5 0 0 0
Run Code Online (Sandbox Code Playgroud)

如果一切正常,scsiadd 应该打印:

Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: SAMSUNG HD300LJ  Rev: ZT10
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi4 Channel: 00 Id: 00 Lun: 00
  Vendor: LITE-ON  Model: DVDRW LH-20A1L   Rev: BL05
  Type:   CD-ROM                           ANSI  SCSI revision: 05
Run Code Online (Sandbox Code Playgroud)

您可以仔细检查 dmesg 的结尾。你应该看到:

[608188.235216] sd 5:0:0:0: [sdb] Synchronizing SCSI cache
[608188.235362] sd 5:0:0:0: [sdb] Stopping disk
[608188.794296] ata6.00: disabled
Run Code Online (Sandbox Code Playgroud)

此时,驱动器已从 Linux 的 SCSI 子系统中移除,并且不应旋转。拔下和关闭电源是安全的。


mir*_*los 9

这个答案最有用:在卸载、停止 LVM、LUKS 等之后,您可以:

echo 1 >/sys/block/sdX/device/delete
Run Code Online (Sandbox Code Playgroud)