这个问题与几年前的一个,我当时正在寻找一种方法来执行部分映像备份。这部分内容从未得到解答,因此这是一个专门针对它的问题。
问题
我计划缩小 Windows 分区,并想先制作一个映像备份以防万一。如果需要恢复,则需要将备份恢复到缩小的分区。
由于目的是为系统提供原有的保险,因此备份必须是“原始”内容,在进行任何会改变任何内容或引入任何新风险的修改之前。
Windows 分区压缩工具会提前告诉您它将压缩分区的程度。我想要的只是压缩后剩余分区部分的图像。
我有一个基于文件的备份,所以我不担心任何可能在收缩区域之外并且可能未被备份捕获的文件。
解决方案概念
传统观点认为,使用 无法满足这些要求dd
。然而,考虑到这样做的危险性,有一种似乎应该成为解决方案的方法(我假设dd
基于 的解决方案将在 Linux 内部执行)。
想法:
dd
有可用参数来指定起始和结束位置。- 任何分区管理工具都会显示该分区在驱动器上的位置。
- Windows 分区收缩工具显示它将收缩 Windows 分区的程度。
这似乎是计算dd
参数的原始材料。把这些部分拼凑在一起是我以前没有做过的事情。所以问题是:
- 如何确定
dd
反映分区缩小部分的参数 dd
将相关部分复制到备份驱动器的命令dd
将该映像还原到原始驱动器上的同一位置的命令
警告
定义并从裸机上复制分区的所需部分看起来应该很简单。但是,有一点尚不清楚,那就是 NTFS MFT 是否与原始分区大小相关,因此将其恢复到缩小的分区会使其损坏,至少超出了修复的能力chkdsk
。
问题目标
这最终目标是创建 Windows 分区的部分映像备份,如所述。这个问题在原始问题中从未找到解决方案,因此这个问题旨在提供一种潜在方法的种子。但是,我的概念可能行不通。因此,虽然解决方案dd
是这个问题的重点,但我不会排除使用内置或常用免费工具的替代解决方案。因此,成功的答案可以是:
- 基于工作
dd
的解决方案 dd
关于为什么基于 的解决方案不可能起作用(或至少不能相信其可靠地起作用)的权威而明确的解释- 实现目标的替代解决方案。
附录
Kamil Maciorowski 的回答提出了另一个问题,仅从硬盘克隆正在使用的空间,这非常相似,但我不认为这是重复的。一些关键区别:
- 那个问题试图仅克隆已使用的空间。这个问题试图克隆分区的特定部分。
- 这个问题对获得结果没有任何特别的限制。这个问题要求图像是原始的当前状态,内容没有任何改变或风险,这排除了任何类型的“准备”。
- 那个问题是关于整个驱动器和 Linux 文件系统的。这个问题是关于分区的一部分和 NTFS 的。
答案1
我可以说这是XY问题真正的问题是:如何仅从硬盘克隆正在使用的空间(或分区)?我不想在没有解释为什么它应该比你提出的想法更好的情况下指出另一个答案;所以这里是:
一般情况下,即使经过碎片整理,也不能保证可用空间会聚集在文件系统的最末端。我对 NTFS 和 FAT 系列不太了解,因此无法确定,但我怀疑可能有一些数据结构占用了大型文件系统的远扇区,无论它有多空。
因此,我对只保存部分图像的想法持怀疑态度。也许有些文件系统可以解决这个问题,也许 NTFS 就是其中之一——我不知道。
我多次做过与您想要实现的目标类似的事,主要是使用 NTFS。无论文件系统中的空闲块位于何处,我的方法都有效。基本上:
- 将零写入文件,直到没有剩余空间,
- 同步,
- 删除零文件,
umount
,- 将图像保存为稀疏文件或压缩文件。
这可能需要很长时间。事先确保文件系统健康。如果您怀疑磁盘有故障,也不要这样做。
更多详细信息请访问我对已经提到的问题的回答。重要的区别是您将用 读取单个分区dd
,而不是整个驱动器。
不幸的是,这样的映像无法恢复到缩小的分区。如果缩小过程失败并且您丢失了原始文件,则该映像将很有用。我认为您需要一个可以备份文件(以及文件系统内的元数据)的工具,以便能够恢复到较小的分区。好吧,dd
没有这样的工具。