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