1.什么是交换分区
Linux中交换分区swap,类似于Windows的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。并不是所有从物理内存中交换出来的数据都会被放到Swap中,有相当一部分数据被直接交换到文件系统。但是那些用malloc和new函数生成的对象的数据需要Swap空间,因为它们在文件系统中没有相应的“储备”文件,因此被称作“匿名”(Anonymous)内存数据,这类数据还包括堆栈中的一些状态和变量数据等。所以说,Swap空间是“匿名”数据的交换空间。
那么swap一般设置多大呢?这没有具体的规定,要看实际使用中对swap分区依赖的需求,有的场景可能都不需要swap分区,分区大了只会浪费硬盘的空间资源。
查看swap的大小和使用情况
free -m ,可以加上h参数显示更直观,单位是MB。
[root@linux Desktop]# free -m
total used free shared buffers cached
Mem: 3939 921 3017 9 0 279
-/+ buffers/cache: 641 3297
Swap: 2047 0 2047
top,类似于windows的任务管理器的程序,ctrl+c退出, 单位是KB。
swapon -s,cat /proc/swaps,单位KB。
[root@linux Desktop]# swapon -s
文件名 类型 大小 已用 权限
/dev/dm-1 partition 2097148 0 -1
[root@linux Desktop]# cat /proc/swaps
Filename Type Size Used Priority
/dev/dm-1 partition 2097148 0 -1
2.关闭和开启swap
使用swapoff -a命令关闭所有swap分区,或者使用路径关闭具体swap。
[root@linux Desktop]# swapoff -a
[root@linux Desktop]# free -m
total used free shared buffers cached
Mem: 3939 924 3014 9 0 279
-/+ buffers/cache: 644 3295
Swap: 0 0 0
使用swapon -a命令开启所有swap分区。
[root@linux Desktop]# swapon -a
[root@linux Desktop]# free -m
total used free shared buffers cached
Mem: 3939 926 3013 9 0 279
-/+ buffers/cache: 645 3293
Swap: 2047 0 2047
3.缩小swap分区
a.缩小swap分区就是缩小对应swap分区逻辑卷的大小,前文第8章写过使用lvreduce命令缩小逻辑卷。
查看swap逻辑卷的位置
[root@linux Desktop]# swapon -s
文件名 类型 大小 已用 权限
/dev/dm-1 partition 2097148 0 -1
b.关闭swap交换分区
[root@linux Desktop]# swapoff /dev/dm-1
[root@linux Desktop]# free -m
total used free shared buffers cached
Mem: 3939 924 3014 9 0 279
-/+ buffers/cache: 643 3295
Swap: 0 0 0
c.缩小/dev/dm-1分区,发现报错了。
[root@linux Desktop]# lvreduce -L 1G /dev/dm-1
Path required for Logical Volume "dm-1"
Please provide a volume group name
Run `lvreduce --help' for more information.
原来lvm会把每个lv连接到一个/dev/dm-x的设备档,这个设备档并不是一个真正的磁盘,所以不会有分区表存在,不能把dm设备分区。dm-0, dm-1的实体可以使用dmsetup ls和dmsetup info 命令来查看dm设备(lvm)映射情况,可以看到主设备号,次设备号。
[root@linux Desktop]# dmsetup ls
rhel-swap (253:1)
rhel-root (253:0)
dm-0对应的是root目录,dm-1对应的是swap目录,所以我们实际需要缩小的是/dev/rhel/swap分区。
[root@linux Desktop]# lvreduce -L 1G /dev/rhel/swap
WARNING: Reducing active logical volume to 1.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce swap? [y/n]: y
Reducing logical volume swap to 1.00 GiB
Logical volume swap successfully resized
e.使用mkswap重新格式化swap分区,开启swap交换分区,看到swap分区只有1G空间了。
[root@linux Desktop]# mkswap /dev/rhel/swap
mkswap: /dev/rhel/swap: warning: wiping old swap signature.
正在设置交换空间版本 1,大小 = 1048572 KiB
无标签,UUID=816f10ef-f8ac-43aa-8471-4f35c6f2c322
[root@linux Desktop]# swapon /dev/mapper/rhel-swap
[root@linux Desktop]# free -m
total used free shared buffers cached
Mem: 3939 935 3003 9 0 280
-/+ buffers/cache: 654 3285
Swap: 1023 0 1023
4.扩大swap分区
扩大swap分区有两个方法,第一是直接扩容原来的swap分区,第二是重新划分一个新的分区加入到swap交换分区中。
4.1扩容swap分区
先查看vg卷组中还有多少空间
[root@linux Desktop]# vgdisplay
--- Volume group ---
VG Name rhel
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 7
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 19.51 GiB
PE Size 4.00 MiB
Total PE 4994
Alloc PE / Size 4738 / 18.51 GiB
Free PE / Size 256 / 1.00 GiB
VG UUID 9kJ1ti-wPVy-l2jN-xRyj-GUSU-YbJ2-8TcULW
可以看到vg卷组有上一节缩容出来的1G空间,全部划分到swap中。先关闭swap交换分区。
[root@linux Desktop]# swapoff -a
[root@linux Desktop]# lvextend -L 2G /dev/rhel/swap
Extending logical volume swap to 2.00 GiB
Logical volume swap successfully resized
[root@linux Desktop]# mkswap /dev/rhel/swap
mkswap: /dev/rhel/swap: warning: wiping old swap signature.
正在设置交换空间版本 1,大小 = 2097148 KiB
无标签,UUID=f69e5ca2-9387-4084-9043-ea87aea5e460
[root@linux Desktop]# swapon -a
[root@linux Desktop]# free -m
total used free shared buffers cached
Mem: 3939 937 3001 9 0 280
-/+ buffers/cache: 656 3283
Swap: 2047 0 2047
4.2划分新分区
a.在新硬盘上划分2GB的空间,创建主分区直接加入到swap交换分区,也可以划分LVM逻辑卷。
[root@linux Desktop]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x5a7f40d0 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+2G
分区 1 已设置为 Linux 类型,大小设为 2 GiB
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
b.在/dev/sdb上划分了一个2GB的/dev/sdb1的主分区,格式化并使用swapon命令加入到swap分区。
[root@linux Desktop]# mkswap /dev/sdb1
正在设置交换空间版本 1,大小 = 2097148 KiB
无标签,UUID=3b180922-2818-4765-a3c9-34cc1ae89e27
[root@linux Desktop]# swapon /dev/sdb1
[root@linux Desktop]# free -m
total used free shared buffers cached
Mem: 3939 943 2995 9 0 280
-/+ buffers/cache: 662 3277
Swap: 4095 0 4095
c.要新增的swap分区不在重启后失效,需要将挂载信息写入/etc/fstab。
[root@linux Desktop]# echo /dev/sdb1 swap swap defaults 0 0 >> /etc/fstab