首頁 > 軟體

GNU/Linux 啟用 Intel Rapid Start

2020-06-16 17:46:07

Intel Rapid Start 是 Intel 公司研發的一種幫助筆記型電腦節省電源和快速恢復的技術,與傳統的睡眠(Sleep)和休眠(Hibernate)有一定的區別,相較而言,與混合睡眠(Hybrid Sleep)倒是有一些相似的地方。Intel 說,這技術首先要主機板支援,其次要有 SSD,最後要有 Windows。但其實 SSD 和 Windows 都不是必須的。我就在 HDD + Linux 的組合裡成功地使用了 Intel Rapid Start。

一、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 部署成功。

五、擴充套件閱讀

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-02/128392.htm


IT145.com E-mail:sddin#qq.com