[TOC]
### **创建swap分区**
linux中的交换分区类似于windows中的虚拟内存。当物理内存已经被用完时,如果我们再起一个新的进程,那么就会出现内存不足。此时,系统可以把没有活动的某个进程在内存中的内容置换到磁盘的某个空间下,这样新的进程就有内存可用。这个磁盘空间可以是一个交换分区,也可以是一个文件(因为文件也会战占用磁盘空间的大小),一般我们使用的是交换分区。
接下来,我们来看一下如何创建一个交换分区并且使用它。我们的初始条件如下,磁盘`/dev/sdb`下已经有了一个大小为50G的主分区`/dev/sdb1`
```
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 1 837G 0 disk
├─sda1 8:1 1 50G 0 part /
└─sda2 8:2 1 787G 0 part
sdb 8:16 1 223.4G 0 disk
├─sdb1 8:17 1 50G 0 part
└─sdb2 8:18 1 173.4G 0 part
```
接着,我们把该分区的类型转换为Linux Swap类型。执行命令`fdisk /dev/sdb`,然后输入命令t,然后输入1选择分区`/dev/sdb1`,然后输入82(表示Linux Swap类型),然后输入w保存与退出。
```
[root@localhost ~]# 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): t
Partition number (1,2, default 2): 1
Hex code (type L to list all codes): 82
Changed type of partition 'Linux' to 'Linux swap / Solaris'
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
```
然后执行partprobe,再查看分区情况,发现`/dev/sdb1`已经变成了Linux Swap类型
```
[root@localhost ~]# partprobe
[root@localhost ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 239.9 GB, 239902654464 bytes, 468559872 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: 0x93de47a2
Device Boot Start End Blocks Id System
/dev/sdb1 2048 104859647 52428800 82 Linux swap / Solaris
/dev/sdb2 104859648 468559871 181850112 83 Linux
```
接下来我们使用mkswap命令将`/dev/sdb1`格式化为swap文件系统,然后使用命令blkid查看分区的文件系统类型。可以看出,`/dev/sdb1`已经是swap类型的文件系统了。下面的输出中有两点需要注意:
(1)mkswap命令的输出中有wiping old xfs signature,这是因为/dev/sdb1之前已经被格式化为xfs类型的系统了;
(2)blkid命令的输出中没有看到/dev/sda2与/dev/sdb2,这是因为这两个分区还没有被格式化为某种类型的文件系统。
```
[root@localhost ~]# mkswap /dev/sdb1
mkswap: /dev/sdb1: warning: wiping old xfs signature.
Setting up swapspace version 1, size = 52428796 KiB
no label, UUID=5a24c22c-f06f-47b3-a85e-de9168d03d4e
[root@localhost ~]# blkid
/dev/sda1: UUID="da3cfe99-417c-4e06-b652-22171c0c340a" TYPE="xfs"
/dev/sdb1: UUID="5a24c22c-f06f-47b3-a85e-de9168d03d4e" TYPE="swap"
```
接下来,我们便可以使用命令swapon激活swap分区`/dev/sdb1`,然后使用命令`swapon -s`或`cat /proc/swaps`查看已经激活的swap分区及大小(`swapon -s`实际上就是读取文件`/proc/swaps`中的内容)。发现`/dev/sdb1`已经开启了。至于大小为什么变成了49G少了1G,这个暂时还不清楚。
```
[root@localhost ~]# swapon /dev/sdb1
[root@localhost ~]# swapon -s
Filename Type Size Used Priority
/dev/sdb1 partition 52428796 0 -1
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 125G 1.5G 118G 20M 5.2G 123G
Swap: 49G 0B 49G
```
当然,使用`swapon /dev/sdb1`命令可以激活swap分区,但是主机重启后该分区又会处于非激活状态。要想实现主机重启后自动激活swap分区`/dev/sdb1`,需要在`/etc/fstab`文件中添加如下一行
```
/dev/sdb1 swap swap defaults 0 0
```
### **关闭swap分区**
如果要关闭swap分区`/dev/sdb1`,执行命令`swapoff /dev/sdb1`即可。如果要关闭所有的swap分区,执行命令`swapoff -a`。关闭后,我们使用命令`cat /proc/swaps`查看开启的swap分区,发现已经没有了。
```
[root@localhost ~]# swapoff -a
[root@localhost ~]# cat /proc/swaps
Filename Type Size Used Priority
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 125G 1.5G 118G 20M 5.2G 123G
Swap: 0B 0B 0B
```
如果我们在`/etc/fstab`设置了swap分区的相关行,那么我们执行swapoff -a只会暂时关闭swap分区,主机重启后又会开启。所以要彻底关掉swap分区,需要注释或删除`/etc/fstab`文件中包含swap的所有行。
### **回收swap分区**
如果我们不想要swap分区,想把它回收作为一个普通的主分区使用。那么,我们可以按照以下的步骤来回收。首先,关闭激活的swap分区,删除/etc/fstab中含有swap的行;然后,使用fdisk命令将该分区转换为Linux(83)类型的分区或者直接使用fdisk命令删除这个分区。
### **Reference**
* https://blog.csdn.net/ITlinuxP/article/details/78785079
- 常用命令
- 用户与用户组
- 创建用户与用户组
- 快速脚本
- umask
- Yum源
- 基础Yum源
- Epel源
- 制作Yum源
- 同步Yum源
- 为Yum源配置代理
- 下载RPM及依赖
- 系统与内核
- 获取内核的rpm包
- 升级内核
- Iptables
- 基本语法
- 匹配条件
- 基础匹配条件
- 扩展匹配条件
- Addrtype
- Set
- TCP
- Mark
- Multiport
- 目标
- 基本目标
- 扩展目标
- DNAT
- LOG
- CT
- NOTRACK
- MARK
- IP set
- 连接追踪
- 初识连接追踪
- 连接追踪详解
- NAT
- 思路与参考汇总
- 数据结构
- FAQ
- Keepalived
- 单网卡多VIP
- 安装Keepalived
- 双网卡绑VIP
- 别名VIP和辅助VIP
- LVS
- 安装LVS
- Ipvsadm命令
- 磁盘与分区
- 基础知识
- 创建分区
- 格式化与挂载
- Fstab
- LVM
- LVM扩容
- Swap分区
- Tmpfs
- 网络相关
- 重命名网卡
- resolv.conf
- Tcpdump
- nslookup与dig
- ifcg-xxx
- 主机名
- 软件安装
- NFS
- Squid
- Redsocks
- Shadowsocks
- 时钟同步
- Chrony
- FTP
- 文件句柄
- 简介
- 设置文件句柄
- 其他
- SSH密钥登录
- 进程组-会话-终端
- X11转发
- 环境变量
- 常见问题
- 系统进程数
- 系统调用
- 系统调用FAQ
- 用户程序如何进行系统调用