SWAP我稱之為交換區,相當於Windows系統下的虛擬記憶體。他的作用就是當我們系統中的記憶體不夠用的時候,可以通過SWAP來增加記憶體。我們在安裝Linux系統的時候,最基本的分區一個是根,一個是SWAP。如果我們當初把SWAP分小了的話,你需要增加他的大小,那麼今天的內容就是這個內容:SWAP的建立/擴充。有兩種方法供我們選擇。
1、利用磁碟的剩餘空間
這個前提就是你的磁碟還有剩餘空間沒有劃分,或者是已經劃分的分區不在使用。這個時候才能使用此方法。下面是此方法的實現步驟。
第一步:分區
查看磁碟的情況
[root@yufei ~]# fdisk -l /dev/sdb
此處省略N多行
Device Boot Start End Blocks Id System
/dev/sdb1 1 132 1060258+ 83 Linux
/dev/sdb2 133 183 409657+ b W95 FAT32
/dev/sdb3 184 2610 19494877+ 5 Extended
/dev/sdb5 184 445 2104483+ 83 Linux
/dev/sdb6 446 511 530113+ 82 Linux swap / Solaris
sdb6是我們前面講分區與格式化的時候分出來的,先不理會他。為了完整的來示範,所以我們增加新的分區
[root@yufei ~]# fdisk /dev/sdb
此處有省略內容
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l
First cylinder (512-2610, default 512):
Using default value 512
Last cylinder, +cylinders or +size{K,M,G} (512-2610, default 2610): +256M
Command (m for help): p
此處有省略
/dev/sdb7 512 545 273073+ 83 Linux
第二步:轉換分區類型
Command (m for help): t
Partition number (1-7): 7
Hex code (type L to list codes): L
此處有省略
Hex code (type L to list codes): 82
Changed system type of partition 7 to 82 (Linux swap / Solaris)
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
用[root@yufei ~]# partprobe /dev/sdb也是同樣的錯誤。
上面的錯誤提示大概內容就是裝置繁忙,無法識別新的分區表,什麼原因呢?看下面的解決方案。
還記得我們上一篇關於自動掛載的內容嗎?對了,我們的sdb上的分區已經掛載到系統中了。通過下面的命令來查看
[root@yufei ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 15118728 6980344 7370384 49% /
tmpfs 255784 0 255784 0% /dev/shm
/dev/sdb1 1033560 40980 939568 5% /mnt
/dev/sdb2 409424 0 409424 0% /test
把他們兩個卸載掉
[root@yufei ~]# umount /dev/sdb1
[root@yufei ~]# umount /dev/sdb2
再來
[root@yufei ~]# partprobe /dev/sdb
這時候就沒有顯示錯誤資訊了
[root@yufei ~]# fdisk -l /dev/sdb
此處有省略
Device Boot Start End Blocks Id System
/dev/sdb1 1 132 1060258+ 83 Linux
/dev/sdb2 133 183 409657+ b W95 FAT32
/dev/sdb3 184 2610 19494877+ 5 Extended
/dev/sdb5 184 445 2104483+ 83 Linux
/dev/sdb6 446 511 530113+ 82 Linux swap / Solaris
/dev/sdb7 512 545 273073+ 82 Linux swap / Solaris
sdb7已經分出來了。下面進行格式化
第三步:格式化SWAP分區
SWAP的格式化與我們前面的格式化稍有不同,只是命令不同而已,SWAP用mkswap
[root@yufei ~]# mkswap /dev/sdb7
Setting up swapspace version 1, size = 273068 KiB
no label, UUID=edca6b3a-047b-4e26-9b28-21493f92e2b4
因為沒有設定卷標,所以是無卷標的。
第四步:啟用SWAP
在啟用我們建立的SWAP前,我們先來看看系統中的SWAP大小
[root@yufei ~]# free
total used free shared buffers cached
Mem: 511572 154664 356908 0 17408 76236
-/+ buffers/cache: 61020 450552
Swap: 524280 0 524280
這裡面顯示的是512M
[root@yufei ~]# swapon /dev/sdb7
啟用SWAP,再顯示SWAP的大小,多了256M
[root@yufei ~]# free
total used free shared buffers cached
Mem: 511572 154928 356644 0 17444 76252
-/+ buffers/cache: 61232 450340
Swap: 797344 0 797344
第五步:寫入fstab
在/etc/fstab 最後加入如下內容
UUID=edca6b3a-047b-4e26-9b28-21493f92e2b4 swap swap defaults 0 0
重新啟動系統看看SWAP的大小情況
[root@yufei ~]# free -m
total used free shared buffers cached
Mem: 511572 152636 358936 0 15132 75900
-/+ buffers/cache: 61604 449968
Swap: 797344 0 797344
2、利用分區的剩餘空間
既然用分區的剩餘空間,當然要找個空間大的分區來進行下面的操作啊!
第一步:建立SWAP檔案
[root@yufei ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 15118728 6980460 7370268 49% /
tmpfs 255784 0 255784 0% /dev/shm
/dev/sdb1 1033560 40980 939568 5% /mnt
/dev/sdb2 409424 0 409424 0% /test
因為下面兩個是sdb磁碟的,我們就不用了,直接用/分區吧。
建立一個256M的檔案,名字為根目錄下的swapfile
[root@yufei ~]# dd if=/dev/zero of=/swapfile bs=1M count=256
256+0 records in
256+0 records out
268435456 bytes (268 MB) copied, 9.43718 s, 28.4 MB/s
第二步:對SWAP檔案進行格式化
[root@yufei ~]# mkswap /swapfile
mkswap: /swapfile: warning: don't erase bootbits sectors
on whole disk. Use -f to force.
Setting up swapspace version 1, size = 262140 KiB
no label, UUID=11ca575a-e810-4970-889a-a3f6d9af7dfe
第三步:啟用SWAP
[root@yufei ~]# free
total used free shared buffers cached
Mem: 511572 419940 91632 0 15492 338472
-/+ buffers/cache: 65976 445596
Swap: 797344 0 797344
[root@yufei ~]# swapon /swapfile
[root@yufei ~]# free
total used free shared buffers cached
Mem: 511572 419948 91624 0 15492 338472
-/+ buffers/cache: 65984 445588
Swap: 1059480 0 1059480
第四步:寫入fstab
加入下面的內容
/swapfile swap swap defaults 0 0
重新啟動查詢SWAP大小情況
[root@yufei ~]# free
total used free shared buffers cached
Mem: 511572 151156 360416 0 15228 74056
-/+ buffers/cache: 61872 449700
Swap: 1059480 0 1059480
這樣我們把兩種方法全部示範了一下,這裡面有個問題,那就是現在系統中有三個SWAP,預設的情況下,哪個SWP最先使用呢?Linux的核心會自 動給SWAP指定一個優先順序,這個優先順序從-1開始,每加入一個新的沒有使用者指定優先順序的SWAP,會給這個優先順序減一。所以-1他的優先順序最好,所以就 最先使用。
有這樣一種情況,那就是在使用VPS的時候,系統在安裝的時候,可能沒有給分配SWAP,所以說,你要自己建立SWAP,但就分區與檔案的SWAP而言,分區的SWAP效率要比檔案高。所以有時候我們需要來調整他們的優先順序。請繼續看操作。
查看swap的優先順序
[root@yufei ~]# swapon -s
Filename Type Size Used Priority
/dev/sda2 partition 524280 0 -1
/dev/sdb7 partition 273064 0 -2
/swapfile file 262136 0 -3
這裡是數字越大,優先順序越高。
要更改他們的優先順序也很簡單,只需要在fstab中增加pri參數就OK。注意,這個pri後面的數值不是能負數哦!/etc/fstab修改的主要內容如下。
UUID=c70cd6a4-09cd-4aea-ba94-f3641df4e981 swap swap defaults,pri=1 0 0
UUID=edca6b3a-047b-4e26-9b28-21493f92e2b4 swap swap defaults,pri=2 0 0
/swapfile swap swap defaults,pri=3 0 0
為了使修改生效,我們需要先關閉SWAP再開啟SWAP
[root@yufei ~]# swapoff -a
[root@yufei ~]# swapon -a
[root@yufei ~]# swapon -s
Filename Type Size Used Priority
/dev/sda2 partition 524280 0 1
/dev/sdb7 partition 273064 0 2
/swapfile file 262136 0 3
當然我把這個SWAP檔案調整成最高優先順序不合理,這裡只是做個示範,來說明問題而已。所以大家不要把檔案的SWAP調整成最高啊。如果不是必要的情況下,用系統預設的就好。