记忆体置换空间(swap)之建置
时间:2010-11-24 来源:wang509020
還記得在安裝 Linux 之前大家常常會告訴你的話吧!就是安裝時一定需要的兩個 partition 囉! 一個是根目錄,另外一個就是 swap(記憶體置換空間)。關於記憶體置換空間的解釋在第四章安裝 Linux 內的磁碟分割時有約略提過, swap 的功能就是在應付實體記憶體不足的情況下所造成的記憶體延伸記錄的功能。
一般來說,如果硬體的配備足夠的話,那麼 swap 應該不會被我們的系統所使用到, swap 會被利用到的時刻通常就是實體記憶體不足的情況了。從第零章的計算機概論當中,我們知道 CPU 所讀取的資料都來自於記憶體, 那當記憶體不足的時候,為了讓後續的程式可以順利的運作,因此在記憶體中暫不使用的程式與資料就會被挪到 swap 中了。 此時記憶體就會空出來給需要執行的程式載入。由於 swap 是用硬碟來暫時放置記憶體中的資訊, 所以用到 swap 時,你的主機硬碟燈就會開始閃個不停啊!
雖然目前(2009)主機的記憶體都很大,至少都有 1GB 以上囉!因此在個人使用上你不要設定 swap 應該也沒有什麼太大的問題。 不過伺服器可就不這麼想了~由於你不會知道何時會有大量來自網路的要求,因此你最好能夠預留一些 swap 來緩衝一下系統的記憶體用量! 至少達到『備而不用』的地步啊!
現在想像一個情況,你已經將系統建立起來了,此時卻才發現你沒有建置 swap ~那該如何是好呢? 透過本章上面談到的方法,你可以使用如下的方式來建立你的 swap 囉!
- 設定一個 swap partition
- 建立一個虛擬記憶體的檔案
不囉唆,就立刻來處理處理吧!
使用實體分割槽建置swap
建立 swap 分割槽的方式也是非常的簡單的!透過底下幾個步驟就搞定囉:
- 分割:先使用 fdisk 在你的磁碟中分割出一個分割槽給系統作為 swap 。由於 Linux 的 fdisk 預設會將分割槽的 ID 設定為 Linux 的檔案系統,所以你可能還得要設定一下 system ID 就是了。
- 格式化:利用建立 swap 格式的『mkswap 裝置檔名』就能夠格式化該分割槽成為 swap 格式囉
- 使用:最後將該 swap 裝置啟動,方法為:『swapon 裝置檔名』。
- 觀察:最終透過 free 這個指令來觀察一下記憶體的用量吧!
不囉唆,立刻來實作看看!既然我們還有多餘的磁碟容量可以分割,那麼讓我們繼續分割出 256MB 的磁碟分割槽吧! 然後將這個磁碟分割槽做成 swap 吧!
- 1. 先進行分割的行為囉!
[root@www ~]# fdisk /dev/hdc Command (m for help): n First cylinder (2303-5005, default 2303): <==這裡按[enter] Using default value 2303 Last cylinder or +size or +sizeM or +sizeK (2303-5005, default 5005): +256M Command (m for help): p Device Boot Start End Blocks Id System .....中間省略..... /dev/hdc6 2053 2302 2008093+ 83 Linux /dev/hdc7 2303 2334 257008+ 83 Linux <==新增的項目 Command (m for help): t <==修改系統 ID Partition number (1-7): 7 <==從上結果看到的,七號partition Hex code (type L to list codes): 82 <==改成 swap 的 ID Changed system type of partition 7 to 82 (Linux swap / Solaris) Command (m for help): p Device Boot Start End Blocks Id System .....中間省略..... /dev/hdc6 2053 2302 2008093+ 83 Linux /dev/hdc7 2303 2334 257008+ 82 Linux swap / Solaris Command (m for help): w # 此時就將 partition table 更新了! [root@www ~]# partprobe # 這個玩意兒很重要的啦!不要忘記讓核心更新 partition table 喔!
[root@www ~]# mkswap /dev/hdc7 Setting up swapspace version 1, size = 263172 kB <==非常快速! |
- 3. 開始觀察與載入看看吧!
[root@www ~]# free total used free shared buffers cached Mem: 742664 684592 58072 0 43820 497144 -/+ buffers/cache: 143628 599036 Swap: 1020088 96 1019992 # 我有 742664K 的實體記憶體,使用 684592K 剩餘 58072K ,使用掉的記憶體有 # 43820K / 497144K 用在緩衝/快取的用途中。 # 至於 swap 已經存在了 1020088K 囉!這樣會看了吧?! [root@www ~]# swapon /dev/hdc7 [root@www ~]# free total used free shared buffers cached Mem: 742664 684712 57952 0 43872 497180 -/+ buffers/cache: 143660 599004 Swap: 1277088 96 1276992 <==有增加囉!看到否? [root@www ~]# swapon -s Filename Type Size Used Priority /dev/hdc5 partition 1020088 96 -1 /dev/hdc7 partition 257000 0 -2 # 上面列出目前使用的 swap 裝置有哪些的意思!
使用檔案建置swap
如果是在實體分割槽無法支援的環境下,此時前一小節提到的 loop 裝置建置方法就派的上用場啦! 與實體分割槽不一樣的只是利用 dd 去建置一個大檔案而已。多說無益,我們就再透過檔案建置的方法建立一個 128 MB 的記憶體置換空間吧!
- 1. 使用 dd 這個指令來新增一個 128MB 的檔案在 /tmp 底下:
[root@www ~]# dd if=/dev/zero of=/tmp/swap bs=1M count=128 128+0 records in 128+0 records out 134217728 bytes (134 MB) copied, 1.7066 seconds, 78.6 MB/s [root@www ~]# ll -h /tmp/swap -rw-r--r-- 1 root root 128M Oct 28 15:33 /tmp/swap這樣一個 128MB 的檔案就建置妥當。若忘記上述的各項參數的意義,請回前一小節查閱一下囉!
- 2. 使用 mkswap 將 /tmp/swap 這個檔案格式化為 swap 的檔案格式:
[root@www ~]# mkswap /tmp/swap Setting up swapspace version 1, size = 134213 kB # 這個指令下達時請『特別小心』,因為下錯字元控制,將可能使您的檔案系統掛掉! |
- 3. 使用 swapon 來將 /tmp/swap 啟動囉!
[root@www ~]# free total used free shared buffers cached Mem: 742664 450860 291804 0 45584 261284 -/+ buffers/cache: 143992 598672 Swap: 1277088 96 1276992 [root@www ~]# swapon /tmp/swap [root@www ~]# free total used free shared buffers cached Mem: 742664 450860 291804 0 45604 261284 -/+ buffers/cache: 143972 598692 Swap: 1408152 96 1408056 [root@www ~]# swapon -s Filename Type Size Used Priority /dev/hdc5 partition 1020088 96 -1 /dev/hdc7 partition 257000 0 -2 /tmp/swap file 131064 0 -3 |
- 4. 使用 swapoff 關掉 swap file
[root@www ~]# swapoff /tmp/swap [root@www ~]# swapoff /dev/hdc7 [root@www ~]# free total used free shared buffers cached Mem: 742664 450860 291804 0 45660 261284 -/+ buffers/cache: 143916 598748 Swap: 1020088 96 1019992 <==回復成最原始的樣子了! |
swap使用上的限制
說實話,swap 在目前的桌上型電腦來講,存在的意義已經不大了!這是因為目前的 x86 主機所含的記憶體實在都太大了 (一般入門級至少也都有 512MB 了),所以,我們的 Linux 系統大概都用不到 swap 這個玩意兒的。不過, 如果是針對伺服器或者是工作站這些常年上線的系統來說的話,那麼,無論如何,swap 還是需要建立的。
因為 swap 主要的功能是當實體記憶體不夠時,則某些在記憶體當中所佔的程式會暫時被移動到 swap 當中,讓實體記憶體可以被需要的程式來使用。另外,如果你的主機支援電源管理模式, 也就是說,你的 Linux 主機系統可以進入『休眠』模式的話,那麼, 運作當中的程式狀態則會被紀錄到 swap 去,以作為『喚醒』主機的狀態依據! 另外,有某些程式在運作時,本來就會利用 swap 的特性來存放一些資料段, 所以, swap 來是需要建立的!只是不需要太大!
不過, swap 在被建立時,是有限制的喔!
- 在核心 2.4.10 版本以後,單一 swap 量已經沒有 2GB 的限制了,
- 但是,最多還是僅能建立到 32 個 swap 的數量!
- 而且,由於目前 x86_64 (64位元) 最大記憶體定址到 64GB, 因此, swap 總量最大也是僅能達 64GB 就是了!