将EFI系统分区移动到另一个驱动器


14

我在HDD上安装了Windows 8,使用UEFI作为启动。硬盘具有以下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驱动器,将其连接并安装了新的Windows8。现在我可以正常使用双引导,但是UEFI分区位于HDD而不是SSD上。这是SSD分区列表:

Partizione ###   Tipo              Dim.     Offset
---------------  ----------------  -------  -------
Partizione 1     Riservato          128 Mb  1024 Kb
Partizione 2     Primario           221 Gb   129 Mb

我认为最好的解决方案是将其安装在SSD上,原因有两个:

首先是性能(我想由于HDD的加速时间,SSD上的速度会更快一些,但我对此可能是错的。)

第二个原因是一致性。由于我计划仅使用SSD上的Windows 8安装,并且可能要擦除HDD上的系统分区以将其用作数据存储设备,因此我认为引导分区应位于同一磁盘上。作为操作系统驱动。

因此,问题是如何将EFI系统分区移至SSD?

Answers:


4

我的建议是不要打扰。性能提升将是微不足道的,因为从ESP读取的文件很小,并且仅在计算机启动时才读取。此外,按照现代标准,该分区本身很小,因此您将无法获得足够的空间来进行相应的工作。此外,尝试移动ESP可能会产生启动问题,而修复该问题所花费的时间要远远多于您从迁移中节省的启动时间。

尽管有我的建议,但您仍想继续学习并以此为学习经验,则需要研究以下内容:

  • 使用您喜欢的任何分区软件来创建ESP。我不确定您将如何使用标准Windows工具执行此操作。使用gdisk您将创建类型为EF00的分区,但随后需要在其上创建FAT文件系统,因为它gdisk是仅分区工具(它不处理文件系统)。
  • 同时安装两个ESP以复制文件(或使用临时存储顺序安装)。我不确定如何在Windows中执行此操作,尽管在Linux或从EFI Shell中会很容易。(实际上,它在EFI shell中是自动的。)
  • 在新主目录上注册引导加载程序。(使用的后备文件名EFI\BOOT\bootx64.efi可能是一个更简单的选择,但是是加载引导加载程序的次要方法。)Windows bcdedit命令和EFI Shell的bcfg工具都可以注册引导加载程序。但是,它bcdedit是不灵活的,因为Windows仅支持一个ESP,这在复制ESP时会产生问题。

谢谢您的回答。好吧,实际上我更喜欢将ESP放在SSD中,因为我可能决定删除HDD。因此,我认为ESP应该在OS驱动器上。无论如何,最新点如何处理?
Pincopallino

没关系,我设法将分区移至SSD并定期启动Windows。非常感谢你!
Pincopallino

这里的一些有趣信息对于解释通用HOWTO中发生的事情可能非常有价值,但并不能真正回答:“所以问题是我如何将EFI系统分区移至SSD?” 几年前,我花了几天的时间试图从一个错误的决定中恢复过来,但它仍然困扰着我,总之,归结于重新定位我的EFI分区,所以我希望看到一个好的答案。
rainabba 2015年

值得注意的是,拥有两个EFI分区有时会导致Windows更新以极其晦涩的方式失败,因此请在移动后删除旧的分区。
杰克·瓦西

14

对于来自谷歌的像我这样的人:是的,可以使用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仍配置为从旧分区启动,即使您使用diskpart.exe中的替代标志,Windows也不允许您删除它。由于您可能仍然想摆脱旧分区,因此删除它是确保从新分区启动的一种好方法。

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

2
一个非常详细且解释清楚的答案,行之有效!谢谢!
kumarharsh

3

我知道这是一篇过时的文章,但我认为许多人仍希望得到一个好的答案。

这适用于Windows 7、8、10。并且对于事件ID:12290也有效,如果ESP分区位于不是活动操作系统且要备份的磁盘上,则位于其他磁盘上。

首先断开任何其他包含ESP分区的驱动器,以免意外更改该分区。

然后,您必须在要ESP分区驻留的磁盘上以100-300 MB创建一个新分区。如果驱动器已满,则首先必须收缩现有分区之一。

