如何在 Linux 中正确弹出 SATA 设备?我知道弹出命令可以对 USB 设备执行此操作:
eject usbDevicePath
它对 SATA 设备的工作方式相同吗?它会同步缓存并正确关闭 SATA 设备吗?
答案1
解决方案是通过软件让驱动器减速,然后关闭并拔下电源。最好的方法是使用名为 scsiadd 的实用程序。此程序可以向 Linux 的 SCSI 子系统添加和删除驱动器。此外,使用相当现代的内核,删除设备将发出停止命令,这正是我们正在寻找的。
跑步:
$ sudo scsiadd -p
打印内容如下:
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
找到要删除的驱动器,然后发出:
$ sudo scsiadd -r host channel id lun
替换 scsiadd -p 输出中的相应值。例如,如果我想删除“WDC WD10EACS-00Z”,我将运行:
$ sync & sudo scsiadd -r 5 0 0 0
如果一切正常,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
您可以仔细检查 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
此时,驱动器已从 Linux 的 SCSI 子系统中移除,并且不应旋转。可以安全地拔下并关闭。
答案2
这个答案是最有用的:卸载、停止 LVM、LUKS 等之后,您可以执行以下操作:
echo 1 >/sys/block/sdX/device/delete
由于这个答案似乎吸引了那些不知道如何正确使用 sudo(8) 进行重定向的 *buntu 用户,因此这里是最容易使用 sudo 执行此操作的方法:
echo 1 | sudo dd of=/sys/block/sdX/device/delete
字面意思就是:
sudo sh -c 'echo 1 >/sys/block/sdX/device/delete'
否则,未加引号的重定向由 shell 处理外部而是调用 sudo,并且您需要重定向(而不是 echo),以超级用户权限运行。