Linux SWAP 交換分區配置說明

 

一.SWAP 說明

 

1.1 SWAP 概述

當系統的物理內存不夠用的時候,就需要將物理內存中的一部分空間釋放出來,以供當前運行的程序使用。那些被釋放的空間可能來自一些很長時間沒有什麼操作的程序,這些被釋放的空間被臨時保存到Swap空間中,等到那些程序要運行時,再從Swap中恢復保存的數據到內存中。這樣,系統總是在物理內存不夠時,才進行Swap交換。

 

這個是SWAP 交換分區的作用。 實際上,我們更關注的應該是SWAP分區的大小問題。 設置多大才是最優的。

 

一般來說可以按照如下規則設置swap大小:

4G以內的物理內存,SWAP 設置爲內存的2倍。

4-8G的物理內存,SWAP 等於內存大小。

8-64G 的物理內存,SWAP 設置爲8G。

64-256G物理內存,SWAP 設置爲16G。

 

實際上,系統中交換分區的大小並不取決於物理內存的量,而是取決於系統中內存的負荷,所以在安裝系統時要根據具體的業務來設置SWAP的值。

 

1.2 系統在什麼情況下才會使用SWAP?

 

實際上,並不是等所有的物理內存都消耗完畢之後,纔去使用swap的空間,什麼時候使用是由swappiness 參數值控制。 

  1. [root@rhce ~]# cat /proc/sys/vm/swappiness 
  2. 60 

 該值默認值是60.

swappiness=0的時候表示最大限度使用物理內存,然後纔是 swap空間,

swappiness=100的時候表示積極的使用swap分區,並且把內存上的數據及時的搬運到swap空間裏面。

 

現在服務器的內存動不動就是上百G,所以我們可以把這個參數值設置的低一些,讓操作系統儘可能的使用物理內存,降低系統對swap的使用,從而提高系統的性能。

 

1.3 如何修改swappiness參數?

 

--臨時性修改: 

  1. [root@rhce ~]# sysctl vm.swappiness=10 
  2. vm.swappiness = 10 
  3. [root@rhce ~]# cat /proc/sys/vm/swappiness 
  4. 10 

這裏我們的修改已經生效,但是如果我們重啓了系統,又會變成60. 

  1. [root@dave ~]# swapon /dev/sda2 

--永久修改:

在/etc/sysctl.conf 文件裏添加如下參數:

 

  1. vm.swappiness=10 

或者: 

  1. [root@rhce ~]# echo 'vm.swappiness=10' >>/etc/sysctl.conf 

 

保存,重啓,就生效了。

 

二.管理SWAP

 

2.1 查看系統當前SWAP 空間大小

 

  1. [root@dave ~]# free -m 
  2.             total       used       free    shared    buffers     cached 
  3. Mem:         1954       1923         31          0         21       1345 
  4. -/+ buffers/cache:        555       1399 
  5. Swap:        1999         21       1978 

  

2.2 釋放SWAP 空間

 

假設我們的系統出現了性能問題,我們通過vmstat命令看到有大量的swap,而我們的物理內存又很充足,那麼我們可以手工把swap 空間釋放出來。讓進程去使用物理內存,從而提高性能。

 

  1. [root@dave ~]# vmstat 1 5 
  2. procs -----------memory---------- ---swap-------io---- --system-- -----cpu----- 
  3.  r  b  swpd   free   buff cache   si   so   bi    bo   in  cs us sy id wa st 
  4.  0  0 22272  32620  22032 1378312    0   0    33    38   0   41 1  2 96  0  0 
  5.  0  0 22272  32612  22032 1378340    0   0     0     0 902 1627  0  5 95 0  0 
  6.  0  0 22272  32612  22032 1378340    0   0     0     0 905 1636  1  8 91 0  0 
  7.  0  0 22272  32612  22032 1378340    0   0     0    32 907 1616  0  6 94 0  0 
  8.  0  0 22272  32612  22032 1378340    0   0     0     0 924 1651  0  8 92 0  0 
  9. [root@dave ~]# 
  10.   
  11. [root@dave ~]# free -m 
  12.             total       used       free    shared    buffers    cached 
  13. Mem:         1954       1923         31          0         21       1345 
  14. -/+ buffers/cache:        555       1399 
  15. Swap:         1999         21       1978 

 

 

