弹出 U 盘/弹出命令

Joe*_*arr 74 eject usb-drive

我知道该eject命令可用于弹出几乎所有连接的硬件组件,但它可以用于弹出 USB 驱动器吗?

是否可以使用该eject命令弹出 USB 驱动器和外部硬盘驱动器?

dan*_*ton 98

是的。例如:

sudo eject /dev/sda
Run Code Online (Sandbox Code Playgroud)

此处表明您需要机械弹出硬件的其他答案不正确。

卸载与弹出不同。

  1. 如果您卸载卷,您可以立即将其重新挂载,因为底层设备仍然可用。在某些情况下,这可能会带来安全风险。通过弹出设备,只有重置 USB 子系统(例如重新启动)才会重新加载设备。
  2. 通过弹出设备,您可以有效地禁用对设备的任何进一步访问。只有重置 USB 子系统(例如重新启动)才会重新加载设备。否则,您必须物理断开 USB 设备并重新连接才能再次访问它。
  3. 在弹出之前,此命令将卸载设备上已安装的所有卷。
  4. 如果卷正在使用中,此命令将与卸载一样失败,除了某些卷可能已卸载而某些卷可能仍处于挂载状态。

  • 我还必须使用“sudo”来完成此命令(它所做的就是在说无法打开文件之前卸载驱动器)。除此之外,有用的答案。 (2认同)

Tot*_*tor 60

Linux 上eject将工作,但不会真正“完成工作”关于 USB旋转驱动器。

正确卸载后,拔下 USB 外置硬盘的最佳方法是:

udisksctl power-off -b /dev/sdb
Run Code Online (Sandbox Code Playgroud)

或者

udisks --detach /dev/sdb
Run Code Online (Sandbox Code Playgroud)

这通常会导致驱动器正常旋转。

注意:udisksctludisks(前者已安装在我的 Debian 上,后者未安装)相比,可能是一个更“主流”的工具。

一些细节

udisksctl

文档的状态(关于关机选项):

安排驱动器安全移除和断电。在操作系统方面,这包括确保没有进程正在使用驱动器,然后请求将动态缓冲区和缓存提交到稳定存储。关闭驱动器电源的确切步骤取决于驱动器本身和所使用的互连。对于通过 USB 连接的驱动器,效果是 USB 设备将被解除配置,然后禁用它所连接的上游集线器端口。

请注意,由于某些物理设备包含多个驱动器(例如 4 合 1 闪存卡读卡器 USB 设备),因此关闭一个驱动器可能会影响其他驱动器。因此,与执行此操作相关的保证并不多。通常的结果是驱动器消失了,就好像它被拔掉了一样。

磁盘

准确地说,当前的实现(截至 2014 年):

  • 发送 SCSI 同步缓存命令,
  • 发送 SCSI 停止命令,
  • 解绑 USB 存储内核驱动程序,
  • 暂停 USB 设备(电源),
  • 从其 USB 端口逻辑禁用/删除它。

此过程类似于此处建议的手动过程。最初的答案是在 askubuntu 上


Ton*_*rge 21

卸载磁盘 /dev/sdb 的手动步骤(需要 sudo):

echo 'offline' > /sys/block/sdb/device/state
echo '1' > /sys/block/sdb/device/delete
Run Code Online (Sandbox Code Playgroud)

这将完全关闭设备并将其与系统分离。在断开连接并重新连接之前,不会再次检测到它。

  • FWIW 这是在带有外部 USB 底座的 Xen dom0 中唯一对我有用的东西——eject 和 udisks 命令给出了错误。 (2认同)

Ign*_*ams 15

不。他们也不需要。eject用于打开光驱,不能直接拉出介质。

对于 USB/eSATA/etc 来说,卸载就足够了。存储设备。

  • 又大又胖警告:这并不完全正确。如果您不“弹出”,则底层 USB 设备驱动程序可能仍会(尝试)在“umount”返回后写入。如果驱动器具有状态 LED,则可以清楚地看到这一点。在“umount”终止后立即拔出 USB 记忆棒是灾难的秘诀。 (3认同)
  • 这假设首先安装了设备,并且还有另一组假设(例如,它有一个您可以读取的文件系统)。想象一下,您正在擦除一堆外部驱动器 - 它们可能永远不会被安装。弹出是正确的使用。 (2认同)

gav*_*koa 6

如果您仔细阅读eject(1)手册页,您会发现有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.
Run Code Online (Sandbox Code Playgroud)

当您在 HDD/SCSI 上调用弹出时,它会发出ioctl(fd, SG_IO, (void *)&io_hdr);命令(从eject.c源复制)。

这等同于您在 MS Windows 或 MaxOSX 中安全删除设备。

对于某些设备,这具有特殊意义。例如 Kindle 3 后弹出命令已移至充电模式并允许在设备上浏览,而在屏幕锁定之前。

另一个实用程序做同样的事情,像这样

scsi-spin --force --down /dev/sda
Run Code Online (Sandbox Code Playgroud)


小智 5

在 osx 命令行中,您应该使用diskutil,其中LABEL是 USB 驱动器的标签。

diskutil eject /Volumes/<LABEL>
Run Code Online (Sandbox Code Playgroud)