移除 BCD 与 NVRAM 中重复的固件对象

在有些使用统一可扩展固件接口 (UEFI) 的计算机上,固件会在计算机开机时为本机装置 (如 CD-ROM 或硬盘) 建立静态随机存取内存 (NVRAM) 项目。Bcdedit 会同步处理 NVRAM 中的固件命名空间对象与系统开机设定数据 (BCD)。Bcdedit 会在您执行 bcdedit /set 或 /enum 命令时,开启系统 BCD 存放区。bcdedit 开启 BCD 时,会比较 NVRAM 中的项目与 BCD 中的项目。固件在 NVRAM 中建立的项目若未存在于 BCD 中,即会新增至系统 BCD。当 bcdedit 关闭系统 BCD 时,BCD 中任何不在 NVRAM 内的开机管理程序项目皆会新增至 NVRAM 中。bcdedit
/import 命令会将系统 BCD 中的所有固件命名空间对象复制到 NVRAM 中。

若您执行多项 bcdedit /import 操作,NVRAM 即可能包含系统上之装置 (如 CD ROM 与硬盘) 的多个项目。多项 /import 操作可能会导致许多重复项目。下列命令可用以列举 BCD 中的固件命名空间对象:

Bcdedit /enum firmware

下列范例类似于 bcdedit /enum 固件命令所产生的输出:

固件开机管理程序

---------------------

identifier              {fwbootmgr}

displayorder            {bootmgr}

{93cee840-f524-11db-af62-aa767141e6b3}

{93cee841-f524-11db-af62-aa767141e6b3}

{93cee842-f524-11db-af62-aa767141e6b3}

{93cee844-f524-11db-af62-aa767141e6b3}

{93cee843-f524-11db-af62-aa767141e6b3}

timeout                 2

 

Windows 开机管理程序

--------------------

identifier              {bootmgr}

device 
                partition=\Device\HarddiskVolume1

path                   
\EFI\Microsoft\Boot\bootmgfw.efi

description             Windows Boot Manager

locale                  en-US

inherit                 {globalsettings}

default                 {current}

displayorder            {current}

toolsdisplayorder       {memdiag}

timeout                 30

 

固件应用程序 (101fffff)

-------------------------------

identifier             
{93cee840-f524-11db-af62-aa767141e6b3}

description             Primary Master CDROM

 

固件应用程序 (101fffff)

-------------------------------

identifier             
{93cee841-f524-11db-af62-aa767141e6b3}

description             Harddisk 4

 

固件应用程序 (101fffff)

-------------------------------

identifier             
{93cee842-f524-11db-af62-aa767141e6b3}

description             Internal EFI Shell

 

固件应用程序 (101fffff)

-------------------------------

identifier             
{93cee843-f524-11db-af62-aa767141e6b3}

description             Floppy

 

固件应用程序 (101fffff)

-------------------------------

identifier 
            {93cee844-f524-11db-af62-aa767141e6b3}

description             Acpi(PNP0A03,0)/Pci(1F|1)/Ata(Primary,Master)/CDROM(Entry1)

若您重复使用 bcdedit /import,NVRAM 与系统 BCD 中即可能会有多个固件对象。若您将主计算机中的 BCD 存放区汇入到目标计算机,则相同的装置可能会有多个固件项目。若有多个固件项目存在,您所看见的 bcdedit /enum 固件输出将包含类似下列范例所示的固件项目:

固件开机管理程序

---------------------

identifier              {fwbootmgr}

displayorder            {bootmgr}

{93cee840-f524-11db-af62-aa767141e6b3}

{93cee841-f524-11db-af62-aa767141e6b3}

{93cee842-f524-11db-af62-aa767141e6b3}

{93cee844-f524-11db-af62-aa767141e6b3}

{93cee843-f524-11db-af62-aa767141e6b3}

{8b87c5a0-f2f2-11db-9717-f87ee6ea6002}

{8b87c5a1-f2f2-11db-9717-f87ee6ea6002}

{8b87c5a2-f2f2-11db-9717-f87ee6ea6002}

{8b87c5a3-f2f2-11db-9717-f87ee6ea6002}

{8b87c5a4-f2f2-11db-9717-f87ee6ea6002}

timeout                 2

每个装置可能会有两个或更多具有不同 GUID 的项目。例如,主服务器 CDROM 可能包含多个项目:

固件应用程序 (101fffff)

-------------------------------

