当将外部 USB 3.0 硬盘连接到我的 USB 3.0 端口时,我无法安全地将其移除。
不知何故,Windows 总是保持日志文件打开: “总是”因为这次我只连接了驱动器,复制了一个 10GB 的 VM,然后想将其断开连接(比如复制后 15 分钟,所以所有复制都完成了)。
如你所见,除了以下程序之外,没有其他程序在磁盘上保持句柄:系统。我尝试重新启动explorer.exe
以及RemoveDrive.exe
作者:Uwe Sieber。没有运气,硬盘上的锁始终存在。
我唯一的解决办法就是拔掉电源插头(但我又担心损坏数据?)或者重新启动计算机(总是有帮助的,不是吗?)。
这可能与我只有 SSD 硬盘而外部磁盘是普通驱动器有关吗?这可能与 USB 3.0 驱动程序(NEC Electronics USB Hub)有关吗?使用普通 USB 2.0 端口时我从未遇到过此问题。
关于如何正确卸载磁盘有什么想法吗?
答案1
我正在寻找一种可能的解释或更简单(即:自动化/脚本化)的方法来清除 MFT/TxF/NTFS 元数据上的这个“锁”。我想把这个抛出来,因为我有一个在无数情况下都对我有用的解决方案。我用它来移除所有像这样卡住的 USB 和 eSATA 驱动器。问题似乎是主要作为固定驱动器安装的可移动驱动器,例如 eSATA 基座或 USB 外壳中的驱动器。USB 拇指驱动器通常不会出现此问题。
关于最后的区别,有一点需要注意:Sandisk Extreme USB 3.0 是一款奇怪的产品,由 USB 钥匙主体中的 SSD 控制器组成,也显示为固定驱动器,尽管它似乎没有被随意拔出且没有进行任何安全移除的问题,所以我猜它至少会关闭任何写入缓存,因为它的速度和可能还有其他原因,因为它似乎从来没有这个问题,始终保持其即时可移除性。不一定是一个完美的例子,因为我的测试并不彻底(这只是轶事),但它可能会对这个问题有所启发,因为它是“固定”的,但显然不受这个问题的影响。仅供思考。
<--解决方案-->
无论如何,简单地说,您需要将驱动器脱机。您可以通过两种方式之一执行此操作。注意:有稍微短一点的方法可以做到这一点,但这里是极其详细的步骤,因为我不了解我的受众。GUI 方法是迄今为止最快的,因为 diskpart.exe 不接受开关或内联命令/参数。
- GUI:运行 -> “diskmgmt.msc” -> 在物理磁盘列表(底部窗格)中找到您的驱动器 -> 右键单击驱动器(最左侧部分),而不是分区 -> 单击“脱机”
或者:
- CLI:运行 -> “cmd.exe” -> 输入“diskpart” -> 输入“list disk”,找到您的磁盘号 -> 输入“select disk x”,其中 x 是上一步中您的磁盘号 -> 输入“offline disk”。现在您可以退出命令提示符,或者只需在 diskpart 输入“exit”,然后关闭提示符。
笔记:
最重要的就是离线该卷,因为这将删除 NTFS 对驱动器的控制,但是离线磁盘更简单、更彻底。
diskpart.exe 和 diskmgmt.msc 之间的磁盘号始终相同,因为它们从同一个位置提取信息,以防您好奇/担心/谨慎。
答案2
今天,我突然想到要查看事件日志。在尝试删除后,我发现了以下内容:
日志:系统,来源:Kernel-PnP,事件 ID:225,级别:警告
应用程序 \Device\HarddiskVolume2\Windows\System32\Taskmgr.exe 的进程 ID 为 6436,已停止删除或弹出设备 [...]
因此我关闭了任务管理器并且安全删除起作用了。
答案3
我创建了这个批处理脚本来“解锁”任何卷。只需以管理员身份运行 .bat 脚本,选择卷,然后按 ENTER 键。之后,您应该能够像往常一样使用“安全移除”来分离设备。
@echo off
@cls
set tempfile="%TEMP%\diskscrp.dsk"
echo.
echo === Disk removal tool ===
echo.
echo Select the disk volume number
echo (if the disk has multiple volumes, select any of them)
echo.
echo list volume | diskpart | findstr /C:Volume /C:---
echo.
set /p volume=" Selected volume: "
echo.
echo select volume %volume% >>%tempfile%
echo offline disk >>%tempfile%
echo online disk >>%tempfile%
diskpart /s %tempfile% | findstr /C:"not valid"
if "%ERRORLEVEL%"=="1" (
echo Disk has been unlocked successfully. Try to safely remove it now.
)
del /F %tempfile%
此脚本基于@Rook 的建议,因此用于diskpart
使磁盘脱机。执行此操作后,将强制关闭所有句柄。此脚本的不同之处在于它会自动使磁盘重新联机,以便下次连接到系统时可以识别它。
答案4
现在,您可以尝试通过关闭计算机然后拔掉电源来断开外部连接,从而尝试丢失数据,然后将其设置为轻松移除,以防止在不卸载它的情况下简单地拔掉电源时丢失数据。
老实说,这听起来有点像 MBR 错误,驱动器卡在始终插入的状态,在这种情况下,如果您在打开电源时拔下驱动器,可能会损坏 MBR,并且您有两个选择,手动修复 MBR 或尝试使用 MBR 修复等软件以便能够再次访问驱动器,或者使用 gparted 等软件再次格式化磁盘并在最有可能发生错误的位置设置新的分区表。