作大死系列之——为已有的Windows系统创建EFI分区
这篇文章的诞生是这样的,去年冬天我入手了Y50,并且上了昂贵的850PRO。然而随着工作需求的增加,128G的850显然不够用了(装了一个用友就20多个G没了233333),所以又换了块更大容量更加昂贵的850PRO。
造成作大死的需求
此时产生了一个需求——我要将原来850PRO的Windows系统分区(也就是传说中的C:\,Windows默认安装在了sda3.old下),移到新硬盘的sda2.new下,并且我不要原来硬盘的系统保留区(废柴的sda2.old)。然而ESP分区(EFI System Partition)仍然保持100MB放在sda1中(因为后续要用grub引导bootmgfw.efi,gurb和bootmgfw并存于sda1)。
简洁地说,我只有Windows系统区而没有引导区,怎么样建立ESP分区,并引导Windows启动?
此需求的要求是
- UEFI + GPT分区表(BIOS+MBR请绕道其他文章,BIOS+GPT这种变态请跳至wzyboy的神文)
此需求还适用于如下场景:
- EFI分区丢失,误删,不小心写错引导
- 先装XNIX,再装Windows,不损坏GRUB
- BALABALABALA
方法
分析一下现在的分区结构
- sda1 —— ESP分区 100MB (这是一个空白的分区,木有东西)
- sda2 —— Windows系统目录 150GB
- sda3 —— ArchLinux挂载点 / 50GB
提取了Windows安装盘中的PE之后,打开PE,进入CMD。按照正常的操作,只需要DISKPART分配驱动器号——EFI分区分配(X:);Windows分区分配(C:),然后输入:
bcdboot C:\Windows /l zh-cn /s x: /f UEFI
然后出现了尝试复制启动文件失败
的问题23333333。
经查验,发现事实上ESP分区并没有被成功建立,原来bcdboot只认识FAT格式的分区,于是将EFI分区format一下子,问题就解决了QAQ(实际上这个步骤我已经忘掉了,但是我就提一下有这个步骤~)
GRUB
由于EFI分区已重构,GRUB写在EFI分区中的引导信息也没了,那么此时就需要在Linux环境下重建GRUB引导。以ArchLinux为例:
# grub-install --target=x86_64-efi --efi-directory=$esp --bootloader-id=grub
其中,$esp
是挂载后的UEFI分区。
OK,备忘录写完了!P.S. 这篇文章写了差不多有2个月了。因为第一个草稿是:Dick_Wu,2月前(2016年11月10日 @ 23:09:22)