原因 1:Explorer 试图表现得友善

原因 1:Explorer 试图表现得友善

如果我将 Windows 机器上的整个 C 盘复制到新驱动器(通过复制粘贴甚至镜像工具),是否存在无法启动复制的 C:驱动器的原因?

前提是辅助驱动器上的 MBR 已正确设置编辑:并且文件锁定不是问题,复制粘贴不必从要复制的 C 驱动器窗口内部进行,可以是已安装的驱动器。

我理解从备份的角度来看,进行完整快照“更好”,但这个问题与“最佳”实践无关。

有人告诉我,仅通过镜像驱动器文件无法让系统恢复运行。我不明白为什么!如果是 1:1 复制(所有文件都已验证在第二个驱动器上),那么你应该已经拥有所需的一切??

我被告知的主要原因是注册表不会被复制。但机器上的所有内容肯定都是某个地方的文件?

答案1

这很可能行不通。

这个答案可能假设一个典型的设置,其中 C: 保存操作系统。

让我先举一个例子来说明为什么你无法获得精确的副本:

原因 1:Explorer 试图表现得友善

当您使用 Microsoft Windows 的 GUI(资源管理器)将图片复制到新文件夹时,Windows 会尝试为您执行“用户友好”的操作。它将查看图片,制作缩略图,并将其存储在名为 thumbs.db 的文件中

因此,如果您复制一堆文件,并且它以 ApicOne.jpg 开始,然后是 BpicTwo.jpg,然后是 CpicThree.jpg,那么它会在复制这三个图像时创建 3 个缩略图。

然后,当它尝试复制较旧的 thumbs.db 文件时(因为我们要复制所有文件),就会发生冲突,因为较新的 thumbs.db 文件已经存在。较新的 thumbs.db 文件尚未包含 ZpicTwentySix.jpg 文件(假设文件按字母顺序复制)。因此 GUI 停止复制,同时询问您是否要覆盖名为 thumbs.db 的预先存在的文件

简单的事实是:这很痛苦。

现在,理论上,您可以跳过该文件(并保留旧文件),或者覆盖旧文件,因为新文件应该包含相同的缩略图(最终,在复制最后一张图片之后)。但是,该较新的文件现在将具有不同的修改日期。因此,您没有完全相同的副本。另外,如果文件之前以不同的方式排序(可能根据文件日期添加到目录中,随着时间的推移下载它们),但随后按照 Explorer 复制它们的方式排序(按字母顺序),那么,再一次,您没有以完全相同的方式存储所有内容。

原因 #2:文件可能不是它们所显示的那样

有些文件实际上并不像它们看起来的那样存在。C:\Windows\WinSXS\ 包含所谓的“并排程序集”。基本上,当您安装两个依赖于共享文件的程序时,较新版本的 Microsoft Windows 将保留该文件的两个版本,即使它们具有相同的文件名。当您更新文件时,Microsoft Windows 可能会同时存储新文件和旧文件。当安装了多个软件时,这些技术可以提高兼容性,并有助于在出现问题时回滚到之前的状态(“系统还原”)。但实现这一功能的方式很复杂。