identifier             
{93cee840-f524-11db-af62-aa767141e6b3}

description             Primary Master CDROM

 

固件应用程序 (101fffff)

-------------------------------

identifier              {8b87c5a0-f2f2-11db-9717-f87ee6ea6002}

description             Primary Master CDROM

您可以使用多个 Bcdedit 命令,将 NVRAM 与 BCD 系统存放区中的多个或重复项目移除。若要对您想要移除的多个对象项目使用正确的对象 GUID,则可能必须手动建立命令脚本。

移除重复项目

1.      
使用下列 Bcdedit 命令为目前的系统存放区储存复本。

Bcdedit /export savebcd

您也可以于日后使用此档案进行复原。

2.      
复制要用于 Bcdedit 删除操作的 SaveBCD 档案。

Copy savebcd newbcd

3.      
列举系统 BCD 存放区中的固件命名空间对象,并将输出结果储存到文本文件中:

Bcdedit /enum firmware > enumfw.txt

4.      
使用 Notepad.exe 开启 Enumfw.txt,检视要删除之重复 GUID 项目的列表。检视计算机上的 GUID 项目列表。

5.      
使用 [记事本] 建立新的命令档案。将档案储存为 RemoveDups.cmd。

6.      
在 RemoveDups.cmd 档案中新增命令行,以删除依照 [固件开机管理程序] 显示顺序列出的重复固件 GUID:

Bcdedit /store newbcd /delete
{93cee840-f524-11db-af62-aa767141e6b3}

对每个要移除的 GUID 重复此命令。就上面的范例而言,在 RemoveDups.cmd 中加入下列命令:

Bcdedit /store newbcd /delete
{93cee841-f524-11db-af62-aa767141e6b3}

Bcdedit /store newbcd /delete
{93cee842-f524-11db-af62-aa767141e6b3}

Bcdedit /store newbcd /delete
{93cee843-f524-11db-af62-aa767141e6b3}

Bcdedit /store newbcd /delete
{93cee844-f524-11db-af62-aa767141e6b3}

Bcdedit /store newbcd /delete
{8b87c5a1-f2f2-11db-9717-f87ee6ea6002}

Bcdedit /store newbcd /delete {8b87c5a2-f2f2-11db-9717-f87ee6ea6002}

Bcdedit /store newbcd /delete
{8b87c5a3-f2f2-11db-9717-f87ee6ea6002}

Bcdedit /store newbcd /delete
{8b87c5a4-f2f2-11db-9717-f87ee6ea6002}

在 EFI 固件已初始化其本机装置之 NVRAM 项目标计算机上,您即可在必要时删除所有 GUID 项目。请不要删除 {bootmgr} 的项目

7.      
使用 /clean 选项在汇入操作的过程中移除所有 NVRAM 项目,并将最终命令新增至 RemoveDups.cmd,以汇入新的 BCD 档案:

Bcdedit /import newbcd /clean

8.      
储存档案,并于命令提示字符中执行 RemoveDups.cmd,即可移除 newbcd 存放区中所有的重复项目,并将 newbcd 存放区汇入系统 BCD 中。

9.      
重新开启系统。在重新启动期间,EFI 固件会重新初始化固件对象 GUID 对应于系统连接装置的 NVRAM。使用 bcdedit /enum 固件命令,确认所有重复的固件项目均已移除。

 

