在 Windows 中,您通常可以在物理拔出 USB 存储设备之前“弹出”它,以避免数据损坏。
但是,对于某些设备,Windows 不提供“弹出”选项。我在某些智能手机上最常看到这种情况。
为什么是这样?
答案1
可能是因为用于将文件传输到手机的方法(中期计划而不是USB大容量存储) 将数据和文件系统完整性的责任放在接收数据的设备上,对于移动电话而言,该设备也被认为是智能的、自供电的或具有电池备份。
USB 大容量存储设备通常是非智能记忆棒或硬盘,中期计划手机、相机等设备通常都是相当智能的设备,它们会自行处理存储。因此,文件传输可以以点对点的理念进行,而不是以智能主机-哑客户端的理念进行。一旦数据“发送”到手机,就由手机操作系统和文件系统方法来确保文件的正确存储。
如果文件传输中断,因此传输了一部分,那么手机可以决定是否释放任何分配的空间或逐个显示传输的内容。我怀疑大多数中断的传输只会丢弃不完整的数据并释放任何分配的块。文件系统完整性由手机主动管理。
由于这种传输要么发生,要么不发生,并且不需要软件弹出,因此这样做的唯一原因是让使用计算机的人能够获得“我完成了”的温暖感觉。从硬件角度来看,USB 当然不需要它,并且对热插拔设备非常满意。
来自 MTP 维基百科页面:
使用 MTP 而不是 USB 大容量存储设备类 (MSC) 的主要原因是后者以大容量存储设备块(通常在实践中为 FAT 块)的粒度运行,而不是以逻辑文件级别运行。换句话说,USB 大容量存储类旨在让主机无差别地访问大容量存储设备(如紧凑型闪存),而不是文件系统,后者可以安全地与目标设备共享(主机可能正在修改/访问的特定文件除外)。因此,在实践中,当 USB 主机计算机安装了 MSC 分区时,它将对存储设备进行绝对控制,然后设备可能无法安全地修改该存储设备,除非主机计算机切断连接,否则可能会有数据损坏的风险。此外,由于主机计算机可以完全控制连接的存储设备,存在主机可能损坏文件系统的风险,将其重新格式化为 USB 设备不支持的文件系统或者以其他方式修改它以使 USB 设备无法完全理解它。
答案2
概括
这最终取决于设备使用 MSC 还是 MTP/PTP。通常,闪存驱动器和外部硬盘等专用存储设备使用 MSC,而智能手机和其他需要在连接到计算机时保持对数据的访问或需要控制传输数据的设备将使用 MTP。许多相机使用 PTP,即 MTP 的一个子集。
如果设备使用 MSC,则需要先将其从计算机中弹出,然后才能将其移除。如果设备使用 MTP 或 PTP,则无需弹出。
技术细节
这大容量存储类 (MSC)允许计算机以与内部硬盘或 SSD 非常相似的方式与驱动器通信,使其比其他数据传输协议更快。这是 USB 闪存驱动器和外部硬盘驱动器等专用存储设备使用的。但是,它需要块级访问底层存储介质,这意味着对设备的独占访问。因此,MSC 不适用于智能设备,因为它们需要能够在计算机使用文件系统时访问文件系统的内容。智能手机实际上需要关闭其操作系统,然后才能授予计算机块级访问权限 - 这是一个繁琐的过程,并且会阻止您在连接设备时运行应用程序或以其他方式使用该设备。计算机有责任确保数据已完全传输,因此您需要通过弹出它来告诉计算机您已完成传输。
媒体传输协议 (MTP),这是大多数智能设备所使用的,涉及文件级访问,并且设备(而不是主机)负责管理数据。智能手机使用 MTP 是因为它们需要在设备连接到计算机时能够访问数据。MTP 还允许设备控制或限制可以传输的数据;一些(主要是较旧的)数字媒体/MP3 播放器使用 MTP 对传输的文件实施复制保护 (DRM) 或确保传输的媒体文件与设备兼容。由于 MTP 仅呈现分层文件/文件夹结构,因此计算机无需担心文件系统或设备如何存储数据。无论如何,使用 MTP,不需要明确的弹出命令;一旦设备告诉系统传输已完成(进度对话框已关闭),您就可以移除设备而无需明确弹出它。
MTP 是图片传输协议 (PTP),最初是为相机与计算机通信而设计的。许多相机仍在使用 PTP,但有些相机支持 MSC,有些相机允许在 MSC 和 PTP 之间进行选择。此外,有些相机支持通过称为PictBridge,这需要 PTP。与 MTP 一样,PTP 不需要弹出命令。相机是否可以使用 MSC、PTP 或两者取决于相机在连接到计算机时如何处理其存储。
请注意,如果您从相机中取出存储卡并将其插入计算机上的 SD 卡插槽或其他媒体读卡器,它将成为 MSC 设备,您需要在完成图片传输后将其弹出。
答案3
该设计还与设备供电方式有关。
如果两种设备都有自己的电源,例如计算机和智能手机,则有足够的空间来正确处理传输中断或任何其他故障。该设计依赖于持续可用的电源,这是使另一个因素(通信)具有容错能力的稳定因素。如果没有它,在特殊情况下,例如如果突然从智能手机中取出电池或强制关闭 PC,这些设备及其系统实际上并不比愚蠢的 USB 驱动器更能抗错误。(有人吗chkdsk
?)这些容错设备只是依靠足够的时间来优雅地解决预期的问题。
但是由主机供电的设备几乎没有时间对断电做出任何反应。在这样的设备中托管文件系统不仅意味着满足用户请求,还意味着用户不知道的主机后台进程进行的后台读写。用户永远不知道当前是否正在发生通信。因此,必须提供一种明确的方式来发出断电意图的信号(即 Eject 命令),主机必须停止任何操作。然后等待突然断电而不会有风险。因此,“Eject”事件是一种简单的开始正确完成的方法,同时我们仍然可以依赖连续操作。实质上现在与上述情况没有什么不同:电源是的确在所有必要的操作期间。完成后,主机会发回信号(因为用户物理控制电源中断),现在可以安全地突然中断设备电源而不会带来风险。
因此,我们看到最重要的设计驱动因素之一是设备是否能够自主运行,以便有时间处理故障。如果没有,则必须通过 Eject 命令请求事先明确完成。