我在 HDD 上安装了 Windows 8,使用 UEFI 作为启动。HDD 具有以下 GPT 表:
DISKPART> list partition
Partizione ### Tipo Dim. Offset
--------------- ---------------- ------- -------
Partizione 1 Ripristino 300 Mb 1024 Kb
Partizione 2 Sistema 100 Mb 301 Mb
Partizione 3 Riservato 128 Mb 401 Mb
Partizione 4 Primario 390 Gb 529 Mb
Partizione 5 Primario 540 Gb 390 Gb
(抱歉,这是意大利语,但翻译很简单)。
我最近买了一个 SSD 驱动器,将其连接起来并安装了全新的 Windows 8。现在我有一个可以正常工作的双启动,但 UEFI 分区位于 HDD 上而不是 SSD 上。以下是 SSD 分区列表:
Partizione ### Tipo Dim. Offset
--------------- ---------------- ------- -------
Partizione 1 Riservato 128 Mb 1024 Kb
Partizione 2 Primario 221 Gb 129 Mb
我认为最好的解决方案是将其放在 SSD 上,原因有二:
首先是性能(我猜想 SSD 的速度会稍微快一些,因为 HDD 的旋转时间较长,但我可能错了。)
第二个原因是一致性。由于我计划仅使用位于 SSD 上的 Windows 8 安装,并且我可能会擦除 HDD 上的系统分区以将其用作数据存储设备,因此我认为启动分区应该与操作系统位于同一驱动器上。
所以问题是如何将 EFI 系统分区移动到 SSD?
答案1
我的建议是不要这么做。性能改进将微不足道,因为从 ESP 读取的文件很小,并且只在计算机启动时读取。此外,按现代标准,分区本身很小,因此您无法恢复足够的空间来使努力变得值得。此外,移动 ESP 的尝试可能会产生启动问题,而修复这些问题所需的时间将远远超过您通过移动节省的启动时间。
尽管我不建议你这么做,但如果你想继续将此作为一次学习经历,你需要研究:
- 使用你喜欢的任何分区软件创建 ESP。我不确定如何使用标准 Windows 工具来做到这一点。使用
gdisk
,您将创建一个类型为 EF00 的分区,但随后您需要在其上创建一个 FAT 文件系统,因为它gdisk
是一个仅分区工具(它不处理文件系统)。 - 同时安装两个 ESP 以复制文件(或使用临时存储按顺序复制)。我不确定如何在 Windows 中执行此操作,尽管在 Linux 或 EFI shell 中执行此操作很容易。(事实上,在 EFI shell 中它将自动执行。)
- 在新目录中注册引导加载程序。(使用后备文件名
EFI\BOOT\bootx64.efi
可能是一种更简单的替代方法,但不是加载引导加载程序的首选方法。)Windowsbcdedit
命令和 EFI shell 的bcfg
工具可以注册引导加载程序;但是,bcdedit
由于 Windows 仅支持一个 ESP,因此缺乏灵活性,这在复制 ESP 时会产生问题。
答案2
对于像我这样来自 Google 的人来说:是的,可以在 Windows 上执行此操作,无需任何第三方工具。已使用 Windows 10 Pro x64 测试。我使用此过程移动了 EFI 系统分区和系统保留分区。它也应该适用于 Windows 8。
如果您的主驱动器空间不足,首先您需要缩小 C: 分区(或同等分区)。我在此示例中使用了 260 MB,因为这是较新的驱动器所需的空间,但扇区较小的较旧的驱动器仅需要 100 MB。如果您不需要腾出空间,请注意注释,其中指出了您应该跳过哪些步骤。
在此过程中,您可能想要移动系统保留分区。这些分区通常为 1000 MB,用于存储有用的 Windows 元数据。您可能会发现,如果没有系统保留分区,某些 Windows 功能将无法使用。我已包含在您的主驱动器上创建此类分区的步骤,并用注释标记了这些步骤。如果您想跳过这些步骤,应该很容易排除它们,但您需要在缩小时更改数字(例如,260 MB 而不是 1260 MB)。
注释以 (表示“备注”) 为前缀REM
,因为 cmd.exe 和 diskpart.exe 都支持这些注释。
从以管理员身份运行的 cmd.exe:
diskpart
list disk
REM Choose the appropriate disk number from the list. If you're unsure, you can open diskmgmt.msc; the numbers will be the same.
sel disk 0
list part
REM Perform the following only if you need to shrink a partition to make space for the EFI partition.
REM Choose the appropriate partition from the list. I used my C: partition.
sel part 2
shrink desired=260
REM End of shrinking operation.
REM Create a new EFI partition:
create part efi size=260
format quick fs=fat32
list vol
REM Find your newly created volume in the list. If it's not already selected (marked with an asterisk), select it now with "sel vol #".
REM You'll need to give the volume a drive letter for later:
assign
list vol
REM Note the drive letter that the volume has been given. Mine was F:, so I'll use that in the example.
REM Done creating new EFI partition.
REM Optionally create a new System Reserved partition:
create part msr size=1000
REM Done creating new System Reserved partition.
REM We're done with diskpart.exe:
exit
REM You should no longer see the DISKPART> prompt.
REM Note that you may need to change these drive letters, particularly F:. F: should match the volume you created previously.
bcdboot C:\Windows /s F: /f UEFI
REM We no longer need a drive letter for the EFI partition, so we should remove it:
diskpart
list disk
REM Change disk number appropriately.
sel disk 0
list vol
REM Change volume number appropriately.
sel vol 2
REM Remove drive letter assignment:
remove
REM Exit diskpart.exe:
exit
REM Exit cmd.exe:
exit
是时候重新启动以确保一切正常了。您可能需要更新 BIOS 启动顺序设置以匹配更改。就我而言,BIOS 设置已经正确,所以我陷入了重新启动循环;每次我想启动计算机时,我都必须手动选择 EFI 分区放错位置的旧驱动器。
如果一切按预期进行,您将能够删除旧的 EFI 分区。如果它不起作用,或者您的 BIOS 仍然配置为从旧分区启动,Windows 将不允许您删除它,即使您在 diskpart.exe 中使用覆盖标志。由于您可能无论如何都想摆脱那个旧分区,因此删除它是确保您从新分区启动的好方法。
diskpart
list disk
REM Change disk number appropriately.
sel disk 2
list part
REM You can repeat this next group of steps to delete as many "special" partitions as you like. I had 4 reserved partitions from an old OEM installation. Just make sure you don't delete your data! The "override" flag is only necessary for partitions that can't normally be deleted.
REM Change partition number appropriately.
sel part 1
del part override
REM When you're done, exit diskpart.exe:
exit
REM Exit cmd.exe:
exit
答案3
我知道这是一篇老帖子,但我认为很多人仍然想要一个好的答案。
这适用于 Windows 7、8、10。如果 ESP 分区位于活动操作系统以外的其他磁盘上且需要备份,则对于事件 ID:12290 也有效。
首先断开任何包含 ESP 分区的其他驱动器,这样您就不会意外更改该驱动器。
然后,您必须在要放置 ESP 分区的磁盘上创建一个 100 - 300 MB 的新分区。如果驱动器已满,则首先必须缩小现有分区之一。
在我的例子中,从 USB 启动 Xubuntu 13(我认为是 Ubuntu 12.1 以上版本)。不要安装它。
打开 Gparted 并创建分区并将其格式化为 FAT32。将驱动器标记为“启动”,并取消标记为“启动”的任何其他分区。如果可能,还要为新分区分配一个驱动器号。如果没有,您可以稍后使用 diskpart 进行分配。
重新启动并从 Windows 安装 DVD 使用 Windows (RE) Recovery 启动。转到命令提示符。启动 diskpart 并为新分区分配驱动器号(如果在 Gparted 中无法执行此操作)。退出 diskpart 但留在命令提示符中。
现在您要将必要的文件复制到新的分区中。
bcdboot <source> /S <ESP drive letter>: /f UEFI
注意空格!例如:bcdboot c:\Windows /s x: /f UEFI
此命令也将提供分区 ESP 状态。
使用以下命令重建 BCD:
bootrec /RebuildBcd
现在,当系统询问您要向 ESP 分区添加什么操作系统时,您会说是的您想要包括的内容不到你不想启动到的那些。就像我最近升级到 Windows 10 的情况一样,你可能知道,如果你没有自己删除它,Windows 会存储你的旧 Windows 7/8 一段时间。你通常不希望能够启动到旧操作系统的这个副本。它通常驻留在 中Windows.old
。所以不要选择全部选择。
我不知道,但我认为这个命令只搜索 Windows 安装。例如,如果您在同一台计算机上安装了 Linux 操作系统。然后您必须使用类似 bcdedit 的程序才能在启动菜单中获取它。
还有最后一条命令,我没有使用。
bootrec /fixboot
我尝试进一步了解该命令,我认为它只是在 ESP 分区上设置了启动标志并使其可启动。这应该与我在 Gparted 中将 ESP 分区标记为启动时的情况相同。
如果您不再需要另一个 ESP 分区,最简单的方法是再次启动 Linux/Gparted 并从那里将其删除。
答案4
好吧,让我们再添加一个解决方案。我的目的不仅是复制 EFI 分区,甚至其他隐藏的。我不确定顺序是否重要(我个人的顺序与 msdn 上的不同)但是 w/e。
无论如何,我用过GParted 直播为这一壮举。启动后,我将 Windows 主分区(应该是C:
)减少了与新磁盘上缺少的分区相同的 MiB 数量,并将其移动到末尾。这需要相当长的时间。
然后,我在新调整大小的分区下方新建了一个 16MiB 分区,将dd
Microsoft 保留分区(用于原因看起来 parted 无法处理未格式化的文件系统。与往常一样,使用 dd 时,要格外小心命令。
完成后,我返回 GParted GUI 并手动为新的 MSR 分区设置正确的标志和名称,然后删除原始分区。最后但并非最不重要的是,我最终复制了恢复并将 EFI 分区从原始 HDD 复制到 SSD(并重复名称/标志操作)并运行sgdisk -s
以修复分区顺序。
重启,然后受益!无需修改 efibootmgr 或启动,至少在我的笔记本电脑上它自动找到了新的 ESP。
编辑:如果在扩展第一个磁盘时,由于某种原因,Windows 磁盘管理器将其转换为动态卷。检查这个解决方法。