说明
我们在安装系统的时候已经建立了 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 ~]# swapon -a #立即挂载
swap属于特殊文件,mount -a
是不会自动挂载的,需要输入swapon -a
才会自动挂载
激活swap分区
- 注:如果上面永久挂载中执行了
swapon -a
后,忽略该步骤! - 激活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 ~]#
另一种方式设置swap
swa管理pswap–交换分区—虚拟内存 —不过已经被淘汰了
可以手动设置交换分区大小,交换分区就是当实际物理内存不够用了,会临时调用swap分区。
查看交换分区大小:swapon -s / cat /proc/swaps
也可以自定义某分为为swap分区,但需要提前划分类型为swap, fdisk -l 设备名称 查看:
mkswap 设备名
:设置swap交换分区
swapon 设备名
:刷新交换分区
swaoff 设备名
:卸载分区
swapon -p 优先级数 设备名
:定义优先级并挂载(需要先卸载)
上述是临时挂载,永久挂载需要把信息写入到/etc/fstab
中 保存后输入swapon -a
自动挂载:
注:swap属于特殊文件,mount -a
是不会自动挂载的,需要输入swapon -a
才会自动挂载
如果电脑中已经没有更多的分区可以划分为交换分区了:可以创建一个文件,使用该文件作为交换分区:如在根目录下创建一个自定义名称用于当做交换分区文件:
给刚才创建的文件赋予600权限:chmod 600 /swapfile
挂载并刷新即可: