如何在 GNU/Linux 启用 Intel Rapid Start?

运维 系统运维
Intel Rapid Start 是 Intel 公司研发的一种帮助笔记本电脑节省电源和快速恢复的技术,这技术首先要主板支持,其次要有 SSD,最后要有 Windows。本文中作者成功地在GNU/Linux 启用 Intel Rapid Start,下面将方法分享给大家。

Intel Rapid Start 是 Intel 公司研发的一种帮助笔记本电脑节省电源和快速恢复的技术,与传统的睡眠(Sleep)和休眠(Hibernate)有一定的区别,相较而言,与混合睡眠(Hybrid Sleep)倒是有一些相似的地方。Intel 说,这技术首先要主板支持,其次要有 SSD,***要有 Windows。但其实 SSD 和 Windows 都不是必须的。昨天,我就在 HDD + Linux 的组合里成功地使用了 Intel Rapid Start。

[[109648]]

一、Intel Rapid Start 原理

其实 Intel Rapid Start 的原理很简单,就是让计算机在传统的睡眠(Sleep)的基础上有机会进入更深层的睡眠(Deep Sleep),用户可以通过 BIOS 设置一个超时,比如一分钟、十分钟、半个小时等(也可以设置「立即」),当计算机进入睡眠状态之后,计时开始,如果用户在计时到达之前唤醒了计算机,那就啥也没发生,如果预定时间达到,则计算机会被浅唤醒(wake up briefly),将内存中的数据写入硬盘(官方文档指 SSD)中的一个特定分区,然后彻底断电。在这之后,用户只能通过按电源键的方式开机,主板固件会把特定分区中的内容读回内存,然后计算机就可以继续使用了。

总结一下,Intel Rapid Start 技术(IRST)的前半段与普通的睡眠是一样的,而后半段则与休眠(Hibernate)类似,但是休眠是由操作系统完成的,而 IRST 则是由主板固件(BIOS 或 UEFI)去完成这一操作,也就是说,在加电自检(POST)之后,直接就是从硬盘中读取内容的过程了,根本没有引导器(Boot loader)和操作系统的加载过程,因此比操作系统级别的休眠要快不少,再加上 SSD 的应用,就更加快了,这就是 Intel 所宣称的「六秒恢复」。按照我的理解,就是恢复速度和睡眠一样快,但是耗电和休眠一样低(零耗电)。

Intel 的官方文档提到该技术需要 SSD + Windows,可是我没看出其中的必要性:SSD 是为了加速,如果用 HDD 代替的话除了慢点也没啥问题,而 Windows 呢?令人兴奋的是,2013年6月的时候,Linux 开发者 Matthew Garrett 就提交了一个内核补丁,实现了 Linux 内核对此的支持。该补丁已在 Linux 3.11 中得到了应用,而截至我写这篇文章时,***的 Linux 内核版本已经是 3.12.6 了,显然可以使用。

二、调整分区

我的计算机是 ThinkPad X240s,该型号内部有一个 SATA 和两个 NGFF 接口,后者是 Intel 推的新接口,可以用来接蓝牙、3G 等模块,也可以用来接 NGFF 接口的 SSD。最理想的配置应该是 SATA 接口用来接 HDD 而 NGFF 用来接 SSD,这样的版本是已经配置好 Intel Rapid Start 的。我的这个版本 SATA 接口上接了一块 500GB 7200 转的机械硬盘,一个 NGFF 接了 WiFi + 蓝牙,另一个 NGFF 是空的。也就是说,没有 SSD,自然默认也没得用 Intel Rapid Start。但除了淘宝一块小而贵的 NGFF SSD 之外没有别的方法了吗?当然不是。仔细阅读 Intel Rapid Start 的用户手册就会发现,它提到主板固件是通过分区标识符来找寻 IRST 分区的,对于 GPT,是 D3BFE2DE-3DAF-11DF-BA-40-E3A556D89593,对于 MBR 则是 0x84。

调整前我的分区结构是这样的:

NAME           MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda              8:0    0 465,8G  0 disk  
├─sda1           8:1    0     2M  0 part  
├─sda2           8:2    0   200M  0 part  /boot
├─sda3           8:3    0    50G  0 part  
│ └─crypt-sda3 254:0    0    50G  0 crypt /
└──sda4          8:4    0 415,6G  0 part  
  └─crypt-sda4 254:1    0 415,6G  0 crypt /home

整块硬盘 465 GiB 使用 GPT 分为四个区,开头 2 MiB 用来存放 GRUB,之后 200 MiB 是 /boot,然后是 50 GiB 和 /,***剩下的 415.6 GiB 用作 /home。其中 sda3 和 sda4 都是 LUKS 容器。我的目的是要把 sda4 调整为 400 GiB,然后把剩下的 15.6 GiB 划为 sda5,作为 IRST 分区。

