說明
我們在安裝系統的時候已經建立了 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 ~]#