RAW 写入 vhd 而不安装

RAW write to a vhd without mounting

我知道如果你挂载一个vhd(或其他虚拟磁盘格式),你可以写入它。但是如何在不安装 vhd 的情况下写入它呢?有什么好用的软件吗?

我所说的原始是指 HDD Raw Copy Tool 提供的内容。您可以只获取一个文本文件或另一个文件,然后将其中的字节准确地写入磁盘。

对于“固定的”VHD,您可以像您所说的那样:“只需要一个文本文件或另一个文件,然后将其中的字节准确地写入磁盘。”固定 VHD 只是平面磁盘映像加上末尾的 512 页脚。只要您不触摸此尾随页脚,原始块级编辑(手动或程序化)应该没问题。

对于动态 VHD 或物理磁盘的任何其他稀疏表示,任务归结为将逻辑磁盘偏移量转换为“容器”文件偏移量。具体来说,对于动态VHD,物理磁盘的整个长度被划分为逻辑2MBwindows。这个物理磁盘的动态 VHD 表示本质上是一个这样的 2MB 块的序列,没有特定的顺序。含义:在动态 VHD 映像中,一个 2MB(物理)磁盘 window 可能(在动态 VHD 中)位于一个 2MB 磁盘 window 之后,而在实际磁盘中,它在物理上始终位于第一个 2 MB 之前window。 Block Allocation Table中维护了哪个VHD块对应哪个物理磁盘window的映射。 BAT 条目(与数据块的潜在定位方式不同 non-sequentially)是有序的,并且包含相应容器数据块的动态 VHD 文件偏移量。

所以我们要做的就是:使用 BAT 中存在的 2MB 逻辑 window 条目找到我们需要写入的逻辑块的“VHD 文件偏移量”。然后,将 512 添加到它(即跳过每个块之前的扇区位图)。您此时获得的 VHD 文件偏移量是您需要写入给定输入逻辑磁盘偏移量的偏移量。 BAT 很可能没有您需要写入的逻辑磁盘块的条目。在这种情况下,您需要将新的 [512 Bytes + 2MB] 数据块附加到动态 VHD,更新 BAT 条目以指向该块的开头(512 扇区),然后更新动态 header和页脚的 CRC 字段,因为我们已经更新了 BAT(CRC 超过了它)。请记住,此方案仅对未链接的动态 VHD 有效。意思是,如果存在链接差异 child VHD,那么我们应该在 child 而不是基础上应用上述过程。谁是 parent 和谁是 child 的关系再次出现在动态 VHD 的 header 中。写入 child 还需要更新 512 字节扇区位图。

每个虚拟化镜像容器都有类似的方案来以稀疏方式表示磁盘块。如果我们通过格式,那么读取和写入(在块级别)是可能的。此外,对于大多数情况,原则上我们可以通过将卷级别偏移量转换为磁盘级别然后 运行 上面的 look-ups

来进行粒度级读取