這裡介紹 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 中我們可以利用 fdisk
或 cfdisk
這類的磁碟分割工具來建立交換空間專用的分割區,交換空間的磁碟分割區類型編號(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