首頁 > linux教程 > Linux文件系統管理 閱讀:0更新時間:2020-03-28 01:01:27

Linux swap分區及作用詳解

我們在安裝系統的時候已經建立了 swap 分區。swap 分區通常被稱為交換分區,這是一塊特殊的硬盤空間,即當實際內存不夠用的時候,操作系統會從內存中取出一部分暫時不用的數據,放在交換分區中,從而為當前運行的程序騰出足夠的內存空間。

也就是說,當內存不夠用時,我們使用 swap 分區來臨時頂替。這種“拆東墻,補西墻”的方式應用于幾乎所有的操作系統中。

使用 swap 交換分區,顯著的優點是,通過操作系統的調度,應用程序實際可以使用的內存空間將遠遠超過系統的物理內存。由于硬盤空間的價格遠比 RAM 要低,因此這種方式無疑是經濟實惠的。當然,頻繁地讀寫硬盤,會顯著降低操作系統的運行速率,這也是使用 swap 交換分區最大的限制。

相比較而言,Windows 不會為 swap 單獨劃分一個分區,而是使用分頁文件實現相同的功能,在概念上,Windows 稱其為虛擬內存,從某種意義上將,這個叫法更容易理解。因此,初學者將 swap 交換分區理解為虛擬內存是沒有任何問題的。

具體使用多大的 swap 分區,取決于物理內存大小和硬盤的容量。一般來講,swap 分區容量應大于物理內存大小,建議是內存的兩倍,但不超過 2GB。但是,有時服務器的訪問量確實很大,有可能出現 swap 分區不夠用的情況,所以我們需要學習 swap 分區的構建方法。

建立新的 swap 分區,只需要執行以下幾個步驟。
  1. 分區:不管是 fdisk 命令還是 parted 命令,都需要先區。
  2. 格式化:格式化命令稍有不同,使用 mkswap 命令把分區格式化成 swap 分區。
  3. 使用 swap 分區。

下面我們來逐一實現。

建立swap分區第一步:分區

命令如下:

[root@localhost ~]# fdisk /dev/sdb
#以/dev/sdb分區為例
WARNING: DOS-compatible mode is deprecated.It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u').
Command (m for help): n
#新建
Command action e extended p primary partition (1-4)
P
#主分區
Partition number (1-4): 1
#分區編號
First cylinder (1-2610, default 1):
#起始柱面
Using default value 1
Last cylinder, +cylinders or +size{K, M, G} (1-2610, default 2610): +500M
#大小
Command (m for help): p
#查看一下
Disk /dev/sdb: 21.5GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 *512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes 1512 bytes
Disk identifier: OxOOOOOebd
Device Boot Start End Blocks Id System
/dev/sdb1 1 65 522081 83 linux
#剛分配的分區ID是83,是Linux分區,我們在這里要分配swap分區
Command (m for help): t
#修改分區的系統ID
Selected partition 1
#只有一個分區,所以不用選擇分區了
Hex code (type L to list codes): 82
#改為swap分區的ID
Changed system type of partition 1 to 82 (Linux swap / Solaris)
Command (m for help): p
#再查看一下
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 *512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes 1512 bytes Disk identifier: OxOOOOOebd
Device Boot Start End Blocks Id System
/dev/sdb1 1 65 522081 82 Linux swap / Solaris
#修改過來了
Command (m for help): w
#記得保存退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

仍以 /dev/sdb 分區作為實驗對象。不過,如果分區剛剛使用 parted 命令轉變為 GPT 分區表,則記得轉換回 MBR 分區表,fdisk 命令才能識別,否則干脆新添加一塊硬盤做實驗。

建立 swap 分區第二步:格式化

因為要格式化成 swap 分區,所以格式化命令是 mkswap。命令如下:

[root@localhost ~]# mkswap /dev/sdb1
Setting up swapspace version 1, size = 522076 KiB
no label, UUID=c3351 dc3-f403-419a-9666-c24615e170fb

使用swap分區

在使用 swap 分區之前,我們先來說說 free 命令。命令如下:

[root@localhost ~]#free
total used free shared buffers cached
Mem: 1030796 130792 900004 0 15292 55420
-/+ buffers/cache: 60080 970716
Swap: 2047992 0 2047992

free 命令主要是用來查看內存和 swap 分區的使用情況的,其中:
  • total:是指總數;
  • used:是指已經使用的;
  • free:是指空閑的;
  • shared:是指共享的;
  • buffers:是指緩沖內存數;
  • cached:是指緩存內存數,單位是KB;

我們需要解釋一下 buffers(緩沖)和 cached(緩存)的區別。簡單來講,cached 是給讀取數據時加速的,buffers 是給寫入數據加速的。cached 是指把讀取出來的數據保存在內存中,當再次讀取時,不用讀取硬盤而直接從內存中讀取,加速了數據的讀取過程;buffers 是指在寫入數據時,先把分散的寫入操作保存到內存中,當達到一定程度后再集中寫入硬盤,減少了磁盤碎片和硬盤的反復尋道,加速了數據的寫入過程。

我們已經看到,在加載進新的 swap 分區之前,swap 分區的大小是 2000MB,接下來只要加入 swap 分區就可以了,使用命令 swapon。命令格式如下:

[root@localhost ~]# swapon 分區設備文件名

例如:

[root@localhost ~]# swapon /dev/sdb1
swap分區已加入,我們查看一下。
[root@localhost ~]#free
total used free shared buffers cached
Mem: 1030796 131264 899532 0 15520 55500
-/+ buffers/cache: 60244 970552
Swap: 2570064 0 2570064

swap 分區的大小變成了 2500MB,加載成功了。如果要取消新加入的 swap 分區,則也很簡單,命令如下:

[root@localhost ~]# swapoff /dev/sdb1

如果想讓 swap 分區開機之后自動掛載,就需要修改 /etc/fstab 文件,命令如下:

[root@localhost ~]#vi /etc/fstab
UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 / ext4 defaults 1 1
UUID=0b23d315-33a7-48a4-bd37-9248e5c443451 boot ext4 defaults 1 2
UUID=4021be19-2751-4dd2-98cc-383368c39edb swap swap defaults 0 0
tmpfs /dev/shm
tmpfs defaults 0 0
devpts /dev/pts
devpts gid=5, mode=620 0 0
sysfs /sys
sysfs defaults 0 0
proc /proc
proc defaults 0 0
/dev/sdb1 swap swap
defaults 0 0
#加入新swap分區的相關內容,這里直接使用分區的設備文件名,也可以使用UUID。

beylze編程學院,一個分享編程知識和seo優化知識的網站。跟著beylze一起學習,每天都有進步。

通俗易懂,深入淺出,一篇文章只講一個知識點。

文章不深奧,不需要鉆研,在公交、在地鐵、在廁所都可以閱讀,隨時隨地漲姿勢。

文章不涉及代碼,不燒腦細胞,人人都可以學習。

當你決定關注beylze(公眾號:beylze),你已然超越了90%的其他從業者!

相關文章

優秀教程

国产亚洲欧美日韩