close

在Linux系統中動態增加swap檔案空間的方法

1 前言

每一個作業系統通常皆會自動建立或要求使用者手動建立一個 swap 空間以作為虛擬記憶體之用。也就是說,在觀念上可以想像成若遇到原本實體主記憶體 (main menory) 在執行許多程式的過程中被用光了,不夠用時,就可以將執行中的程式載入到虛擬記憶體中來執行。而實際做法是從硬碟中分割出一個空間來做為虛擬記憶體之用。在Linux中,所分割出來作為虛擬記憶體的硬碟分割區,其檔案系統為swap格式。而在Windows作業系統中,據信是以檔案的形式來模擬虛擬記憶體以形成所謂的虛擬記憶體檔案,或可稱為 swap檔案,而且通常會尋找 Windows 系統磁碟機(一般為C磁碟機)以外的磁碟機空間中來建立swap檔案。

swap空間在技術層面上,其被應用的過程,一般是指系統一但發現下一個要執行的軟體並沒有儲存在主記憶體時,系統就會在主記憶體中選定一個已載入主記憶體中的程式,將之暫時搬移至swap空間(亦即硬碟的空間),並將下一個要執行的軟體載入到空出來的主記憶體中來執行,當該程式執行完之後,再將之前被搬移至swap空間的程式再搬回主記憶體中繼續執行。因為這種程式在主記憶體與虛擬記憶體中互相交換的現象,所以就將該虛擬記憶體空間稱為 swap 空間。

 在Linux系統中,雖然預設已建立一個獨立的swap分割區,但遇到下列的情況時,就有可能造成swap 空間不夠用的情況:

  1. 若同時執行的軟體過多,造成主記憶體不夠用,以及swap空間也不夠用的情況出現時。
  2. 在VMware Workstation 9中,若某一台虛擬機器的主記憶體大小超過Linux Ubuntu 系統所使用的swap空間大小時,VMware Workstation 9 在執行該虛擬機器時,就會出現錯誤訊息,大意上是說:Linux系統中目前的swap空間己經不夠用了,建議要將Linux Ubuntu的swap空間加大到多少的大小。例如,原本的Linux Ubuntu swap 大小為2GB,此時若虛擬機器的主記憶體設為4GB,VMware Workstation 就認為原本swap空間是不夠用的,所以就出現錯誤訊息說,請使用者自行將Linux Ubuntu 的系統swap 空間加大2GB。然後VMware Workstation 9 好像也沒有對swap空間進行任何的處理,也似乎沒有自動去佔用Linux Ubutnu 中尚未使用的主記憶體空間來做為swap空間,照樣啟動虛擬機器,此時執行該虛擬機器時就會變得非常慢。此時,使用者只好耐心的等待出現登入畫面後,立即關閉虛擬機器,以免造成後續系統當機。
  3. 在VMware Workstation 9中,同時執行多台虛擬機器時,也會出現上一點所描述的錯誤訊息。這是因為 VMware Workstation 9在執行每一台虛擬機器時,都會額外的佔用與虛擬機器所設定主記憶體大小相同的swap 空間,若發現現有的系統swap 空間已不夠用時,也會出現前一點的情況,造成系統的執行效率變得非常的差與難以想像的慢。

在Linux中要解決上述的問題,可以採用動態增加swap檔案空間的方式來達成。

2 動態增加swap檔案空間的方法

1、首先進入終端機,並事先規劃好要增加的swap 檔案的儲存檔名、位置與大小。例如位於根目錄下的/swapfile1,大小為10GB。

2、接著建立一個未來可做為swap之用的檔案形式的儲存空間。可下達如下的dd指令:

sudo dd if=/dev/zero of=/swapfile1 bs=1024 count=10240000

其中 if 參數代表的時輸入的檔名,/dev/zero代表的是空的檔案,而of參數代表的是輸出的檔名,此處的參數值 /swapfile1就是想要建立的swap檔名且是建立於根目錄之下,使用者可自行命名。bs參數的意思是block size的意思,也就是單位儲存區塊大小的意思,預設為1024 byte,就是1MB的大小,count參數就是在設定swap檔案要佔用的大小,因此10GB就是10000MB,就是上述10000個bs的大小,所以此例就要設定為count=10240000。因此,若是想要設定swap 檔案的大小為5GB, 則count的值就要設為 5000個bs,也就是5000*1024=5120000了。

3、將已建好的檔案形式的儲存空間設定為swap的檔案形態。請下達如下的指令:

sudo mkswap /swapfile1

此範例指令就是甩來將已建立好的檔案形式儲存空間/swapfile1設定為swap 的檔案系統形態。


4、接著立即啟動檔案形式的swap檔案空間。請下達如下的指令:

sudo swapon /swapfile1

其中 /swapfile1就是swap檔案空間。
接著修改/etc/fstab的檔案內容,以便於每次啟動Linux系統時,皆自動啟動所建立的檔案形式的swap檔案空間。可執行如下的指令以編輯該檔案:sudo gedit /etc/fstab,並在該檔案中的最後一行,新增如下的一行資料:/swapfile1 swap swap defaults 0 0,其中/swapfile1就是swap檔案空間。

5、接著下達指令:free -m,就可查看是否已啟動檔案形式的swap空間了。

若想要移除所建立的檔案形式的swap空間,則分別執行下列的指令:

sudo swapoff /swapfile1
sudo rm /swapfile1
sudo gedit /etc/fstab 並將/swapfile1 swap swap defaults 0 0 那一行資料料刪除

arrow
arrow

    xx3d2ybnf 發表在 痞客邦 留言(0) 人氣()