1. 程式人生 > 其它 >Linux之記憶體交換分割槽(swap)

Linux之記憶體交換分割槽(swap)

1、什麼是記憶體交換分割槽(swap)

實體記憶體:計算機記憶體的大小,即記憶體條的大小;

虛擬記憶體:計算機拿出一部分硬碟的空間來充當記憶體;

交換分割槽(swap):當實體記憶體不夠用時,可以拿這個部分來存放記憶體中較少被使用的資料。

2、使用物理分割槽建立記憶體交換分割槽

2.1使用物理分割槽建立swap

建立swap的步驟:

  1. 分割槽:先使用【gdisk】在你的磁碟中劃分出一個分割槽給系統作為swap,由於Linux的【gdisk】預設會將分割槽的ID設定為Linux的檔案系統,所以可能還得要設定【system ID】
  2. 格式化:利用建立swap格式的【mkswap 裝置檔名】就能夠格式化該分割槽成為swap格式
  3. 使用::啟動swap裝置,【swapon 裝置檔名】
  4. 觀察::通過【free】與【swapon -s】來觀察記憶體的使用量

(1)先進行分割槽操作

[root@study ~] gdisk /dev/vda
Command (? for help) : n #【n】 add a new partition
Partition number (6-128, default 6):
First sector (34-83886046, default = 69220352) or {+-}size{KMGTP}:
Last sector (69220352-83886046, default = 83886046) or {+-}size{KMGTP}: +512M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8200 #在分割槽內的可能的檔案系統型別Linux為8300,swap為8200
Changed type of partition to 'Linux swap'
Command (? for help) : p #【p】print the partition table
Number  Start (sector)   End (sector)    size     Code  Name
  6       69220352        70268927     512.0 MiB  8200  Linux swap
Command (? for help) : w #上述操作生效,write table to disk and exit
Do you want to proceed? (Y/N) : y
[root@study ~] partprobe #更新Linux核心的分割槽表資訊
[root@study ~] lsblk #列出系統上的所有磁碟列表
NAME    MAJ:MIN    RM    SIZE   RO   TYPE    MOUNTPOINT
vda     252:0      0     40G     0   disk 
......
-vda    252:6      0     512M    0   part
#結果中有了一個 /dev/vda6 可以用於swap

  

(2)開始建立swap格式

[root@study ~] mkswap /dev/vda6 #將【/dev/vda6】這個檔案格式化為記憶體交換檔案的檔案格式
Setting up swapspace version 1, size = 524284 KiB
no label, UUID=6b17e4ab-9bf9-43d6-88a0-73ab47855f9d
[root@study ~] blkid /dev/vda6
/dev/vda6: UUID="6b17e4ab-9bf9-43d6-88a0-73ab47855f9d" TYPE="swap" #格式化成功

  

(3)觀察與掛載

[root@study ~] free #觀察記憶體和硬碟的swap
          total     used     free    shared  buff/cache  available
Mem:     1275140   227244   330124    7804    717772      875536     #實體記憶體
Swap:    1048572   101340   947232                                   #swap相關
#1275140K的實體記憶體,使用227244K,剩餘330124K,使用掉的記憶體有717772K被快取使用
#swap有1048572K
[root@study ~] swapon /dev/vda6 #觀察/dev/vda6容量
[root@study ~] free #觀察記憶體和硬碟的swap
          total     used     free    shared  buff/cache  available
Mem:     1275140   227244   330124    7804    717772      875536     #實體記憶體
Swap:    1572856   101260   1471596   #這裡total、free均有增加,used有減少
[root@study ~] swapon -s #【-s】:顯示交換區的使用狀況
Filename      Type           Size      Used    Priority
/dev/dm-1     partition    1048572    101260      -1
/dev/vda6     partition    524284       0         -2
[root@study ~] nano /etc/fstab # 寫入配置檔案,啟動時自動掛載
UUID="6b17e4ab-9bf9-43d6-88a0-73ab47855f9d" swap swap defaults  0  0
# 不是檔案系統,所以沒有掛載點,第二欄寫入swap
# [裝置 / UUID等]   [掛載點]   [檔案系統]  [檔案系統引數]  [dump]  [fsck]

  

3、使用檔案建立記憶體交換分割槽

(1)使用【dd】命令在 【/tmp】下新增一個 128MB的檔案

[root@study ~] dd if=/dev/zero of=/tmp/swap bs=1M count=128 #從/dev/zero中讀入128M的0到/tmp/swap中
128+0 records in #讀入128條資料
128+0 records out #輸出128條資料
134217728 Bytes (134 MB) copied, 1.7066 seconds, 78.6 MB/s
[root@study ~] ll -h /tmp/swap
-rw-r--r--  1  root  root  128M  Jun 26  17:47  /tmp/swap
# if : input file,輸入檔案,/dev/zero 是會一直輸出 0 的裝置
# of : output file,將一堆 0 寫入到後面的檔案中(這裡是/srv/loopdev) 
# bs : 是block的size,就像檔案系統那樣的block意義
# count : 總共bs的個數,檔案容量=bs*count

  

(2)使用【mkswap】將【/tmp/swap】這個檔案格式化為記憶體交換檔案的檔案格式

[root@study ~] mkswap /tmp/swap #寫此命令時注意不要寫錯字元,否則可能使檔案系統掛掉
Setting up swapspace version 1, size = 131068 KiB
no label,UUID=4746c8ce-3f73-4f83-b883-33b12fa7337c

 

(3)使用【swapon】來將【/tmp/swap】啟動

[root@study ~] swapon /tmp/swap #觀察 /tmp/swap 的容量
[root@study ~] swapon -s #【-s】:顯示交換區的使用狀況
Filename      Type           Size      Used    Priority
/dev/dm-1     partition    1048572    101260      -1
/dev/vda6     partition    524284       0         -2
/tmp/swap     file         131068       0         -3

  

(4)使用【swapoff】關閉swap file,並設定自動啟用

[root@study ~] nano /etc/fstab #nano文字編輯器來編輯啟動時的配置檔案【/etc/fstab】
/tmp/swap  swap  swap  defaults  0  0
# [裝置 / UUID等]   [掛載點]   [檔案系統]  [檔案系統引數]  [dump]  [fsck]
# 為什麼這裡第一欄不使用UUID,因為系統僅會查詢區塊裝置(block device)不會查詢檔案
[root@study ~] swapoff /tmp/swap  /dev/vda6 #關閉swap file
[root@study ~] swapon -s #【-s】:顯示交換區的使用狀況
Filename      Type           Size      Used    Priority
/dev/dm-1     partition    1048572    101260      -1
[root@study ~] swapon -a #【-a】:將/etc/fstab檔案中所有設定為swap的裝置,啟動為交換區

  

本文學習內容來自:《鳥哥的Linux私房菜》

2021-07-0211:59:40