注意:free命令默認單位爲k, -m 單位爲M。 我們這裏的swap使用了21M的空間。

 

--查看當前swap 的使用

 

  1. [root@dave ~]# swapon -s 
  2. Filename                                Type            Size    Used   Priority 
  3. /dev/sda2                               partition       2047992 22272   -1 
  4.   
  5. [root@dave ~]# cat /proc/swaps 
  6. Filename                                Type            Size    Used   Priority 
  7. /dev/sda2                               partition       2047992 22272   -1 
  8. [root@dave ~]# 
  9.   
  10. swapon –s 等於 cat/proc/swaps 

--關閉swap 交換分區:

 

  1. [root@dave ~]# swapoff/dev/sda2 
  2. [root@dave ~]# swapon -s 
  3. Filename                                Type            Size    Used   Priority 

--查看swap的使用情況: 

  1. [root@dave ~]# free -m 
  2.             total       used       free    shared    buffers     cached 
  3. Mem:         1954       1939         15          0         21       1343 
  4. -/+ buffers/cache:        573       1381 
  5. Swap:           0          0          0 

--啓用swap分區:

  1. [root@dave ~]# swapon /dev/sda2 

--驗證狀態:

  1. [root@dave ~]# swapon -s 
  2. Filename                                Type            Size    Used   Priority 
  3. /dev/sda2                               partition       2047992 0       -1 

 

這裏/dev/sda2是我們在安裝操作系統時劃分的磁盤分區。實際上,我們也可以使用文件來做爲交換分區。具體後面會演示。

 

我們上面寫的是具體名稱,也可是使用swapoff  -a進程,演示如下:

 

  1. [root@dave ~]# swapoff -a 
  2. [root@dave ~]# swapon -s 
  3. Filename                                Type            Size    Used   Priority 
  4. [root@dave ~]# swapon -a 
  5. [root@dave ~]# swapon -s 
  6. Filename                                Type            Size    Used   Priority 
  7. /dev/sda2                               partition       2047992 0       -1 
  8. [root@dave ~]# 

 

我們查看/etc/fstab 文件,我們的swap 也配置到開啓自動啓動了。 

  1. [root@dave ~]# cat /etc/fstab 
  2.   
  3. # /etc/fstab 
  4. # Created by anaconda on Wed Aug 15 00:09:26 2012 
  5. # Accessible filesystems, by reference, aremaintained under '/dev/disk' 
  6. # See man pages fstab(5), findfs(8), mount(8)and/or blkid(8) for more info 
  7. UUID=beea0820-3ac3-4551-9bf0-1b2a462d3ab4 /                       ext4    defaults        1 1 
  8. UUID=e5ec9543-143f-4e3b-b8a7-4fa05b01836a/boot                   ext4    defaults        1 2 
  9. UUID=b256c0bb-9000-456b-b9eb-18239b5df5ddswap                    swap    defaults        0 0 
  10. tmpfs                   /dev/shm                tmpfs   defaults        0 0 
  11. devpts                  /dev/pts                devpts  gid=5,mode=620  0 0 
  12. sysfs                   /sys                    sysfs   defaults        0 0 
  13. proc                    /proc                   proc    defaults        0 0 

 

簡單的說:

(1)ext分區是否啓用由mount及umount控制。

(2)swap分區是否啓動,由swapon及swapoff控制。

 

我們對swap 空間的釋放,也是通過關閉swap分區,在啓動swap 分區來實現的。

 

 

2.3 使用文件來作爲SWAP 交換分區

 

我們這裏使用文件添加一個交換區,具體操作如下:

 

--在根目錄下生成一個文件:swap-file,大小1G:

 

  1. [root@dave u01]# dd if=/dev/zero of=/swap-filebs=1M count=1024 
  2. 1024+0 records in 
  3. 1024+0 records out 
  4. 1073741824 bytes (1.1 GB) copied, 5.91518 s, 182MB/s 
  5. [root@dave u01]# cd / 
  6. [root@dave /]# ls 
  7. bin  cgroup  etc   lib   lost+found  misc  net proc  sbin     srv       sys  u01  usr 
  8. boot dev     home  lib64 media       mnt   opt root  selinux  swap-file tmp  u02  var 

 