UEFI Windows7/8系统下的GUID磁盘创建休眠分区

      使用UEFI模式安装Windows7的好处就是开机可以直接跳过传统的BIOS自检,可以省下4~5秒的时间。再说现在的SSD硬盘价格很便宜了,开机的整个过程还不到30秒,可要用UEFI模式安装Windows7,磁盘模式就必须使用GPT格式(传统模式是MBR格式,不支持2TB以上的硬盘分区),可有个问题是MBR磁盘创建休眠分区(iFFS)可以选择OS/2 hiddle C:(set id=0x84),可到了GUID磁盘下要创建休眠分区就没法用diskgenius软件来创建休眠分区,这个问题也折腾了我很久,可创建休眠分区的好处是显尔易见,在Windows7系统下只要主板支持IRST(Intel Rapid Start(快速启动),系统直接睡眠或休眠,下次开机时间可能只要5~6秒的时间。

      那我就告诉大家如何在GUID磁盘下创建一个休眠分区。其实跟MBR磁盘模式下创建休眠分区一个样。

      首先用系统自带的磁盘管理软件选择最后一个分区选压缩卷,根据系统安装内存大少键入压缩空间量,注意2GB内存输入2048,4GB内存是4096,8GB内存是8192,16GB内存是16384。32GB内存是32768。

      接着用管理员模式打开命令提示符,键入diskpart,

      再键入Select disk 0;

      第三步键入create partition  primary

      然后键入set id=D3BFE2DE-3DAF-11DF-BA40-E3A556D89593

      至此休眠分区创建成功。接着安装Intel Rapid Start 软件就可以享受休眠后开机神速的感觉了。

固态硬盘TRIM功能

  原本在机械硬盘上,写入数据时,Windows会通知硬盘先将以前的擦除,再将新的数据写入到磁盘中。而在删除数据时,Windows只会在此处做个标记,说明这里应该是没有东西了,等到真正要写入数据时再来真正删除,并且做标记这个动作会保留在磁盘缓存中,等到磁盘空闲时再执行。
这样一来,磁盘需要更多的时间来执行以上操作,速度当然会慢下来。
而当Windows识别到SSD并确认SSD支持Trim后,在删除数据时,会不向硬盘通知删除指令,只使用Volume Bitmap来记住这里的数据已经删除。Volume Bitmap只是一个磁盘快照,其建立速度比直接读写硬盘去标记删除区域要快得多。这一步就已经省下一大笔时间了。然后再是写入数据的时候,由于NAND闪存保存数据是纯粹的数字形式,因此可以直接根据Volume Bitmap的情况,向快照中已删除的区块写入新的数据,而不用花时间去擦除原本的数据。
以上就是Trim的原理以及真正作用。
注意:如果SSD组RAID0后,将失去Trim功能

================================================================

这个功能一个大的特点就是:回收闲置的SSD数据块
Objective Analysis的SSD分析师Jim Handy这样形容到(Objective Analysis是一家半导体市场研究公司):
TRIM指令让操作系统可以告诉固态驱动器哪些数据块是不会再使用的;否则SSD控制器不知道可以回收这些闲置数据块。
Handy表示:"TRIM对SSD是个福音。"
他认为TRIM的简约性将极大减少写入负担,同时允许SSD更好地在后台预删除闲置的数据块,以便让这些数据块可以更快地预备新的写入。
SandForce首席技术官Radoslav Danilak表示,值得注意的是OS(操作系统)的角色。
Danilak表示:"SSD知道哪些过期数据可以删除和回收,但是它不知道操作系统已经决定删除哪些数据,直到操作系统为了新的信息而重新使用逻辑块地址(LBA)。"
Danilak表示:"TRIM这种指令的优点便是它可以同时透过过期数据和OS删除的数据来访问LBA,从而推动性能的改善。TRIM唯一的缺点便是如果它在SSD固件中没有得到很好的实施,那么它的操作有可能会阻碍正常的驱动器操作。"
STEC负责SSD技术营销的高级经理Scott Shadley认为,如果TRIM可以让SSD完全忽略一个LBA范围的数据,那么这是一件好事,但是这种结果也有可能没有什么用处。
对Shadley来说,真正的问题是,如果损耗平衡技术(wear leveling )在运作,那么LBA范围并不一定反映SSD闪存的物理地址序列。
Shadley表示:"这意味着SSD还是要面临如何将数据迁移到设备内部真正空余空间的问题。"
Shadley表示:"如果那个LBA范围反映的是整个介质上的页面,那么实际上就没有空余的块或最小的可擦写的单位。这会带来更加复杂的损耗平衡过程,从而进一步加重写入负担。TRIM只适合于那些损耗平衡过程实际上并未有效节约或延长驱动器性能或寿命的SSD。"
===========================================================================

下图:开关Trim后的读取速度测评
点击查看大图
开关Trim后的读取速度测评
下图:开关Trim后的写入速度对比
点击查看大图

点击查看大图

点击查看大图
开关Trim后的写入速度对比
举个例子,假如一个128KB大小的区块内存放着一个128KB的文件,如果文件被删除并执行Trim操作,固态硬盘就可以避免把这个区块中的字节与对此区块的后续写入所需的其它字节相混合,这能大大减轻固态硬盘的“磨损”。
在Windows 7里,Trim请求不仅限于删除操作,也于分区和卷级别命令、文件系统命令、系统还原功能完全整合。
win7下Trim启用的验证方法
其实Windows 7默认状态下Trim指令是开启的,如果想查询目前的Trim指令状态,我们可以在管理员权限下,进入命令提示符界面,输入“fsutil behavior QUERY DisableDeleteNotify”,之后会得到相关查询状态的反馈。在这里,提示为“DisableDeleteNotify = 0”即Trim指令已启用;提示为“DisableDeleteNotify = 1”即为Trim指令未启用。
并不是操作系统提供Trim指令支持,所有SSD都能享受到Trim技术所带来的好处,这还需要固态硬盘的固件支持才能实现。一些主要的固态硬盘主控芯片厂商已经提供了支持Trim的固件(例如英特尔"X25-M G2"),不过也有厂商开发出不依赖操作系统的垃圾回收技术,通过回收不再使用的闪存区块加入负载平衡算法,防止固态硬盘在长期使用后速度下滑,并延长闪存使用寿命,过程完全在固态硬盘内部完成。

======================================================================

    有关固态硬盘(SSD)还有很多其他的相关问题,毕竟目前来说固态硬盘不太容易普及应用,只能适合用来做一些高速系统启动盘,或者专门的软件安装盘来达到高速的效果,应用上仍然存在很多的疑问。

Managing EFI Boot Loaders for Linux

2011年底,Linux内核开发人员开始研究一种新方法,用于启动基于EFI系统的Linux。该方法将Linux内核变成一个EFI应用程序。一旦被加载了,该内核将接管计算机,在严格意义上有效果地绕开/忽略启动加载器(boot loader)的需求。该方法有其独特的优缺点,这些优缺点将在本文中详细阐述。(如果你对技术的细节感兴趣,请阅读 Linux Kernel Mailing
List thread on this topic.

什么时候使用Kernel's EFI Stub
Loader

Linux 内核的EFI stub loader有很多特性,有些是正面的,有些是负面的:

   在某种意义上讲,EFI boot loader是内置于内核中的,因此内核必须是在一个EFI可以读取的分区中,通常是EFI系统分区(ESP)。就像你使用ELILO一样,这会增加ESP的尺寸要求。也可以通过使用第二个FAT分区或EFI filesystem drivers来变通的解决该问题。

   如果想使用初始化的RAM盘(initrd,并且这个盘的内核启动有自己的stub loader, 那么EFi就必须能够读取stub loader 和内核。这与正在使用ELILO一样,会增加对ESP的大小要求。

   你必须有办法将内核参数传递给内核,比如initrd的名字和root filesystem的位置。这可以通过以下方法实现:在建立内核的时候嵌入参数;或者在EFI 外壳(shell)的命令行中输入该选项;也可以通过启动管理器(boot manager)传递。但是,并不是所有的启动管理器都可以传递任意选项,比如 rEFIt就不可以。

   从理论上讲,让内核直接从EFI启动可以改善内核初始化计算机硬盘的能力。至于实际中是否有提高就是另外一回事了。

   EFI stub loader 被添加到内核3.3.0,成为3.3.0特性。如果使用较旧版本的内核, 就需要将内核做下修补。2013年初,Fedora 17OpenSUSE
12.2
Ubuntu 12.10都使用包含EFI stub loader 的内核。所以我相信其他的发行版(distribution)也会这样,但是,依然会有一些版本(对升级内核持保守态度的)会继续使用3.3.0之前的内核。当然了,该情况会随着时间的变化有所改善的。

提示:如果将日志(journaling)禁用了,就可以将Linux/boot 分区放到HFS+上。也可以在Mac的ESP上使用HFS+,这时,将日志(journaling)禁用了,从LINUX读取filesystem会更简单。这个两种不太寻常的方式都可以更简单的升级和引导EFI
stub支持的内核。但是,绝大多数版本(distribution)的安装程序不支持这个配置,所以必须在使用传统的安装方法后再建立。

   该方法的可靠性还尚不确定,但是我的最始测试结果是很乐观的-----进行了7次测试,都可以成功启动,其中只有一次出现奇怪的(也可能是很重要的)警告,发生在32位的Mac Mini上。可以从Mac OS X HFS+分区上启动LINUX kernel EFI stub loader,但是在F ESP's FAT32
filesystem
上不能启动。使用ext2fsReiserFS(采用的是rEFIt rEFInd),可以成功启动这两种文件系统。尽管如此,从FAT ESP是不能启动的,这使设置变得复杂化。局限依然存在,但用内核stub loader的成功率远高于任何其他的EFI boot loader, 与之成功率接近的是ELILOGRUB Legacy。另一个关于可靠性的问题是,对初始Ram盘的规格要求很高。

   关于上一点提到的警告(希望是暂时的),有用户报告了some3.7x3.8x内核EFIstub loader 的问题。该问题出现时,内核就停止引导。Mac 和联想的用户似乎更容易出现这个问题,Arch Linux用户受此问题影响最大。因为他们都倾向于使用最前沿的内核并且比其他版本(distribution)的用户更愿意使用EFI stub loader. 可以点击这里 this thread查看更多关于此问题的讨论。令人奇怪的是,一个版本出现这个问题后,下个版本就不会出现;一些用户(并不是所有的用户)可以通过转换引导管理器或者引导管理器的编译方式来跳过此问题。这是个非常令人困惑的问题,EFI stub loader 的主要开发人员都知道这个情况。

尽管一些3.7x 和3.8x内核依然受此问题困扰,但是该方法在最近发布的版本上都运行正常。EFI stub loader 在与 rEFInd 或 gummiboot在一起使用时效果最好,因为在用这种方式引导,可以指定Linus内核需要的额外选项,免去了每次引导时都需要输入选项的不足。实际上呢,正如rEFInd page, 中所描述的,rEFInd 与 EFI stub loader的结合允许通过拖放方式升级内核,而不必编辑任何配置文件!

安装EFI Stub Loader

注意:这部分是关于编译内核的。如果你正在使用的是3.3.0 或者是更新的支持EFI stub loader的内核,那么你需要做的就是将内核以及它的初始RAM disk 复制到 ESP或是在ESP上的安装驱动(driver)(以便内核可以从EFI被读取)。但是,你必须知道如何运行(launch)内核,"Configuring and Using the EFI Stub
Loader."
这里有简单介绍。

安装EFI stub loader 需要配置你的3.3.0内核 (或者更新的内核)并对其进行编译(也可以用适合的预配置好的内核),然后将内核安装到ESP(或某些EFI可以读取的分区)。如果在编译内核时不能独立完成,可以浏览下相关的网页,比如How to: Compile Linux Kernel
2.6
 和 Compiling the Linux Kernel。如果你之前没有做该项工作,那就得从数千个选项中选出你所需要的选项。通用型的内核比较方便,因为它的选项可以适应几乎所有的计算机,这与版本提供者(distribution provideer)使用的相似。但是,你需要留意一两个内核配置选项:

  CONFIG_EFI_STUB--- 该选项的位置在这里:accessible as Processor Type and Features
-> EFI Runtime Service Support -> EFI Stub Support。这个选项是将EFI stub loader添加到内核的重要选项,如果想使用该功能就必须勾选它。

  CONFIG_CMDLINE_BOOL  CONFIG_CMDLINE-----虽然第一个选项使第二个生效,但是我将他们看做一个选项。通过对命令行设置CONFIG_CMDLINE,需要在EFI外壳提示符键入或通过引导管理器传递,如果没有这个需要可以跳过此选项。如果想通过EFI引导管理器来运行内核,并且该引导管理器不允许将任意参数传递给你的boot loader, 比如EFI和rEFIt中功能不全的引导管理器,这时候这个选择就发挥作用了。如果你打算使用rEFInd或者其他的支持传递任意选项到boot loader 的引导管理器,就不再需要设置该选项了。

如下图:

 

内核编译完成后,需要用正常方式安装模块(键入make
modules_install
)并且准备一个初始的RAM盘(使用 mkinitrd 或 mkinitramfs,
不同的distribution的操作细节会有差别)。将内核文件和初始的RAM盘复制到Linux /boot目录和ESP。例如,你可能会使用ESP上的EFI/linux子目录来存放这些文件。

配置和使用EFI Stub Loader

内核的stub loader 本身不需要配置,但是有时候,在从它里面建立选项的时候会需要。如果编译的内核stub loader没有这些选项的时候,你需要知道如何将选项传递给它,这可以在boot loader中的选项行中传递。此外,如果使用初始RAM盘了,就需要将初始RAM盘的名字也传递给它。在EFI shell输入后,会有如下生成的命令:

fs0:> bzImage.efi
root=/dev/sda4 ro initrd=\EFI\linux\initrd.img

这是个小例子,其中将内核命名为bzImage.efi,root Linux
filesystem在/dev/sda4,初始RAM盘是安装在了ESP EFI的/linux/initrd.img这个文件。 ro这个选项使Linux以只读方式挂载root filesystem。(这个是标准的;初始化脚本后来重新挂载filesystem read/write)。需要注意的是root=这个选项识别Linux root
filesystem, 使用Linux样式的向前倾的斜线(/)来分隔目录元素,与Linux root(/)filesystem相对; 但是,initrd= 使用的是EFI风格的反斜杠(\)用来识别初始的RAM盘,这与ESP's root相对。这很重要,因为不正确的 initrd=规范会使内核停止。较旧版本的EFIstub loader(3.3.0,至少是3.4.0)不会报错。再新一点的版本(比如3.6.0,或者3.5x内核)在不能读取它的initrd文件时 会报错。

EFI有自己的引导管理器,但是通常比较简单原始。然而,如果你的引导管理器可以让你选择boot loader, 或者是你愿意只从一个内核中引导,你可以在Linux通过 efibootmgr程序进行设置。可以通过下面的命令行实现:

# efibootmgr -c
-d /dev/sda -p 1 -L "Arch Linux" -l '\EFI\arch\vmlinuz-arch.efi' -u
root=/dev/sda3 ro initrd=EFI/arch/initramfs-arch.img

该命令是使用指定的 –u后面的函数来让EFI引导 \EFI\arch\vmlinuz-arch.efi这个文件。理论上,如果使用/dev/sda1作为ESP,-d和-p这两个选项就没有必要了;这里将这两个选项加上,是以防你不是使用这样的ESP;此处根据实际情况作改动。 如果你的EFI执行/实施有个不错的启动菜单,你可以用多个命令(multiple commands)建立替代启动选项(alternative boot
options),比如引导不同的内核、多重版本(multiple
distributions)以及使用备用选项(using alternate options)。

如果你使用的是分开的(单独的;分开的;不同的;各自的)EFI引导管理程序,比如rEFInd 或 gummiboot,就可以通过浏览配置将必需的选项传递给内核。刚才提到过,rEFIt不可以。rEFIt和 rEFInd 可通过下面两种方式将选项传递给EFI stub loader: 在主要的refind.conffile中写boot loader节定义;或者是依靠 refind_linux.conf这个文件的半自动查找方式,可以在目录中的 refind_linux.conf文件为所有的内核读取选项。任何一种方式都可将内核支持与rEFInd结合,这个结合在多引导环境中比较灵活并且相对来说容易维持。但是版本(distribution)脚本不支持rEFInd,所以不得不做一些手工维护。gummiboot 的每个主菜单选项都需要一个独立的配置文件,并且所有的版本(distribution)的维护脚本都不支持,需要手工维护。

理论上讲,在使用chainloader(而不是使用内核或linux选项)的GRUB Legacy或GRUB 2上运行编译好的支持EFI stub的Linux内核是完全有可能的。(但我还没试过)。如果你用常规的方式运行遇到硬件初始化的文件,那么使用chainloader就可能会方便一些,但是这一点我还不是非常确定。

ext2fs/ext3fs, ext4fs 以及ReiserFS的EFI驱动程序(drivers)是可用的,这另从Linux filesystem 加载支持EFI stub的Linux内核成为可能。尽管有时候你可能需要给内核重命名或使用.efi这个扩展名建立连接,但是该方法可以简化配置,因为你不必将内核复制到ESP。http://www.rodsbooks.com/refind/drivers.html  这里介绍EFI drivers的使用,并重点介绍配置rEFInd和加载EFI drivers。

维护Kernel's EFI Stub
Loader

因为目前大多数版本(distribution)都不支持内核的EFI stub loader,所以只能自己进行维护。将来,各个版本将有可能使用 efibootmgr或其他工具来帮助维护那些使用该方法的设备,再或者通过维护GRUB, rEFInd, 或 gummiboot的配置文件时支持Kernel's EFI Stub Loader

 

发现C盘空间突然变小了

经过研究发现是NViDIA的显卡驱动导致的,C:\Windows\System32\DriverStore\FileRepository(文件夹大小10GB左右),

最终把nv开头的文件夹删除即可,注意删除的时候要删除最新修改日期的,如果时间比较老的就不理睬了。

 

C:\Program Files\NVIDIA Corporation\Installer2这个文件夹也可以删除,还占用1GB多。