一問搞懂swap分區創建及使用

說明

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

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

使用 swap 交換分區,顯著的優點是,通過操作系統的調度,應用程序實際可以使用的內存空間將遠遠超過系統的物理內存。由於硬盤空間的價格遠比 RAM 要低,因此這種方式無疑是經濟實惠的。當然,頻繁地讀寫硬盤,會顯著降低操作系統的運行速率,這也是使用 swap 交換分區最大的限制。
相比較而言,Windows 不會爲 swap 單獨劃分一個分區,而是使用分頁文件實現相同的功能,在概念上,Windows 稱其爲虛擬內存,從某種意義上將,這個叫法更容易理解。因此,初學者將 swap 交換分區理解爲虛擬內存是沒有任何問題的。

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

建立新的 swap 分區,只需要執行以下幾個步驟。
1:分區:不管是 fdisk 命令還是 parted 命令(但用於swap,一般用不着parted),都需要先區;
2:格式化:格式化命令稍有不同,使用 mkswap 命令把分區格式化成 swap 分區;
3:掛載swap分區;
3:激活 swap 分區。

創建swap前提條件

  • 需要有一塊沒有使用完的硬盤【就是一塊物理硬盤需要有剩餘空間未分配】
    查看的方式有很多,我這裏用lsblk說明:
    如下:我的sdb物理硬盤,一共有10G,我才用了不到7G,還有3G可以用。
[root@server0 ~]# lsblk
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda            8:0    0   10G  0 disk 
└─sda1         8:1    0   10G  0 part /
sdb            8:16   0   10G  0 disk 
├─sdb1         8:17   0    5G  0 part 
│ └─vg0-lvm1 253:0    0  772M  0 lvm  
└─sdb2         8:18   0  512M  0 part 
sr0           11:0    1 1024M  0 rom  
[root@server0 ~]# 

  • 查看現在的swap空間:free -lm
[root@server0 ~]# free -lm
             total       used       free     shared    buffers     cached
Mem:           979        892         87         14          0        144
Low:           979        892         87
High:            0          0          0
-/+ buffers/cache:        747        232
Swap:            0          0          0 # 可以看到現在是沒有swap空間的

開始創建swap分區

分區

[root@server0 ~]# fdisk /dev/sdb 【硬盤根據實際情況選擇】
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p【打印】

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x229e658e

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    10487807     5242880   8e  Linux LVM

Command (m for help): n【創建分區】
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p【主分區】
Partition number (2-4, default 2):  【直接回車即可】
First sector (10487808-20971519, default 10487808): 【選擇開始塊,直接回車即可】
Using default value 10487808
Last sector, +sectors or +size{K,M,G} (10487808-20971519, default 20971519): +512M 【自定義大小】
Partition 2 of type Linux and of size 512 MiB is set

Command (m for help): t 【轉換格式】
Partition number (1,2, default 2): 2【選擇硬盤id】
Hex code (type L to list all codes): L【查看所有序號】
 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
 1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx         
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data    
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility   
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt         
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access     
 a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs        
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT            
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor      
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor      
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary  
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS    
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep        
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT            
1e  Hidden W95 FAT1 80  Old Minix      
Hex code (type L to list all codes): 82 【直接輸入序號回車(如82就是swap分區)
Changed type of partition 'Linux' to 'Linux swap / Solaris'

Command (m for help): p【打印,看剛纔修改的id磁盤是否變爲linux swap】

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x229e658e

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    10487807     5242880   8e  Linux LVM
/dev/sdb2        10487808    11536383      524288   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.
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@server0 ~]# 
[root@server0 ~]# partprobe /dev/sdb  #更新硬盤信息
[root@server0 ~]#

格式化

[root@server0 ~]# lsblk   #fdisk –l 也可以看到分區信息
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda            8:0    0   10G  0 disk 
└─sda1         8:1    0   10G  0 part /
sdb            8:16   0   10G  0 disk 
├─sdb1         8:17   0    5G  0 part 
│ └─vg0-lvm1 253:0    0  772M  0 lvm  
└─sdb2         8:18   0  512M  0 part 
sr0           11:0    1 1024M  0 rom  
[root@server0 ~]# mkswap /dev/sdb2  #格式化爲swap,注意分區別搞錯了
Setting up swapspace version 1, size = 524284 KiB
no label, UUID=38f22d84-e4fb-4d6a-b157-48912f761bfe  #無標籤,uuid=…

永久掛載

[root@station ~]# blkid【查看swap對應的分區uuid並複製】 
[root@server0 ~]# vim /etc/fstab  # 最後一行添加下面內容
[root@server0 ~]# tail -n 1 /etc/fstab #添加如下內容
UUID=74bb6046-bf04-49c6-a4a2-d4fb3aebc6b7    swap   swap   defaults 0 0  
[root@server0 ~]#
[root@server0 ~]# mount –a #立即掛載

激活swap分區

激活swap命令:swapon /dev/sd*
如果不激活的話,即使掛載了,swap依然不會生效

[root@server0 ~]# free -l
             total       used       free     shared    buffers     cached
Mem:       1003456     927988      75468      15172        372     160828
Low:       1003456     927988      75468
High:            0          0          0
-/+ buffers/cache:     766788     236668
Swap:            0          0          0

[root@server0 ~]#
[root@server0 ~]# swapon /dev/sdb2 #激活swap
[root@server0 ~]# free –l #激活後swap 就有值了,這樣 swap分區也全部完成
             total       used       free     shared    buffers     cached
Mem:       1003456     928344      75112      15172        376     160888
Low:       1003456     928344      75112
High:            0          0          0
-/+ buffers/cache:     767080     236376
Swap:       524284          0     524284
[root@server0 ~]#

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