如何在 GNU/Linux 啟用 Intel Rapid Start?
Intel Rapid Start 是 Intel 公司研發(fā)的一種幫助筆記本電腦節(jié)省電源和快速恢復的技術,與傳統(tǒng)的睡眠(Sleep)和休眠(Hibernate)有一定的區(qū)別,相較而言,與混合睡眠(Hybrid Sleep)倒是有一些相似的地方。Intel 說,這技術首先要主板支持,其次要有 SSD,***要有 Windows。但其實 SSD 和 Windows 都不是必須的。昨天,我就在 HDD + Linux 的組合里成功地使用了 Intel Rapid Start。
一、Intel Rapid Start 原理
其實 Intel Rapid Start 的原理很簡單,就是讓計算機在傳統(tǒng)的睡眠(Sleep)的基礎上有機會進入更深層的睡眠(Deep Sleep),用戶可以通過 BIOS 設置一個超時,比如一分鐘、十分鐘、半個小時等(也可以設置「立即」),當計算機進入睡眠狀態(tài)之后,計時開始,如果用戶在計時到達之前喚醒了計算機,那就啥也沒發(fā)生,如果預定時間達到,則計算機會被淺喚醒(wake up briefly),將內存中的數(shù)據(jù)寫入硬盤(官方文檔指 SSD)中的一個特定分區(qū),然后徹底斷電。在這之后,用戶只能通過按電源鍵的方式開機,主板固件會把特定分區(qū)中的內容讀回內存,然后計算機就可以繼續(xù)使用了。
總結一下,Intel Rapid Start 技術(IRST)的前半段與普通的睡眠是一樣的,而后半段則與休眠(Hibernate)類似,但是休眠是由操作系統(tǒng)完成的,而 IRST 則是由主板固件(BIOS 或 UEFI)去完成這一操作,也就是說,在加電自檢(POST)之后,直接就是從硬盤中讀取內容的過程了,根本沒有引導器(Boot loader)和操作系統(tǒng)的加載過程,因此比操作系統(tǒng)級別的休眠要快不少,再加上 SSD 的應用,就更加快了,這就是 Intel 所宣稱的「六秒恢復」。按照我的理解,就是恢復速度和睡眠一樣快,但是耗電和休眠一樣低(零耗電)。
Intel 的官方文檔提到該技術需要 SSD + Windows,可是我沒看出其中的必要性:SSD 是為了加速,如果用 HDD 代替的話除了慢點也沒啥問題,而 Windows 呢?令人興奮的是,2013年6月的時候,Linux 開發(fā)者 Matthew Garrett 就提交了一個內核補丁,實現(xiàn)了 Linux 內核對此的支持。該補丁已在 Linux 3.11 中得到了應用,而截至我寫這篇文章時,***的 Linux 內核版本已經(jīng)是 3.12.6 了,顯然可以使用。
二、調整分區(qū)
我的計算機是 ThinkPad X240s,該型號內部有一個 SATA 和兩個 NGFF 接口,后者是 Intel 推的新接口,可以用來接藍牙、3G 等模塊,也可以用來接 NGFF 接口的 SSD。最理想的配置應該是 SATA 接口用來接 HDD 而 NGFF 用來接 SSD,這樣的版本是已經(jīng)配置好 Intel Rapid Start 的。我的這個版本 SATA 接口上接了一塊 500GB 7200 轉的機械硬盤,一個 NGFF 接了 WiFi + 藍牙,另一個 NGFF 是空的。也就是說,沒有 SSD,自然默認也沒得用 Intel Rapid Start。但除了淘寶一塊小而貴的 NGFF SSD 之外沒有別的方法了嗎?當然不是。仔細閱讀 Intel Rapid Start 的用戶手冊就會發(fā)現(xiàn),它提到主板固件是通過分區(qū)標識符來找尋 IRST 分區(qū)的,對于 GPT,是 D3BFE2DE-3DAF-11DF-BA-40-E3A556D89593,對于 MBR 則是 0x84。
調整前我的分區(qū)結構是這樣的:
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 分為四個區(qū),開頭 2 MiB 用來存放 GRUB,之后 200 MiB 是 /boot,然后是 50 GiB 和 /,***剩下的 415.6 GiB 用作 /home。其中 sda3 和 sda4 都是 LUKS 容器。我的目的是要把 sda4 調整為 400 GiB,然后把剩下的 15.6 GiB 劃為 sda5,作為 IRST 分區(qū)。
由于 sda4 是 GPT + LUKS + ext4 三層嵌套結構,所以需要一層一層地縮小它們,然后再一層一層地撐大它們到合適的位置。
# 把 /home 卸載 umount /home # 調整文件系統(tǒng)前必須要先檢查文件系統(tǒng) e2fsck -f /dev/mapper/crypt-sda4 # 縮小文件系統(tǒng)至 398 GiB resize2fs -p /dev/mapper/crypt-sda4 398G # 縮小 LUKS 容器至 399 GiB # 換算成 512 KiB 的區(qū)塊是 399 * 1024 * 1024 * 2 = 836763648 cryptsetup resize crypt-sda4 836763648 # 將 sda4 分區(qū)調整為 400 GiB # 并用剩余的空間建立 sda5 # 建立的時候分區(qū)標識符輸入 8400 gdisk /dev/sda # 重啟計算機使內核使用新的分區(qū)表 reboot # 再次卸載 /home umount /home # 放大 LUKS 容器撐滿 sda4 cryptsetup resize crypt-sda4 # 檢查文件系統(tǒng) e2fsck -f /dev/mapper/crypt-sda4 # 放大文件系統(tǒng)至撐滿 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 的設置,將之開啟。在完成以上步驟之前,這一選項是不可開啟的狀態(tài),會提示沒有找到合適的存儲設備,但是在完成了上述步驟之后,固件就會根據(jù) GUID 找到 IRST 分區(qū),從而允許開啟這一功能。至于多久后啟用,就是個人愛好了,我選擇的是「立即」,也就是相當于用 IRST 代替了睡眠(Sleep)功能。
四、測試
為了測試效果明顯,可以先用 dd_rescue 把 sda5 清空一下:dd_rescue /dev/zero /dev/sda5。可以用諸如 head -c 1G /dev/sda5 之類的命令檢驗一下。
準備完成之后開始測試:echo -n mem > /sys/power/state 將系統(tǒng)掛起至內存(S3,睡眠)→系統(tǒng)順利睡眠→系統(tǒng)被短暫喚醒并將內存中的內容寫入 IRST 分區(qū),此時如果仔細聽可以聽到機械硬盤寫入的聲音→寫入完成,系統(tǒng)斷電停機。
斷電停機之后,用戶只能通過按電源鍵把計算機喚醒。按下電源鍵后可觀察到 BIOS/UEFI 上顯示類似 Resuming from deep sleep ... 字樣,說明這一恢復過程是由固件完成的,與操作系統(tǒng)無關?;謴屯瓿珊?,直接回復到進入睡眠之前的樣子。此時使用 head /dev/sda5 可觀察到大量輸出,說明 sda5 的確被寫入了。
至此 IRST 部署成功。
五、擴展閱讀