擴充套件 新建swap 將檔案或分割槽載入為swap

2021-06-16 06:53:35 字數 3083 閱讀 8087

首先,讓我們大致了解swap原理:

一種流行的、以訛傳訛的說法是,安裝linux系統時,交換分割槽swap的大小應該是記憶體的兩倍。也就是說,如果記憶體是2g,那麼就應該分出4g的硬碟空間作為交換空間。其實這是嚴重的浪費。真實的情況是:可以根據你系統記憶體的大小,以及所使用的程式,自行決定交換分割槽的大小,甚至可以完全不用交換分割槽!

首先解釋一下什麼是交換分割槽。交換分割槽,英文的說法是swap,意思是「交換」、「實物交易」。它的功能就是在記憶體不夠的情況下,作業系統先把記憶體中暫時不用的資料,存到硬碟的交換空間,騰出記憶體來讓別的程式執行,和windows的虛擬記憶體(pagefile.sys)的作用是一樣的。

做乙個假設:如果你的記憶體足夠大,極少出現記憶體不足的情況,那麼你就不需要交換分割槽。事實上,這種可能性是完全存在的。現在的1g記憶體的電腦不算什麼了。動輒4g記憶體的電腦也日益普遍。日常使用的話,很少能用完全部的記憶體。在用不完記憶體容量的情況下,還要劃出它兩倍的硬碟空間用於記憶體交換,這不是浪費嗎?

可以說,在你記憶體基本夠用的情況下,完全可以不要交換空間。在windows下也是一樣,在系統屬性中,把虛擬記憶體設定為0,系統依然執行的很好。當然,如果你用的是伺服器,還是要有專門的虛擬記憶體,有備無患。但是虛擬記憶體的大小不一定非要記憶體的兩倍。

那麼怎麼知道你的系統有沒有用到交換空間呢?只需要在root使用者下,執行下面的命令就可以知道了。

free -m

在日常應用中,通過上述命令看到交換空間的使用情況為0,那麼你就不需要很大的虛擬記憶體,甚至可以完全不需要另闢硬碟空間作為虛擬記憶體。那麼,萬一有一天你需要了呢,難道要重灌系統?大可不必,在linux下虛擬記憶體不單可以放在單獨的交換分割槽,也可以是乙個在正常分割槽下的交換檔案。

我們有時免不了要擴充套件或是改變swap的大小或是掛載位置,為了應會這些情況,知道下面這些就足夠了!

1  檢視swap 空間大小(總計): 

# free -m

預設單位為k, -m 單位為m

total       used       free     shared    buffers     cached

mem:           377        180        197          0         19        110

-/+ buffers/cache:         50        327

swap:          572          0        572

2  檢視swap 空間(file(s)/partition(s)):

包括 檔案 和 分割槽 的詳細資訊

# swapon -s

等價於# cat /proc/swaps

3新增交換空間3.1 新增乙個交換分割槽

步驟如下:

a  使用fdisk來建立交換分割槽(假設 /dev/sdb2 是建立的交換分割槽)

b 使用 mkswap 命令來設定交換分割槽:

# mkswap /dev/sdb2

c 啟用交換分割槽:

# swapon /dev/sdb2

d 寫入/etc/fstab,以便在引導時啟用:

/dev/sdb2 swap swap defaults 0 0

3.2 新增乙個交換檔案

a  建立大小為512m的交換檔案:

# dd if=/dev/zero of=/swapfile1 bs=1024k count=512

b 使用 mkswap 命令來設定交換檔案:

# mkswap /swapfile1

c 啟用交換分割槽:

# swapon /swapfile1

d 寫入/etc/fstab,以便在引導時啟用:

/swapfile1 swap swap defaults 0 0

新添了交換分割槽並啟用它之後,請檢視 cat /proc/swaps 或 free 命令的輸出來確保交換分割槽已被啟用了。

4 刪除交換空間:

a 禁用交換分割槽:

# swapoff /dev/sdb2

b 從/etc/fstab 中刪除專案;

c 使用fdisk或yast工具刪除分割槽。

刪除交換檔案步驟同上。

# free -m

total       used       free     shared    buffers     cached

mem:           377        180        197          0         19        110

-/+ buffers/cache:         50        327

swap:          572          0        572

mem行顯示了從系統角度看來記憶體使用的情況, total是系統可用的記憶體大小, 數量上等於系統物理記憶體減去核心保留的記憶體. 

buffers和cached是系統用做緩衝的記憶體. buffers與某個塊裝置關聯, 包含了檔案系統元資料, 並且跟蹤了塊的變化. cache只包含了檔案本身.

-/+ buffers/cache  行則從使用者角度顯示記憶體資訊, 可用記憶體從數量上等於mem行used列值減去buffers和cached記憶體的大小.

因為buffers和cached是作業系統為加快系統執行而設定的, 當使用者需要時, 可以只接為使用者使用.

top 顯示系統執行時的各程序動態、實時的狀態(cpu、記憶體)

top 中有3個列 virt res shr, 標示了程序使用的記憶體情況.

virt 標識這個程序可以使用的記憶體總大小, 包括這個進**實使用的記憶體, 對映過的檔案, 和別的程序共享的記憶體等. 

res 標識這個這個進**實占用記憶體的大小. 

shr 標識可以和別的程序共享的記憶體和庫大小.

vmstat 顯示記憶體的使用情況

這些命令都是從/proc/meminfo中讀取記憶體資訊.

關於/proc/meminfo中各行的含意, 在核心源**的documentation/filesystems/proc.txt檔案中有敘述

系統的真實記憶體大小可以用 dmesg | grep [mm][ee][mm]看到

vmsize即為該程序記憶體總大小, 和top輸出中的virt一致.

linux 新建檔案分割槽作為swap交換空間

1 sudo fallocate l 1g swapfile 普通建立 sudo dd if dev zero of swapfile bs 1024 count 1024000 dd建立,建議用這種方式建立 if 表示infile輸入檔案,of表示outfile輸出檔案,count等於想要的塊的數...

樹莓派 為樹莓派配置或擴充套件swap分割槽

由於樹莓派3的預設記憶體只有1g,而應用程式執行過程中,存在大量的io讀寫,以及網路轉換,記憶體交換等。這樣,也有很多buffer cache資源占用等,很快就會接近1gb,最終導致可使用記憶體就幾kb,程式稍微執行一段時間,部分就會自動crush掉 存在如下這樣的問題 1 接收大量,服務占用記憶體...

樹莓派 為樹莓派配置或擴充套件swap分割槽

由於樹莓派3的預設記憶體只有1g,而應用程式執行過程中,存在大量的io讀寫,以及網路轉換,記憶體交換等。這樣,也有很多buffer cache資源占用等,很快就會接近1gb,最終導致可使用記憶體就幾kb,程式稍微執行一段時間,部分就會自動crush掉 存在如下這樣的問題 1 接收大量,服務占用記憶體...