--將生成的文件格式化成交換分區: 

  1. [root@dave /]# mkswap /swap-file 
  2. mkswap: /swap-file: warning: don't erase bootbitssectors 
  3.         onwhole disk. Use -f to force
  4. Setting up swapspace version 1, size = 1048572 KiB 
  5. no label, UUID=653bbeb5-4abb-4295-b110-5847e073140d 

 

--這裏沒有分區的lable,只有一個UUID。 

 

--啓動swap分區並查看狀態: 

  1. [root@dave /]# swapon /swap-file 
  2. [root@dave /]# swapon -s 
  3. Filename                                Type            Size    Used   Priority 
  4. /dev/sda2                               partition       2047992 0       -1 
  5. /swap-file                              file            1048568 0       -2 

 

 

這裏我們就看到了2個swap。

 

但是這個只對當前有效,如果想下次重啓系統後還繼續有效,需要將配置寫入到/etc/fstab文件中。

 

在/etc/fstab文件中添加如下內容:

 

  1. UUID=653bbeb5-4abb-4295-b110-5847e073140d swap                    swap    defaults        0 0 

 

或者:

  1. /swap-file swap                    swap    defaults        0 0 

 

2.4 使用磁盤添加swap

 

先劃分一個1G的磁盤分區出來: 

  1. [root@rhce /]# fdisk /dev/sdb 
  2. Device contains neither a valid DOS partitiontable, nor Sun, SGI or OSF disklabel 
  3. Building a new DOS disklabel with disk identifier0x65edb587. 
  4. Changes will remain in memory only, until youdecide to write them. 
  5. After that, of course, the previous content won'tbe recoverable. 
  6.   
  7. Warning: invalid flag 0x0000 of partition table 4will be corrected by w(rite) 
  8.   
  9. WARNING: DOS-compatible mode is deprecated. It'sstrongly recommended to 
  10.         switch off the mode (command 'c'and change display units to 
  11.         sectors (command 'u'). 
  12.   
  13. Command (m for help): n 
  14. Command action 
  15.    e   extended 
  16.    p   primary partition (1-4) 
  17. Partition number (1-4): 1 
  18. First cylinder (1-652, default 1): 
  19. Using default value 1 
  20. Last cylinder, +cylinders or +size{K,M,G} (1-652,default 652): +1G 
  21.   
  22. Command (m for help): w 
  23. The partition table has been altered! 
  24.   
  25. Calling ioctl() to re-read partition table
  26. Syncing disks. 
  27. [root@rhce /]# fdisk -l 
  28.   
  29. Disk /dev/sda: 21.5 GB, 21474836480 bytes 
  30. 255 heads, 63 sectors/track, 2610 cylinders 
  31. Units = cylinders of 16065 * 512 = 8225280 bytes 
  32. Sector size (logical/physical): 512 bytes / 512bytes 
  33. I/O size (minimum/optimal): 512 bytes / 512 bytes 
  34. Disk identifier: 0x000bcd24 
  35.   
  36.    DeviceBoot      Start         End      Blocks  Id  System 
  37. /dev/sda1  *           1         128    1024000   83  Linux 
  38. Partition 1 does not end on cylinder boundary. 
  39. /dev/sda2             128         511    3072000   82  Linux swap / Solaris 
  40. Partition 2 does not end on cylinder boundary. 
  41. /dev/sda3             511        2611   16874496   83  Linux 
  42. Disk /dev/sdb: 5368 MB, 5368709120 bytes 
  43. 255 heads, 63 sectors/track, 652 cylinders 
  44. Units = cylinders of 16065 * 512 = 8225280 bytes 
  45. Sector size (logical/physical): 512 bytes / 512bytes 
  46. I/O size (minimum/optimal): 512 bytes / 512 bytes 
  47. Disk identifier: 0x65edb587 
  48.   
  49.    DeviceBoot      Start         End      Blocks  Id  System 
  50. /dev/sdb1               1         132    1060258+  83  Linux 
  51. … 

 

 

注意這裏fdisk ID的編號。 這裏顯示的83,它代表這個分區是ext的分區,這個是不能用來做swap的。

 

在fdisk 命令可以看到具體數據的含義:

 

  1. Command (m for help): l 
  2.   
  3.  0  Empty           24 NEC DOS         81  Minix / old Lin bf  Solaris        
  4.  1  FAT12           39 Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT- 
  5.  2  XENIX root      3c PartitionMagic  83  Linux           c4 DRDOS/sec (FAT- 
  6.  3  XENIX usr       40 Venix 80286     84  OS/2 hidden C:  c6 DRDOS/sec (FAT- 
  7.  4  FAT16 <32M      41 PPC PReP Boot   85  Linux extended  c7 Syrinx         
  8.  5  Extended        42 SFS             86  NTFS volume set da  Non-FS data    
  9.  6  FAT16           4d QNX4.x          87  NTFS volume set db  CP/M / CTOS / . 
  10.  7  HPFS/NTFS       4e QNX4.x 2nd part 88  Linuxplaintext de  Dell Utility   
  11.  8  AIX            4f  QNX4.x 3rd part 8e  Linux LVM       df BootIt         
  12.  9  AIX bootable    50 OnTrack DM      93  Amoeba          e1 DOS access     
  13.  a  OS/2 Boot Manag 51  OnTrack DM6 Aux 94  Amoeba BBT      e3 DOS R/O        
  14.  b  W95 FAT32       52 CP/M            9f BSD/OS          e4  SpeedStor      
  15.  c  W95 FAT32 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs        
  16.  e  W95 FAT16 (LBA) 54  OnTrackDM6      a5 FreeBSD         ee  GPT            
  17.  f  W95 Ext'd (LBA) 55  EZ-Drive        a6 OpenBSD         ef  EFI (FAT-12/16/ 
  18. 10  OPUS            56 Golden Bow      a7  NeXTSTEP        f0 Linux/PA-RISC b 
  19. 11  HiddenFAT12    5c  Priam Edisk     a8 Darwin UFS      f1  SpeedStor      
  20. 12  Compaqdiagnost 61  SpeedStor       a9 NetBSD          f4  SpeedStor      
  21. 14  HiddenFAT16 <3 63  GNU HURD or Sys ab  Darwin boot     f2 DOS secondary  
  22. 16  HiddenFAT16    64  Novell Netware  af  HFS/ HFS+      fb  VMware VMFS    
  23. 17  HiddenHPFS/NTF 65  Novell Netware  b7 BSDI fs         fc  VMware VMKCORE 
  24. 18  ASTSmartSleep  70  DiskSecure Mult b8  BSDI swap       fd Linux raid auto 
  25. 1b  HiddenW95 FAT3 75  PC/IX           bb Boot Wizard hid fe  LANstep        
  26. 1c  HiddenW95 FAT3 80  Old Minix       be Solaris boot    ff  BBT            
  27. 1e  HiddenW95 FAT1 

 

 

ext的分區ID號:0x83   

swap的分區ID號:0x82

 

--將/dev/sdb1分區改成swap 分區:

 

  1. [root@rhce ~]# fdisk /dev/sdb 
  2.   
  3. WARNING: DOS-compatible mode is deprecated. It'sstrongly recommended to 
  4.         switch off the mode (command 'c'and change display units to 
  5.         sectors (command 'u'). 
  6.   
  7. Command (m for help): h 
  8. h: unknown command 
  9. Command action 
  10.    a   toggle a bootable flag 
  11.    b   edit bsd disklabel 
  12.    c   toggle the dos compatibility flag 
  13.    d   delete a partition 
  14.    l   list known partition types 
  15.    m   print this menu 
  16.    n   add a new partition 
  17.    o   create a new empty DOS partition table 
  18.    p   print the partition table 
  19.    q   quit without saving changes 
  20.    s   create a new empty Sun disklabel 
  21.   t   change a partition's system id 
  22.    u   change display/entry units 
  23.    v   verify the partition table 
  24.    w   write table to disk and exit 
  25.    x   extra functionality (experts only
  26.   
  27. Command (m for help): t 
  28. Selected partition 1 
  29. Hex code (type L to list codes): L 
  30.   
  31.  0  Empty           24 NEC DOS         81  Minix / old Lin bf  Solaris        
  32.  1  FAT12           39 Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT- 
  33.  2  XENIX root      3c PartitionMagic  83  Linux           c4 DRDOS/sec (FAT- 
  34.  3  XENIX usr      40  Venix 80286     84 OS/2 hidden C:  c6  DRDOS/sec (FAT- 
  35.  4  FAT16 <32M      41 PPC PReP Boot   85  Linux extended  c7 Syrinx         
  36.  5  Extended        42 SFS             86  NTFS volume set da  Non-FS data    
  37.  6  FAT16           4d QNX4.x          87 NTFS volume set db  CP/M / CTOS /. 
  38.  7  HPFS/NTFS       4e QNX4.x 2nd part 88  Linuxplaintext de  Dell Utility   
  39.  8  AIX             4f QNX4.x 3rd part 8e  Linux LVM       df BootIt         
  40.  9  AIX bootable    50 OnTrack DM      93  Amoeba          e1 DOS access     
  41.  a  OS/2 Boot Manag 51  OnTrack DM6 Aux 94  Amoeba BBT      e3 DOS R/O        
  42.  b  W95 FAT32       52 CP/M            9f  BSD/OS          e4 SpeedStor      
  43.  c  W95 FAT32 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs        
  44.  e  W95 FAT16 (LBA) 54  OnTrackDM6      a5 FreeBSD         ee  GPT            
  45.  f  W95 Ext'd (LBA) 55  EZ-Drive        a6 OpenBSD         ef  EFI (FAT-12/16/ 
  46. 10  OPUS            56 Golden Bow      a7  NeXTSTEP        f0 Linux/PA-RISC b 
  47. 11  HiddenFAT12    5c  Priam Edisk     a8 Darwin UFS      f1  SpeedStor      
  48. 12  Compaqdiagnost 61  SpeedStor       a9 NetBSD          f4  SpeedStor      
  49. 14  HiddenFAT16 <3 63  GNU HURD or Sys ab  Darwin boot     f2 DOS secondary  
  50. 16  HiddenFAT16    64  Novell Netware  af  HFS/ HFS+      fb  VMware VMFS    
  51. 17  HiddenHPFS/NTF 65  Novell Netware  b7 BSDI fs         fc  VMware VMKCORE 
  52. 18  ASTSmartSleep  70  DiskSecure Mult b8  BSDI swap       fd Linux raid auto 
  53. 1b  HiddenW95 FAT3 75  PC/IX           bb Boot Wizard hid fe  LANstep        
  54. 1c  HiddenW95 FAT3 80  Old Minix       be Solaris boot    ff  BBT            
  55. 1e  HiddenW95 FAT1 
  56. Hex code (type L to list codes):82 

 

 

Changed system type of partition1 to 82 (Linux swap / Solaris)

--注意這裏更改磁盤分區的ID類型,如果不更在,在系統重啓時會根據ID來判斷磁盤的類型,那樣在使用時就會出現錯誤。

 

  1. Command (m for help): w 
  2. The partition table has been altered! 
  3.   
  4. Calling ioctl() to re-read partition table
  5.   
  6. WARNING: Re-reading the partition table failed witherror 16: Device or resource busy. 
  7. The kernel still uses the old table. The new tablewill be used at 
  8. the next reboot or after you run partprobe(8) orkpartx(8) 
  9. Syncing disks. 

 

--格式化swap分區:

  1. [root@rhce /]# mkswap /dev/sdb1 
  2. Setting up swapspace version 1, size = 1060252 KiB 
  3. no label, UUID= bc913e6b-209a-49a7-b561-9b8c57294681 
  4.   
  5. [root@rhce /]# mkswap –L swap-disk/dev/sdc1 

一個設置了Lable,一個沒設置。我們在添加/etc/fstab時,可是用LABLE名稱,或者使用UUID來配置。 具體如上。

  1. isk /dev/sdb: 5368 MB, 5368709120 bytes 
  2. 255 heads, 63 sectors/track, 652 cylinders 
  3. Units = cylinders of 16065 * 512 = 8225280 bytes 
  4. Sector size (logical/physical): 512 bytes / 512bytes 
  5. I/O size (minimum/optimal): 512 bytes / 512 bytes 
  6. Disk identifier: 0x65edb587 
  7.   
  8.    DeviceBoot      Start         End      Blocks  Id  System 
  9. /dev/sdb1               1         132    1060258+  82  Linux swap / Solaris 
  10.   
  11.   
  12. Disk /dev/sdc: 5368 MB, 5368709120 bytes 
  13. 181 heads, 40 sectors/track, 1448 cylinders 
  14. Units = cylinders of 7240 * 512 = 3706880 bytes 
  15. Sector size (logical/physical): 512 bytes / 512bytes 
  16. I/O size (minimum/optimal): 512 bytes / 512 bytes 
  17. Disk identifier: 0x00000000 
  18.   
  19.    DeviceBoot      Start         End      Blocks  Id  System 
  20. /dev/sdc1               1         291    1053400   82  Linux swap / Solaris 

注意: 使用blkid 查看類型已經變成了swap:

  1. [root@rhce ~]# blkid 
  2. /dev/sda1: UUID="935f7fb2-2ef4-486f-ae4e-265eaf9f580f"TYPE="ext4" 
  3. /dev/sda2:UUID="43343402-9188-4cdc-9c79-0e36ab737517" TYPE="swap" 
  4. /dev/sda3:UUID="7e49fb2c-6fd8-461a-95d9-65d1f3994160" TYPE="ext4" 
  5. /dev/sdb1:UUID="bc913e6b-209a-49a7-b561-9b8c57294681" TYPE="swap" 
  6. /dev/sdc1:LABEL="swap-disk"UUID="799b4379-ca59-4508-ad04-2d18847b3fd9" TYPE="swap" 

這裏的類型已經改變,我們可以嘗試手工的啓動swap 

  1. [root@rhce ~]# swapon /dev/sdc1 
  2. [root@rhce ~]# swapon -s 
  3. Filename                                Type            Size    Used   Priority 
  4. /dev/sda2                               partition       3071992 0       -1 
  5. /dev/sdb1                               partition       1060248 0       -2 
  6. /dev/sdc1                               partition       1053392 0       -3 

 

這裏可以直接啓用swap

 

 

我們這裏把/dev/dbb1和/dev/sdc1都添加/etc/fstab 文件,在重啓一下看看。 添加內容如下:

 

  1. UUID=bc913e6b-209a-49a7-b561-9b8c57294681 swap                    swap    defaults        0 0 
  2. LABEL=swap-disk        swap    swap    defaults        0 0 

 

重啓系統後查看:

  1. [root@rhce ~]# swapon -s 
  2. Filename                                Type            Size    Used   Priority 
  3. /dev/sda2                               partition       3071992 0       -1 
  4. /dev/sdb1                               partition       1060248 0       -2 
  5. /dev/sdc1                               partition       1053392 0       -3 

--對/dev/sdb1 進行測試:

  1. [root@rhce ~]# swapoff /dev/sdb1 
  2. [root@rhce ~]# swapon -s 
  3. Filename                                Type            Size    Used   Priority 
  4. /dev/sda2                               partition       3071992 0       -1 
  5. [root@rhce ~]# swapon /dev/sdb1 
  6. [root@rhce ~]# swapon -s 
  7. Filename                                Type            Size    Used   Priority 
  8. /dev/sda2                               partition       3071992 0       -1 
  9. /dev/sdb1                               partition       1060248 0       -2 

 

2.5 SWAP 分區的刪除

 

    Swapoff 文件之後,刪除掉對應的空間,在從/etc/fstab刪除對應的記錄即可。

 

------------------------------------------------------------------------------------------------------------------------------------------

轉自:

http://blog.csdn.net/tianlesoftware/article/details/8741873

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章