這裡介紹 Linux 系統上 swap 交換空間的使用方式,包含 swap 分割區與檔案的使用與管理。

Linux 系統將實體記憶體(RAM)分成一塊一塊的小區域,這些小區塊稱為 pages,在實體記憶體不足的時候,系統會透過 swapping 的動作將 page 的資料搬到預先配置好的硬碟置換空間(swap)中儲存,然後釋放出 page 的記憶體空間,而 Linux 系統上的虛擬記憶體(virtual memory)就是包含實體記憶體與硬碟的置換空間這兩大部份。

通常在安裝 Linux 系統的時候,都會配置一個獨立的磁碟分割區給 swap 交換空間使用,但我們也可以將一般的檔案作為 swap 交換空間使用,尤其是在系統臨時需要大量的記憶體時,就可以使用檔案的方式增加 swap 交換空間。

查看交換空間(Swap)

若要查看目前 Linux 系統上的置換空間狀態,可以使用 swapon 指令:

swapon -s

輸出會類似這樣:

Filename				Type		Size	Used	Priority
/dev/sdb                                partition	262140	204564	-1

或是使用 free 來查看:

free -h

輸出為:

             total       used       free     shared    buffers     cached
Mem:          991M       979M        12M        33M        41M       535M
-/+ buffers/cache:       401M       589M
Swap:         255M       199M        56M

以磁碟分割區建立交換空間

在 Linux 中我們可以利用 fdiskcfdisk 這類的磁碟分割工具來建立交換空間專用的分割區,交換空間的磁碟分割區類型編號(partition type)是 82,但其實任何的磁碟分割區類型都可以作為交換空間使用。

在建立好磁碟分割區之後,我們可以使用 mkswap 來初始化交換空間,例如:

sudo mkswap /dev/sda2

這樣系統就會在 /dev/sda2 這個分割區建立一個交換空間。

在使用 mkswap 初始化交換空間時,會將該分割區內的所有資料抹除,使用時請特別注意!

mkswap 在初始化交換空間時,會自動幫分割區產生一個 UUID,如果您想要自行指定 UUID,可以使用 -U 指令:

mkswap -U custom_UUID /dev/sda2

在建立好交換空間之後,使用 swapon 指令啟用這個新的交換空間:

sudo swapon /dev/sda2

這樣 Linux 系統就可以馬上使用這個新的交換空間了。

若要讓 Linux 系統在開機時就自動啟用這個交換空間,可以在 /etc/fstab 中加上一行設定:

/dev/sda2 none swap defaults 0 0

如果您是使用有支援 TRIM 的 SSD 來作為交換空間,那麼在執行 swapon 指令時可以加上 -d 或是 --discard 參數:

sudo swapon -d /dev/sda2

/etc/fstab 的設定亦可加上 discard 選項:

/dev/sda2 none swap defaults,discard 0 0

這樣有可能可以讓交換空間的使用更有效率。

如果要停用交換空間,可以使用 swapoff 指令:

sudo swapoff /dev/sda2