为什么有些 USB 驱动器会变成 0 字节存储设备而不是弹出?

为什么有些 USB 驱动器会变成 0 字节存储设备而不是弹出?

我有两个PNY Turbo Attaché 3 USB 3.0 闪存盘。当我尝试弹出其中任何一个时,它们都不会被弹出。相反,设备会自行调整大小,变为零字节大小。如果我再次尝试弹出设备,它只会保持连接状态,成为一个零字节大小的存储设备。物理断开并重新连接驱动器会将其恢复到原来的 32GB 状态。

我可以使用以下方法在 Linux 上观察到此行为ejectlsblk在 Windows 上使用 Windows 资源管理器和diskpart。特别奇怪的是,我拥有的不仅 PNY 驱动器有此问题。我拥有另外两家制造商的 USB 驱动器也有同样的问题。

这是怎么回事?设备弹出后不是应该完全消失吗?

答案1

经过大量实验后,我认为我可以部分回答这个问题。

每个硬盘都不同。我的结论基于我对这些硬盘进行的测试:

当我使用以下方法弹出这些驱动器时,它们都会做一些我意想不到的事情eject在 Linux 上或 Windows 上的 Windows Explorer 上。不过,并非所有文件都会自行调整为 0 字节。

第 1 部分:这里发生了什么?

@Mokubai 建议“它们可能类似于装有 MicroSD 卡的 USB 读卡器。读卡器通常允许您弹出安装的卡,而不是整个设备。”Nitrokey Storage 2 确实是一个内置 MicroSD 卡的 MicroSD 读卡器。但我不清楚其他驱动器的情况。

第 2 部分:设备弹出时不应该完全消失吗?

也许不是。这取决于“弹出”的含义以及是否弹出 USB 设备本身。当我写这个问题时,我所说的“弹出”是指:

  1. 如果设备上有任何已挂载的文件系统,请卸载它们或停止并显示错误。
  2. 确保所有剩余数据都已写入设备。
  3. 彻底关闭设备。

事实证明,我告诉 Linux 和 Windows 要做的并不是这三个步骤。

在 Linux 上,我使用该eject命令。它的手册页上写着“根据设备是 CD-ROM、SCSI 设备、可移动软盘还是磁带,有四种不同的弹出方法。默认情况下喷射按顺序尝试所有四种方法,直到成功。”这些方法都不是针对 USB 的。据我所知,eject它们只与关闭存储本身有关,而不是整个 USB 设备。现在,关闭存储本身可能应该会关闭整个 USB 设备,但是,正如@DrMoishe Pippik 提到,这些设备的闪存控制器可能已经损坏。

在 Windows 上,我使用 Windows 资源管理器尝试弹出驱动器E:(例如)。需要注意的是,“驱动器”字母不是指驱动器。它们是指卷。(您可以使用diskpart。在 中diskpart,先运行list disk然后运行list volume​​。)因此,当您要求弹出“驱动器” 时E:,您并不是在要求关闭整个 USB 设备。您只是要求关闭特定卷。话虽如此,Windows 默认在 USB 驱动器上创建具有单个分区的 MBR 分区表。在这种情况下,卷不会跨越整个驱动器,因为驱动器的一部分正由 MBR 使用。通过 Windows 资源管理器弹出它仍会将整个驱动器的大小调整为零字节,因此,即使您只是要求对部分存储空间执行某些操作,但最终也会对所有存储空间执行某些操作。无论哪种方式,Windows 资源管理器都在处理 USB 设备上的存储空间,而不是整个 USB 设备。

第 3 部分:如何在 Linux 和 Windows 上彻底关闭 USB 驱动器

正如我之前提到的,我似乎实际上并不想“弹出”这些驱动器。那么我该怎么做呢?

在 Linux 上

udisksctl power-off --block-device=/dev/<whatever>

根据udisksctl的手册页udiskctl power-off确实做了我想要做的事:

断电

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

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

(感谢@don_crissti 帮助我解决这个问题)。

在 Windows 11 上

  1. 找到“安全删除硬件并弹出媒体”托盘图标。

    它看起来像一个 USB 驱动器,右下角有一个复选标记。

  2. 右键单击它。

    当您右键单击时,将出现一个上下文菜单。

  3. 单击“弹出”选项,后面跟着驱动器的名称。

    我在此示例中使用的驱动器名为“USB 3.2.1 FD”。

  4. 打开“设置”应用程序。

  5. 在侧栏中,单击“蓝牙和设备”。

    “蓝牙和设备”位于“系统”下方和“网络和互联网”上方。

  6. 点击“查看更多设备”。

    “查看更多设备”按钮位于标有“添加设备”的大方块下方。

  7. 在 USB 驱动器的右侧,应该有一个带有省略号的按钮。单击该按钮。

    如果将鼠标悬停在省略号按钮上,将会出现“更多选项”字样。

  8. 点击“移除设备”。

    “删除设备”按钮应该出现在省略号按钮上方。

  9. 单击“是”。

    需要单击“是”的框会显示“您确定要删除此设备吗?

相关内容