当前位置: 首页 > 科技观察

如何在GNU-Linux上启用英特尔快速启动?

时间:2023-03-21 17:47:48 科技观察

IntelRapidStart是英特尔开发的帮助笔记本电脑省电和快速恢复的技术。它不同于传统的睡眠(Sleep)和休眠(Hibernate)。混合睡眠)有一些相似之处。Intel表示这项技术首先需要主板支持,其次需要SSD,最后需要Windows。但其实SSD和Windows都不是必须的。昨天我在HDD+Linux组合中成功使用了IntelRapidStart。一、IntelRapidStart的原理其实IntelRapidStart的原理很简单。就是让电脑在传统睡眠(Sleep)的基础上,有机会进入更深的睡眠(DeepSleep)。用户可以通过BIOS设置超时时间,比如一分钟、十分钟、半小时等(也可以设置“立即”)。当计算机进入睡眠状态时,计时开始。如果用户在计时结束前唤醒计算机,则什么也不会发生。如果预定的时间到了,那么电脑会短暂唤醒,将内存中的数据写入硬盘中的特定分区(官方文档指的是SSD),然后彻底关机。之后,用户只能通过按下电源键开启电脑,主板固件会将特定分区的内容读回内存,电脑才能继续使用。综上所述,IntelRapidStartTechnology(IRST)前半部分与普通睡眠相同,后半部分类似于休眠(Hibernate),但休眠是由操作系统完成的,而IRST是由主板完成的固件(BIOS或UEFI)来完成这个操作,也就是说,开机自检(POST)后,是直接从硬盘读取内容的过程,没有引导加载程序(Boot加载程序)和操作系统加载过程。因此,它比操作系统级休眠要快得多,配合SSD的应用甚至更快。这就是英特尔宣称的“六秒恢复”。据我了解,恢复速度和睡眠一样快,但功耗却和休眠一样低(零功耗)。intel官方文档上有提到这个技术需要SSD+Windows,但是我看没有必要:SSD是为了加速,如果换成HDD,除了慢一点没有什么问题,但是Windows呢?令人兴奋的是,2013年6月,Linux开发人员MatthewGarrett提交了一个内核补丁,以在Linux内核中实现对此的支持。该补丁已在Linux3.11中应用,截至撰写本文时,最新的Linux内核版本已经是3.12.6,显然可以使用。2、调整分区我的电脑是ThinkPadX240s,里面有1个SATA和2个NGFF接口。后者是Intel推出的新接口,可用于连接蓝牙、3G等模块,也可用于连接NGFF接口。固态硬盘。理想的配置应该是SATA接口接HDD,NGFF接SSD。此版本已经配置了IntelRapidStart。我的这个版本,SATA接口接一个500GB7200转的机械硬盘,一个NGFF接WiFi+蓝牙,另一个NGFF是空的。也就是说,没有固态硬盘,自然不会默认使用IntelRapidStart。但是小而贵的NGFFSSD除了淘宝就没有别的办法了吗?当然不是。仔细阅读IntelRapidStart用户手册发现,其中提到主板固件使用分区标识符来查找IRST分区,对于GPT是D3BFE2DE-3DAF-11DF-BA-40-E3A556D89593,对于MBR是0x84。我调整前的分区结构如下:NAMEMAJ:MINRMSIZEROTYPEMOUNTPOINTsda8:00465,8G0disk├─sda18:102M0part├─sda28:20200M0part/boot├─sda38:3050G0part│└─crypt-sda3254:0050G0crypt/└──sda48:40415,6G0part└─crypt-sda4254:10415,6G0crypt/home整个硬盘465GiB使用GPT划分为四个区域,前2MiB用来存放GRUB,接下来的200MiB是/boot,然后是50GiB和/,剩下的415.6GiB作为/home.其中sda3和sda4都是LUKS容器。我的目标是将sda4的大小调整为400GiB,然后将剩余的15.6GiB分配给sda5作为IRST分区。由于sda4是GPT+LUKS+ext4的三层嵌套结构,需要逐层缩小,再逐层扩展到合适的位置。#卸载/homeumount/home#调整文件系统前必须检查文件系统e2fsck-f/dev/mapper/crypt-sda4#将文件系统缩小到398GiBresize2fs-p/dev/mapper/crypt-sda4398G#ShrinkLUKScontainerto399GiB#转换为512KiB的block为399*1024*1024*2=836763648cryptsetupresizecrypt-sda4836763648#调整sda4分区为400GiB#并使用剩余空间创建sda5#Partitionidentifierwhencreating输入8400gdisk/dev/sda#重启电脑让内核使用新的分区表reboot#再次卸载/homeumount/home#扩大LUKS容器填满sda4cryptsetupresizecrypt-sda4#查看文件系统e2fsck-f/dev/mapper/crypt-sda4#扩容文件系统填满LUKS容器resize2fs-p/dev/mapper/crypt-sda4#mounttestmount/dev/mapper/crypt-sda4/home调整完成后是这样的效果:NAMEMAJ:MINRMSIZEROTYPEMOUNTPOINTsda8:00465,8G0disk├─sda18:102M0part├─sda28:20200M0part/boot├─sda38:3050G0part│└─crypt-sda3254:0050G0crypt/├─sda48:40400G0part│└─crypt-sda4254:10400G0crypt/home└─sda58:5015,6G0partNumberStart(sector)End(sector)SizeCodeName1204861432.0MiBEF02BIOSbootpartition26144415743200.0MiB8300Linuxfilesystem341574410527334350.0GiB8300LUKSpartition4105273344944134143400.0GiB8300LUKSpartition594413414497677313415.6GiB8400IntelRapidStart3.设置主板固件(BIOS/UEFI)这一步因厂商不同而有所不同,但主要是在BIOS/UEFI中找到IntelRapidStart设置并启用。在完成以上步骤之前,这个选项是没有启用的,会提示没有找到合适的存储设备,但是在完成以上步骤之后,固件会根据GUID找到IRST分区,让这个功能成为可能启用。至于开启需要多长时间,看个人喜好了。我选择了“立即”,相当于用IRST代替了Sleep功能。4、测试为了清楚测试效果,可以先用dd_rescue清除sda5:dd_rescue/dev/zero/dev/sda5。可以用head-c1G/dev/sda5等命令查看。准备完成后开始测试:echo-nmem>/sys/power/state系统挂起到内存(S3,sleep)→系统顺利休眠→系统短暂唤醒,写入内存内容到IRST分区,此时如果仔细听,可以听到机械硬盘写入的声音→写入完成,系统断电关机。断电后,用户只能通过按下电源键唤醒电脑。按下电源键后,可以观察到BIOS/UEFI上显示Resumingfromdeepsleep...字样,说明恢复过程由固件完成,与操作系统无关。恢复完成后,直接回到睡觉前的状态。此时使用head/dev/sda5可以观察到大量输出,说明sda5确实已经写入。至此IRST部署成功。5.延伸阅读IntelRapidStartTechnologyFuntooLinux与IntelRapidStartTechnology详解