以我为例,从USB闪存盘启动Xubuntu 13(我认为Ubuntu在12.1以上)。不要安装它。

打开Gparted并创建分区并将其格式化为FAT32。将驱动器标记为“引导”,并取消标记为“引导”的任何其他分区。如果可能,还为新分区分配驱动器号。如果没有,您可以稍后使用diskpart进行操作。

重新启动,然后从Windows安装DVD使用Windows(RE)恢复启动。转到命令提示符。启动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 7/8,Windows会存储一段时间。您通常不希望将旧OS的此副本启动。它通常位于Windows.old。因此,请勿选择“ 全部”替代项。

我不知道,但是我认为该命令仅搜索Windows安装。例如,如果您在同一台计算机上安装了Linux OS。然后,您必须随后使用诸如bcdedit之类的东西才能正常启动。

最后一个命令,我没有使用。

bootrec /fixboot

我试图学习更多关于命令的信息,但我认为它只是在ESP分区上设置了启动标志并使其可启动。这应该与我在Gparted中将ESP分区标记为boot时相同。

如果您不再需要另一个ESP分区,最简单的方法是再次引导到Linux / Gparted并从那里删除它。


对我来说,一切都进行得很好,直到bootrec /fixboot每次都抛出相同文件未找到错误为止。
kumarharsh

当Windows分区位于另一个驱动器上时,它似乎不会自动挂载Windows分区,从而导致引导始终失败。
Jeroen

1

我使用正版W10安装ISO(DVD)在新的SSD光盘上创建了全新安装。安装转到MBR类型而不是GPT。我需要安全启动,因此我不得不将此新安装(无数据丢失)从MBR转换为GPT。

然后,我通过缩小光盘末尾的最后一个NTFS分区来创建可用空间(260 MB)(我从USB记忆棒从SystemRecueCD引导Linux并使用gparted,但也可以使用Windows 10的Disc manager。

然后,我将这个新的小分区格式化为FAT32(也可以在Windows或Linux中完成)。我将文件从原始EFI复制到了这个新分区(我在Linux中这样做是因为Windows不喜欢驱动器号为C:的两张光盘)。

然后我在Linux中通过gdisk将MBR更改为GPT。我使用了gdisk,然后必须将此小分区更改为ef00(EFI)类型并标记为可引导(应该只有一个,因此应从原始可引导驱动器C:中除去可引导标志)。

然后,我将笔记本电脑的SETUP中的启动类型更改为仅UEFI,只是为了确保它确实由EFI启动。Windows无法启动,因为缺少某些文件(名称中带有“ efi”)。

然后,我从Windows 10安装DVD引导,选择“救援系统”,然后选择“修复引导问题”。然后Win10启动就没有问题了。bcdboot不需要手动操作。

可以通过Linux中的efibootmgr实用程序检查EFI配置。


0

好吧,让我们添加另一个解决方案。我的目的不仅是复制EFI分区,甚至还要考虑其他隐藏的分区。我不确定订单是否重要(我个人的订单与msdn上描述的订单不同),但是有。

无论如何,我使用了GParted Live作为壮举。一旦启动,请减少Windows主分区(应为C:)与新磁盘上缺少的MiB数量相同的分区,然后将其移至末尾。这将需要一些时间。

然后,我继续在新调整大小的分区下面创建一个新的16MiB分区,dd该分区是Microsoft保留分区的位置(出于某种原因,似乎parted无法处理未格式化的FS)。与往常一样,使用dd时,请务必小心使用命令。

完成后,我返回到GParted GUI,并为新的MSR分区手动设置正确的标志和名称,然后删除原始的分区。最后但并非最不重要的一点是,我最终将恢复和EFI分区从原始HDD 复制到了SSD(并重复了名称/标志操作)并运行sgdisk -s以修复分区顺序。

重新启动,并获利!无需修补efibootmgr或bcdboot,至少在我的笔记本电脑上它会自动找到新的ESP。

编辑:如果延伸的第一盘时,由于某种原因,Windows磁盘管理器将其转换为动态卷。检查此解决办法

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.