1.什麼是交換分區
Linux中交換分區swap,類似於Windows的虛擬內存,就是當內存不足的時候,把一部分硬盤空間虛擬成內存使用,從而解決內存容量不足的情況。並不是所有從物理內存中交換出來的數據都會被放到Swap中,有相當一部分數據被直接交換到文件系統。但是那些用malloc和new函數生成的對象的數據需要Swap空間,因爲它們在文件系統中沒有相應的“儲備”文件,因此被稱作“匿名”(Anonymous)內存數據,這類數據還包括堆棧中的一些狀態和變量數據等。所以說,Swap空間是“匿名”數據的交換空間。
那麼swap一般設置多大呢?這沒有具體的規定,要看實際使用中對swap分區依賴的需求,有的場景可能都不需要swap分區,分區大了只會浪費硬盤的空間資源。
查看swap的大小和使用情況
free -m ,可以加上h參數顯示更直觀,單位是MB。
[root@linux Desktop]# free -m
total used free shared buffers cached
Mem: 3939 921 3017 9 0 279
-/+ buffers/cache: 641 3297
Swap: 2047 0 2047
top,類似於windows的任務管理器的程序,ctrl+c退出, 單位是KB。
swapon -s,cat /proc/swaps,單位KB。
[root@linux Desktop]# swapon -s
文件名 類型 大小 已用 權限
/dev/dm-1 partition 2097148 0 -1
[root@linux Desktop]# cat /proc/swaps
Filename Type Size Used Priority
/dev/dm-1 partition 2097148 0 -1
2.關閉和開啓swap
使用swapoff -a命令關閉所有swap分區,或者使用路徑關閉具體swap。
[root@linux Desktop]# swapoff -a
[root@linux Desktop]# free -m
total used free shared buffers cached
Mem: 3939 924 3014 9 0 279
-/+ buffers/cache: 644 3295
Swap: 0 0 0
使用swapon -a命令開啓所有swap分區。
[root@linux Desktop]# swapon -a
[root@linux Desktop]# free -m
total used free shared buffers cached
Mem: 3939 926 3013 9 0 279
-/+ buffers/cache: 645 3293
Swap: 2047 0 2047
3.縮小swap分區
a.縮小swap分區就是縮小對應swap分區邏輯卷的大小,前文第8章寫過使用lvreduce命令縮小邏輯卷。
查看swap邏輯卷的位置
[root@linux Desktop]# swapon -s
文件名 類型 大小 已用 權限
/dev/dm-1 partition 2097148 0 -1
b.關閉swap交換分區
[root@linux Desktop]# swapoff /dev/dm-1
[root@linux Desktop]# free -m
total used free shared buffers cached
Mem: 3939 924 3014 9 0 279
-/+ buffers/cache: 643 3295
Swap: 0 0 0
c.縮小/dev/dm-1分區,發現報錯了。
[root@linux Desktop]# lvreduce -L 1G /dev/dm-1
Path required for Logical Volume "dm-1"
Please provide a volume group name
Run `lvreduce --help' for more information.
原來lvm會把每個lv連接到一個/dev/dm-x的設備檔,這個設備檔並不是一個真正的磁盤,所以不會有分區表存在,不能把dm設備分區。dm-0, dm-1的實體可以使用dmsetup ls和dmsetup info 命令來查看dm設備(lvm)映射情況,可以看到主設備號,次設備號。
[root@linux Desktop]# dmsetup ls
rhel-swap (253:1)
rhel-root (253:0)
dm-0對應的是root目錄,dm-1對應的是swap目錄,所以我們實際需要縮小的是/dev/rhel/swap分區。
[root@linux Desktop]# lvreduce -L 1G /dev/rhel/swap
WARNING: Reducing active logical volume to 1.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce swap? [y/n]: y
Reducing logical volume swap to 1.00 GiB
Logical volume swap successfully resized
e.使用mkswap重新格式化swap分區,開啓swap交換分區,看到swap分區只有1G空間了。
[root@linux Desktop]# mkswap /dev/rhel/swap
mkswap: /dev/rhel/swap: warning: wiping old swap signature.
正在設置交換空間版本 1,大小 = 1048572 KiB
無標籤,UUID=816f10ef-f8ac-43aa-8471-4f35c6f2c322
[root@linux Desktop]# swapon /dev/mapper/rhel-swap
[root@linux Desktop]# free -m
total used free shared buffers cached
Mem: 3939 935 3003 9 0 280
-/+ buffers/cache: 654 3285
Swap: 1023 0 1023
4.擴大swap分區
擴大swap分區有兩個方法,第一是直接擴容原來的swap分區,第二是重新劃分一個新的分區加入到swap交換分區中。
4.1擴容swap分區
先查看vg卷組中還有多少空間
[root@linux Desktop]# vgdisplay
--- Volume group ---
VG Name rhel
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 7
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 19.51 GiB
PE Size 4.00 MiB
Total PE 4994
Alloc PE / Size 4738 / 18.51 GiB
Free PE / Size 256 / 1.00 GiB
VG UUID 9kJ1ti-wPVy-l2jN-xRyj-GUSU-YbJ2-8TcULW
可以看到vg卷組有上一節縮容出來的1G空間,全部劃分到swap中。先關閉swap交換分區。
[root@linux Desktop]# swapoff -a
[root@linux Desktop]# lvextend -L 2G /dev/rhel/swap
Extending logical volume swap to 2.00 GiB
Logical volume swap successfully resized
[root@linux Desktop]# mkswap /dev/rhel/swap
mkswap: /dev/rhel/swap: warning: wiping old swap signature.
正在設置交換空間版本 1,大小 = 2097148 KiB
無標籤,UUID=f69e5ca2-9387-4084-9043-ea87aea5e460
[root@linux Desktop]# swapon -a
[root@linux Desktop]# free -m
total used free shared buffers cached
Mem: 3939 937 3001 9 0 280
-/+ buffers/cache: 656 3283
Swap: 2047 0 2047
4.2劃分新分區
a.在新硬盤上劃分2GB的空間,創建主分區直接加入到swap交換分區,也可以劃分LVM邏輯卷。
[root@linux Desktop]# fdisk /dev/sdb
歡迎使用 fdisk (util-linux 2.23.2)。
更改將停留在內存中,直到您決定將更改寫入磁盤。
使用寫入命令前請三思。
Device does not contain a recognized partition table
使用磁盤標識符 0x5a7f40d0 創建新的 DOS 磁盤標籤。
命令(輸入 m 獲取幫助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
分區號 (1-4,默認 1):
起始 扇區 (2048-41943039,默認爲 2048):
將使用默認值 2048
Last 扇區, +扇區 or +size{K,M,G} (2048-41943039,默認爲 41943039):+2G
分區 1 已設置爲 Linux 類型,大小設爲 2 GiB
命令(輸入 m 獲取幫助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盤。
b.在/dev/sdb上劃分了一個2GB的/dev/sdb1的主分區,格式化並使用swapon命令加入到swap分區。
[root@linux Desktop]# mkswap /dev/sdb1
正在設置交換空間版本 1,大小 = 2097148 KiB
無標籤,UUID=3b180922-2818-4765-a3c9-34cc1ae89e27
[root@linux Desktop]# swapon /dev/sdb1
[root@linux Desktop]# free -m
total used free shared buffers cached
Mem: 3939 943 2995 9 0 280
-/+ buffers/cache: 662 3277
Swap: 4095 0 4095
c.要新增的swap分區不在重啓後失效,需要將掛載信息寫入/etc/fstab。
[root@linux Desktop]# echo /dev/sdb1 swap swap defaults 0 0 >> /etc/fstab