由于 sda4 是 GPT + LUKS + ext4 三层嵌套结构,所以需要一层一层地缩小它们,然后再一层一层地撑大它们到合适的位置。

# 把 /home 卸载
umount /home
# 调整文件系统前必须要先检查文件系统
e2fsck -f /dev/mapper/crypt-sda4
# 缩小文件系统至 398 GiB
resize2fs -p /dev/mapper/crypt-sda4 398G
# 缩小 LUKS 容器至 399 GiB
# 换算成 512 KiB 的区块是 399 * 1024 * 1024 * 2 = 836763648
cryptsetup resize crypt-sda4 836763648
# 将 sda4 分区调整为 400 GiB
# 并用剩余的空间建立 sda5
# 建立的时候分区标识符输入 8400
gdisk /dev/sda
# 重启计算机使内核使用新的分区表
reboot
# 再次卸载 /home
umount /home
# 放大 LUKS 容器撑满 sda4
cryptsetup resize crypt-sda4
# 检查文件系统
e2fsck -f /dev/mapper/crypt-sda4
# 放大文件系统至撑满 LUKS 容器
resize2fs -p /dev/mapper/crypt-sda4
# 挂载测试
mount /dev/mapper/crypt-sda4 /home

调整完成后,就是这样的效果了:

NAME           MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda              8:0    0 465,8G  0 disk  
├─sda1           8:1    0     2M  0 part  
├─sda2           8:2    0   200M  0 part  /boot
├─sda3           8:3    0    50G  0 part  
│ └─crypt-sda3 254:0    0    50G  0 crypt /
├─sda4           8:4    0   400G  0 part  
│ └─crypt-sda4 254:1    0   400G  0 crypt /home
└─sda5           8:5    0  15,6G  0 part

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048            6143   2.0 MiB     EF02  BIOS boot partition
   2            6144          415743   200.0 MiB   8300  Linux filesystem
   3          415744       105273343   50.0 GiB    8300  LUKS partition
   4       105273344       944134143   400.0 GiB   8300  LUKS partition
   5       944134144       976773134   15.6 GiB    8400  Intel Rapid Start

三、设置主板固件(BIOS/UEFI)

这一步视不同的制造商自有不同,但主旨就是找到 BIOS/UEFI 中有关 Intel Rapid Start 的设置,将之开启。在完成以上步骤之前,这一选项是不可开启的状态,会提示没有找到合适的存储设备,但是在完成了上述步骤之后,固件就会根据 GUID 找到 IRST 分区,从而允许开启这一功能。至于多久后启用,就是个人爱好了,我选择的是「立即」,也就是相当于用 IRST 代替了睡眠(Sleep)功能。

四、测试

为了测试效果明显,可以先用 dd_rescue 把 sda5 清空一下:dd_rescue /dev/zero /dev/sda5。可以用诸如 head -c 1G /dev/sda5 之类的命令检验一下。

准备完成之后开始测试:echo -n mem > /sys/power/state 将系统挂起至内存(S3,睡眠)→系统顺利睡眠→系统被短暂唤醒并将内存中的内容写入 IRST 分区,此时如果仔细听可以听到机械硬盘写入的声音→写入完成,系统断电停机。

断电停机之后,用户只能通过按电源键把计算机唤醒。按下电源键后可观察到 BIOS/UEFI 上显示类似 Resuming from deep sleep ... 字样,说明这一恢复过程是由固件完成的,与操作系统无关。恢复完成后,直接回复到进入睡眠之前的样子。此时使用 head /dev/sda5 可观察到大量输出,说明 sda5 的确被写入了。

至此 IRST 部署成功。

五、扩展阅读

责任编辑:黄丹 来源: wzyboy
相关推荐

2022-10-21 10:31:36

Arch LinuxSnap

2018-03-06 11:15:00

Linux命令行微码

2022-05-20 13:46:36

Linux激活Linux水印

2019-04-22 11:50:38

LinuxFlatpak

2016-12-16 09:23:29

LinuxShell脚本

2017-04-19 22:00:40

UbuntuLinux Mint桌面共享

2011-08-01 17:30:06

ActiveDirec组策略磁盘配额

2018-04-09 09:45:09

Windows 10休眠

2022-04-01 09:00:00

Linux安全SSH

2022-06-17 16:38:07

MozillaFirefoxcookie

2020-12-07 13:23:07

LibreOffice开源

2011-06-07 10:15:38

GNULinux

2010-01-22 11:06:03

GNUkFreeBSDLinux

2022-06-14 09:33:15

LinuxGNU Emacs命令

2009-12-10 16:26:49

GNULinux

2019-07-19 09:12:50

Windows 10平板电脑模式Windows

2022-09-16 07:33:52

浏览器深色模式Firefox

2022-11-25 10:19:48

2009-12-14 13:31:56

GNULinuxvmware

2009-06-29 09:44:39

LinuxDebianGNU
点赞
收藏

51CTO技术栈公众号