在基于 Unix 的环境中,使用 将磁盘克隆到映像文件时dd
,应卸载该磁盘以防止由于克隆过程中文件系统更改而导致的错误。在 Windows 10 及更高版本上使用 Rufus 完成类似任务(将磁盘保存到 VHD 映像文件)时,最佳做法是卸载源磁盘或至少将其安装为只读驱动器吗?
答案1
Rufus 开发人员在这里。
在 Windows 上,“卸载”实际上相当于请求独占访问权限(如果成功,则意味着只有请求访问权限的应用程序可以读取或写入驱动器,并且任何其他应用程序都无法同时访问它),Rufus 自动执行。
因此,在使用 Rufus 之前,您无需对磁盘采取任何特定步骤。
Windows 确实具有“卸载”功能,但问题是,当卸载卷时,您实际上无法格式化或写入卷,因为这与仅从现有文件系统中删除已安装卷的 UNIX 卸载不同。
有关更多信息以及 Rufus 格式化驱动器所遵循的步骤,请参阅这是微软的官方文档尤其是更改卷文件系统列出以下操作的部分:
- 打开一个卷。
- 锁定音量。
注意:这是我们获得独占访问权限的部分,其他任何应用程序都无法访问该卷。 - 格式化该卷。
- 卸载该卷。
- 解锁卷。
- 关闭卷句柄。
显然,Rufus 也遵循了这一点。正如您所看到的,在 Windows 世界中,“卸载”卷需要发生后格式化它,之前不需要。
哦,顺便说一下,Rufus 还可以以 DD 模式写入驱动器(即类似于使用 UNIXdd
命令),在这种情况下不需要进行格式化,但我们也请求对驱动器进行独占锁定,以确保没有其他应用程序可以干扰 Rufus 正在写入的数据。
当然,现在,一旦 Rufus 完成驱动器的写入或格式化,它就会放弃独占锁定并关闭其持有的磁盘或卷句柄,这意味着第三方应用程序仍可能尝试更改数据(事实上,如果新卷包含 Windows 可以挂载的文件系统,Windows 将自动创建一个System Volume Information
包含一堆文件的隐藏文件夹),因此我们无法保证在复制完数据后驱动器或卷不会被修改。但是,我们可以保证,如果我们获得了锁定,那么在我们放弃锁定时写入的数据将不会受到干扰,因为操作系统旨在强制执行锁定驱动器或卷的应用程序是唯一可以访问该设备的应用程序。
编辑:我现在意识到你的问题与保存到 VHD 有关,所以我只想指出,我们再次请求锁定驱动器以获得独占访问权限。特别是这部分代码与保存到 VHD 有关,表示我们调用GetPhysicalHandle()
第二个参数设置为TRUE
,如果你要查看定义GetPhysicalHandle()
您会发现第二个参数在请求锁定时设置为TRUE
。仍然为了安全起见,尤其是因为 Windows 会同时处理卷和驱动器,如果您担心第三方应用程序可能会在您克隆驱动器时尝试将数据写入驱动器,您可以尝试在磁盘管理器中暂时删除驱动器号,然后在完成后恢复它。
答案2
我已经使用它很长时间了,但我不认为 Rufus 的工作方式与 dd 类似 - 具体来说,dd 进行一些复制,而 Rufus 格式化目标,复制所需的文件并添加引导加载程序或类似的东西。
因此,虽然理想情况下 dd 希望卸载 cdisk(但至少在复制过程中不会发生变化 - 这可能导致文件表与文件的最终位置不同 - 如果它们在复制过程中被修改或删除)但 Rufus 是基于每个文件工作的,因此这个限制无关紧要。
我认为在某个时候,RUFUS 学会了如何安装 iso 和其他块设备,以便它可以从中获取文件。