如果你运行 WinDirStat(从WinDirStat 页面,此程序将显示硬盘上的文件大小。C:\Windows\WinSXS 目录看起来非常大。非常大。

但是,这是错误的。你看,WinSXS 目录很特殊。该目录将报告文件具有特定大小。但是,实际上,Windows 对该文件夹使用了一些特殊技巧。该文件夹中实际上有一堆共享某些数据的部分文件。我想。类似这样。关键是:使用了一些技巧。而 WinDirStat 不理解这些技巧。因此 WinDirStat 相信 Windows 对它说的每一个谎言,WinDirStat 最终说 WinSXS 目录中的文件占用了大量磁盘空间。

当您尝试运行程序时,Windows 足够智能,能够将 DLL 文件的各个部分组合在一起,并让程序看到所需数据的副本,因此程序就可以正常运行。

当您使用 Explorer 的 GUI 尝试复制该目录时,Explorer 的 GUI 的“复制”功能无法理解 WinSXS 的特殊性。因此,“复制”功能将尝试将每个单独的文件当作整个文件进行复制。结果是文件被复制到未被特殊处理的目标目录中。因此目标与特殊源不匹配。

原因3:启动过程可能很复杂

引导代码可以做一些有趣的事情。不同操作系统的不同版本可能会有不同的行为,因此我在此处提到的具体细节可能与您所使用的 Windows 版本并不完全匹配。基本上,系统启动 (BIOS / (U)EFI) 将检查磁盘中带有引导代码 (MBR / GPT) 的部分,该部分将指向文件的位置。了解计算机正在运行的代码可能非常简单。这种简单的代码甚至可能无法完全理解文件系统的复杂细节。例如,它可能不理解 NTFS 连接。但没关系。也许引导代码只知道必要的文件位于磁盘的扇区号 6,189,247,145 上。安装操作系统时,操作系统会帮助确保引导代码知道文件的正确位置。

如果您从根目录 (C:*.)复制到新驱动器 (D:*.),Windows 资源管理器的 GUI 可能会以非常简单的方式执行操作,例如按字母顺序复制数据。如果您的操作系统添加了一个文件(例如,名为 C:\BootLog.txt 的隐藏文件),则该文件可能位于 C:\bootmgr 之前(按字母顺序)。因此,C:\bootmgr 不会像 Windows 安装到 C:\ 驱动器时那样早地显示在文件列表中。

前提是辅助驱动器上的 MBR 已正确设置

好的,所以您了解 MBR 可能需要找到该文件。

现在,磁盘引导代码的工作通常是查找包含有关如何引导系统的更多详细信息的文件。例如,对于 Windows 95,这些详细信息通常存储在名为 \IO.SYS 的文件中(但也可以使用其他一些文件名)。在 IBM PC DOS 中,相同类型的功能存储在 C:\IBMBIO.COM 和 C:\IBMBIO.SYS 中。因此有多个可以协同工作的引导文件。

因此,问题可能不仅仅局限于 MBR。即使操作系统启动后,引导加载程序也可能有多个“阶段”,这可能会影响多个文件。我确实知道至少有一个操作系统记录了“第一阶段引导加载程序”和“第二阶段引导加载程序”,更不用说稍后启动的“内核”了。因此,对引导的担忧不仅限于对初始引导扇区的担忧。

原因#4:数据可能正在使用中

我被告知的主要原因是注册表不会被复制。但机器上的所有内容肯定都是某个地方的文件?

我不相信这一点。我相信一旦 Windows 启动,它可能会将一些注册表存储在内存中,或存储在某种缓存文件中。即使注册表存储在磁盘上,其中一些可能位于另一个文件中(如“DataThatStillNeedsToBeWritten”文件),并且正在运行的 Windows 副本可能会记住“我还有一些数据需要写入”。

在 Windows GUI 复制主注册表文件后,Windows 可能会执行它需要做的一些工作,比如将数据从缓存文件(我在这个示例中称之为一个荒谬的名字“DataThatStillNeedsToBeWritten”)移动到主注册表文件中。

当 Windows GUI 开始复制“DataThatStillNeedsToBeWritten”缓存文件时,该文件不再具有已复制到注册表的详细信息。

现在,如果您的计算机断电,Windows 通常可以很好地恢复(可能通过运行 ChkDsk 的帮助)。但是,对于您在 D: 上制作的文件副本,某些关键数据可能从未成功复制,因此 Windows 的新“副本”可能无法成功恢复。

正是这个概念让微软开发了一些复杂的技术,比如 Windows 的“卷影复制服务”(通常缩写为 VSS 或 VSC;这两个缩写都指代同一个事物)。这些担忧让备份软件可以获取“系统状态”,而流行的备份软件产品可能具有专门的插件来与 SQL 数据库和电子邮件进行交互(因为这些数据通常保持在线/可用,并且正在被积极使用)。

评论

请注意,我并不是说这些是唯一的问题。这些只是我脑海中迅速浮现的一些问题。随着新版本的推出,Microsoft Windows 平台变得更加复杂。(XP 明显比 2K/ME 复杂,XP Service Pack 2 也引入了明显的复杂性,Vista 也是如此,也许 7 也是如此,8 肯定也是如此,根据这一记录,我敢肯定 10 也是如此。)所以,我可能忽略了一些原因,尤其是因为新版本将来会继续增加更多复杂性。

解决方案

解决这些问题有两个技巧:

  • 如果 Windows 从另一个硬盘启动,那么通常可以复制 Windows 的休眠副本,并且这些问题较少。
  • 支持“快照”的软件通常具有特殊代码来尝试考虑到其中的许多问题。

答案2

如果您使用启动盘执行此操作,然后在不运行操作系统的情况下进行复制,那么它应该可以工作,只要您想要复制用户文件和文档即可。如果您尝试复制过去以制作硬盘驱动器的映像,它将失败,文件和注册表系统会损坏。如果使用成像程序,它应该可以正常工作。当我在客户端计算机上工作时,我个人使用 DriveSnapshot这里。我会说这个程序给人一种比较老旧的感觉,但这正是我喜欢它的原因之一,而且它运行良好。如果你去看看,可能会有几个免费的映像程序。映像程序在复制磁盘时效果很好的主要原因是它是逐字节复制,所以一切都是一样的。当只使用复制粘贴命令时,它会把事情搞得一团糟(根据我的经验,把事情搞得一团糟意味着系统文件损坏。)。此外,复制粘贴不会在注册表中正确注册内容,因为注册表当前未在第二个驱动器上运行以将系统指向正确的文件。我希望这能帮助你解答你的问题。

答案3

复制粘贴不起作用。首先,MBR/GPT 中的许多值都是动态的,相对而言。硬盘 A 是 400gb,硬盘 b:3tb,所有扇区计数的起始和结束分区都是错误的。

分区第一个扇区内的引导记录的值也会有所不同。现在,磁柱、磁头和磁扇区都是模拟值,但您也可能在此处遇到错误。

您可以离线复制和粘贴,但您必须提前创建 MBR/GPT。然后创建分区并格式化它们。然后正确设置启动标志,然后将文件复制回来。此外,您可能必须使用 bcdedit 重新制作启动菜单。

从 Windows PE 或类似磁盘启动,使用微软免费提供的 imagex 更简单,是一种更简单、更可靠的方法。如果分区不存在,您仍然需要使用 diskpart 来创建分区。

答案4

计算机启动所需的各种关键信息并不存储在硬盘的文件系统中,而是存储在特定位置(有时存储在单独的分区中,系统运行时您看不到)。

因此,机器上的所有内容都是文件这一说法并不正确。

在 Windows 8 和 EFI 出现之前,这相当容易;但新的、更灵活的计算机启动方式使其变得更加复杂。

不过,有很多商业软件包可以让你做到这一点。

相关内容