我知道eject
该命令可用于弹出几乎所有连接的硬件组件,但它可以用于弹出 USB 驱动器吗?
是否可以使用 USB 驱动器和外部 HDD 弹出eject
命令?
答案1
是的。例如:
sudo eject /dev/sda
这里其他表明您需要机械弹射硬件的答案是不正确的。
卸载与弹出不同。
- 如果卸载卷,您可以立即将其重新安装,因为底层设备仍然可用。在某些情况下,这可能会带来安全风险。通过弹出设备,只有 USB 子系统的重置(例如重新启动)才会重新加载设备。
- 通过弹出设备,您可以有效地禁用对该设备的任何进一步访问。只有重置 USB 子系统(例如重新启动)才会重新加载设备。否则,您必须物理断开 USB 设备并重新连接才能再次访问它。
- 在弹出之前,此命令将卸载设备上已安装的所有卷。
- 如果卷正在使用中,则此命令将与卸载一样失败,只不过某些卷可能会被卸载而某些卷可能仍处于装载状态。
答案2
在Linux,eject
可以工作,但不会真正“完成工作”关于 USB旋转驱动器。
首先,你eject /dev/sdb
(或umount
一切)。
和然后,正确卸载后拔掉 USB 外置硬盘的最佳方法是:
udisksctl power-off -b /dev/sdb
或者
udisks --detach /dev/sdb
这通常会导致驱动器正常减速。
注意:与(前者已经安装在我的 Debian 上,后者还没有并且已经安装)udisksctl
相比,可能是一个更“主流”的工具udisks
批评的用于不必要的向上/向下旋转)。
一些细节
乌迪斯克斯克特尔
这文档状态(关于关闭电源选项):
安排安全移除驱动器并关闭电源。在操作系统方面,这包括确保没有进程正在使用驱动器,然后请求将运行中的缓冲区和缓存提交到稳定的存储。关闭驱动器电源的确切步骤取决于驱动器本身和所使用的互连。对于通过 USB 连接的驱动器,其效果是 USB 设备将被取消配置,然后禁用它所连接的上游集线器端口。
请注意,由于某些物理设备包含多个驱动器(例如四合一闪存卡读卡器 USB 设备),关闭一个驱动器可能会影响其他驱动器。因此,与执行此操作相关的保证并不多。通常,效果是驱动器消失,就像拔掉插头一样。
udisk(已弃用?)
准确地说,目前的实施(截至 2014 年):
- 发送 SCSI 同步缓存命令,
- 发送 SCSI 停止命令,
- 解除USB存储内核驱动程序的绑定,
- 暂停USB设备(电源),
- 从逻辑上禁用/从 USB 端口删除它。
答案3
卸载磁盘 /dev/sdb 的手动步骤(需要 sudo):
echo 'offline' > /sys/block/sdb/device/state
echo '1' > /sys/block/sdb/device/delete
这将完全关闭设备电源并将其与系统分离。在断开连接并重新连接之前,不会再次检测到它。
答案4
如果你仔细阅读弹出(1)man page 可以看到有4种弹出方法:
-r This option specifies that the drive should be ejected using a CDROM
eject command.
-s This option specifies that the drive should be ejected using SCSI
commands.
-f This option specifies that the drive should be ejected using a remov‐
able floppy disk eject command.
-q This option specifies that the drive should be ejected using a tape
drive offline command.
你打电话时喷射在 HDD/SCSI 上,它发出ioctl(fd, SG_IO, (void *)&io_hdr);
命令(从eject.c
源复制)。
这相当于您在 MS Windows 或 MaxOSX 中安全删除设备。
对于某些设备来说,这有特殊的含义。例如Kindle 3之后喷射命令已移至充电模式并允许在屏幕锁定之前在设备上浏览。
另一个实用程序做同样的事情,就像这样
scsi-spin --force --down /dev/sda