Wednesday, July 27, 2022

在 Ubuntu 中增加 Swap 交換檔案

引言
要明白 Swap,首先要明白「隨機存取記憶體」 (RAM)。

隨機存取記憶體 (RAM),是一種能與處理器 (CPU) 快速交換資料的記憶體裝置。一般而言,作業系統需要先把程式和資料,由硬碟載入到記憶體中。然後,CPU 才能通過記憶控制器 (Memory Controller) ,去讀取記憶體中的資料,以及執行裏面的程式。

不過,由於 RAM 的價格比較高昂,一般主機都不會有太多 RAM。所以,當系統沒有足夠的 RAM,但又需要載入一些大型的軟件時,系統就有可能因為 RAM 空間不足,導致無法載入,或者被迫中止程式。為了解決這個問題,作業系統需要把一些閒置、不常用的的程式,先從 RAM 中抽取,放到硬碟中。然後,系統就能將需用的資料和程式,重新載入到釋出的 RAM 中。 這樣,系統便能在有限的 RAM 空間下,執行較多的程式。

Linux 系統設計之時,就已經考慮到這一點,並把這個概念命名為 Swap (交換):將 RAM 中的資料,與硬碟進行抽替交換 (swapping) 。而在 Windows 中,相似的概念則被稱為「虛擬記憶體」(Virtual Memory)。但為避免與「虛擬地址」(Virtual Memory Address / Virtual Address Space) 的概念混淆, 大部分參考資料,均會採用 "Swap" 的叫法。

而這一篇文章,則是在簡單介紹:如何使用數行指令,增加 Ubuntu Linux 的 Swap 空間。擁有更大的 swap 空間,Ubuntu 就能載入更多程式,可玩性自然大大增加。

---

指令
一般而言,Linux 會在安裝系統之時,已經劃分好一個硬碟分區,並命名為 swap。
不過,如果該分區不夠用(或者根本沒有),就可以使用以下指令,動態增加 swap 檔案:

Step 1. 建立新的 swap 檔案 (4GB)

sudo dd if=/dev/zero of=swapfile bs=1MiB = count=$((4*1024)) 

Step 2. 初始化 swap 檔案的內容

sudo mkswap swapfile

Step 3. 更新權限(確保非 root 用戶不能讀取/改動內容)

sudo chmod 600 swapfile 

Step 4. 開啟系統的 Swap 功能

sudo swapon swapfile

Step 5. 檢查 swapfile 是否已經生效

sudo swapon --show

完成後,可使用 cat /proc/meminfo 查看記憶體空間有否變多。

想要把它關掉,也可以用 sudo swapoff -v swapfile ,以及用 sudo rm swapfile 把文件刪掉。

---

參考

[1] - How to Add Swap Space on Ubnutu 20.04 - https://linuxize.com/post/how-to-add-swap-space-on-ubuntu-20-04/