2025年3月17日 星期一 甲辰(龙)年 月十六 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 系统应用 > Linux

swap分区扩容操作

时间:02-18来源:作者:点击数:17

最近发现一台服务器的交换分区使用率过高。为了应对这一情况,我翻阅了之前的笔记,对交换分区进行了扩容操作。随后对原有的笔记进行了补充调整。现将这部分内容分享给大家,希望能够对遇到类似问题的朋友们有所帮助。

1. 基本介绍

swap分区是操作系统用于管理内存的一种机制,它允许系统将部分内存数据临时存储到硬盘上的一个特殊区域,从而扩展可用的内存资源。

swap分区的作用主要是为了扩展物理内存和提高系统稳定性。当物理内存(RAM)不足时,操作系统会将一些不常用的数据移到swap分区,释放RAM供更重要的进程使用,实际上就是swap分区提供额外的缓冲,减少系统崩溃的风险。甚至某些操作系统在休眠时会将所有内存状态保存到 swap 分区,以便快速恢复。

  • Swap分区的类型
  • Swap分区:在硬盘上划分出的一个专用分区,通常在系统安装时创建。
  • Swap文件:在文件系统中创建的一个文件,可以动态调整大小,适用于已经分配完所有分区的情况。
  • 查看当前系统中的swap分区及其状态
  • [root@localhost ~]# swapon --show # swapon -s
  • NAME TYPE SIZE USED PRIO
  • /dev/sda2 partition 1.5G 0B -2
  • # 解释显示内容
  • - NAME (/dev/sda2): 表示swap设备的名称。也就是说将这个分区指定为swap分区。
  • - TYPE (partition): 表示swap设备的类型。partition 表示这是一个硬盘分区。其他可能的类型包括 file(表示swap文件)。
  • - SIZE (1.5G): 表示这个swap分区的总大小为1.5GB。这通常是根据系统的需求和硬盘的可用空间来设置的。
  • - USED (0B): 表示当前没有任何数据被交换到这个swap分区。这通常意味着系统有足够的物理内存(RAM),不需要使用swap
  • - PRIO (-2): 表示这个swap分区的优先级为-2。优先级可以是032767之间的整数,数值越大,优先级越高。负值表示较低的优先级。系统会优先使用优先级较高的swap设备。
  • # 或者通过free -m的方式
  • [root@localhost ~]# free -m
  • total used free shared buff/cache available
  • Mem: 972 517 95 7 359 312
  • Swap: 1535 0 1535

2. swap分区的增删

2.1 扩充swap分区(常用)

扩展swap分区可以帮助提高系统的稳定性和性能,特别是在内存资源紧张的情况下,对swap交换分区进行适度扩充能够解决部分问题。但是因为硬盘的访问速度远低于内存,过度依赖swap可能会导致系统性能下降。所以真正遇到这种情况,还是要增加物理内存来缓解压力。

在进行扩充分区操作前需要注意:在高负载的情况下,避免进行 swap 文件的操作,以免影响系统性能,再者就是建议备份重要数据,以防万一。

方法一:通过swap分区文件扩充swap空间
  • 首先需要确保系统中有足够的空间来做swap交换空间。
  • 创建交换文件。根据想要扩展的swap分区大小创建分区文件。
  • # 此处扩展交换分区1G大小
  • # 使用 dd 命令来创建交换文件:
  • dd if=/dev/zero of=/swapfile bs=1G count=1
  • # dd命令:复制文件、转换文件、格式化文本的功能
  • # if:从指定文件中读取
  • # of:写入指定的文件
  • # bs:一次读写的字节数
  • # count:指定复制的Block块数
  • # /dev/zero:0字符设备,可产生特殊的数据流,生成的文件为特殊个数的数据文件。相当于什么都没有。
  • [root@localhost ~]# dd if=/dev/zero of=/swapfile bs=1G count=1
  • 1+0 records in
  • 1+0 records out
  • 1073741824 bytes (1.1 GB) copied, 10.2164 s, 105 MB/s

fallocate -l 1G /swapfile 也可以用来创建分区文件。-l 选项指定要分配的空间大小。但是实际使用时,在一些系统上无法使用 fallocate(比如CentOS 7),所以依然使用 dd 命令进行创建。

  • 设置文件权限。为了确保只有root用户可以读写交换文件,设置适当的文件权限。
  • [root@localhost ~]# chmod 600 /swapfile
  • [root@localhost ~]# ls -l /swapfile
  • -rw------- 1 root root 1073741824 Dec 26 18:00 /swapfile
  • 格式化交换文件。使用 mkswap 命令将文件格式化为交换文件。
  • [root@localhost ~]# mkswap /swapfile
  • Setting up swapspace version 1, size = 1048572 KiB
  • no label, UUID=fa7367c1-6089-46a6-ba36-a01d5f2a86a4
  • 启用交换文件。使用 swapon 命令启用交换文件并进行验证。
  • [root@localhost ~]# swapon /swapfile
  • [root@localhost ~]# swapon --show
  • NAME TYPE SIZE USED PRIO
  • /dev/sda2 partition 1.5G 60.5M -2
  • /swapfile file 1024M 0B -3
  • 固定启用交换文件。为了让交换文件在系统重启后仍然有效,将其添加到 /etc/fstab 文件中。
  • # 内容
  • /swapfile none swap sw 0 0
  • # 参数解释
  • - /swapfile: 设备标识符。指定要挂载的交换文件的路径。
  • - none: 挂载点,对于交换文件,这里通常是 none。
  • - swap: 文件系统类型。表示这是一个交换文件。
  • - sw: 挂载选项。表示这是一个交换文件。
  • - 0: 备份选项,表示不备份。
  • - 0: 文件系统检查顺序,表示不检查。
方法二:通过传统分区增加swap空间
  • 首先,检查当前系统中的swap分区和大小:
  • [root@localhost ~]# swapon --show
  • NAME TYPE SIZE USED PRIO
  • /dev/sda2 partition 1.5G 0B -2
  • 使用 fdisk 工具来创建一个新的分区,将分区类型设置为 Linux swap(82)。
  • [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.
  • Device does not contain a recognized partition table
  • Building a new DOS disklabel with disk identifier 0x4ee527e8.
  • Command (m for help): n
  • Partition type:
  • p primary (0 primary, 0 extended, 4 free)
  • e extended
  • Select (default p): p
  • Partition number (1-4, default 1):
  • First sector (2048-10485759, default 2048):
  • Using default value 2048
  • Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759): +1G
  • Partition 1 of type Linux and of size 1 GiB is set
  • Command (m for help): t
  • Selected partition 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.

创建了一个1G大小的分区。

  • 格式化新分区为swap分区
  • [root@localhost ~]# mkswap /dev/sdb1
  • Setting up swapspace version 1, size = 1048572 KiB
  • no label, UUID=a6161b2c-8804-44b5-a054-89b4d8e0fb38
  • 启用新的swap分区并进行验证。
  • [root@localhost ~]# swapon /dev/sdb1
  • [root@localhost ~]# swapon --show
  • NAME TYPE SIZE USED PRIO
  • /dev/sda2 partition 1.5G 0B -2
  • /dev/sdb1 partition 1024M 0B -3
  • 更新 /etc/fstab 文件进行固化
  • /dev/sdb1 none swap defaults 0 0

2.2 缩减swap分区

虽然增加swap空间可以在一定程度上提高系统稳定性,但过多的swap空间可能会导致系统频繁地将内存页面交换到磁盘,从而降低性能。如果系统经常出现高swap使用率,但实际物理内存使用率并不高,这可能意味着swap空间过大,导致不必要的磁盘I/O操作。在这种情况下,建议适当减少swap空间可以改善系统性能。

方法一:通过swap分区文件缩减swap空间

思路:通过创建启用一个较小的swap文件替换原有的swap分区。

  • 禁用现有的swap分区
  • [root@localhost ~]# swapoff -a
  • 创建一个新的较小的swap文件,如果想将将swap空间减少到1GB,可以创建一个新的1GB的swap文件。这一部分参考swap扩充空间的方法一。
  • 删除旧的swap分区。如果确认新的swap文件已经正常工作,可以删除旧的swap分区。
  • swapoff /dev/sda2

有时执行这一步会报错,重启一下服务器重试一下看看。

  • 最后,检查新的swap状态,确保一切正常
  • [root@localhost ~]# swapon --show
  • NAME TYPE SIZE USED PRIO
  • /swapfile file 1024M 0B -3
方法二:通过传统分区缩减swap空间

思路:通过创建启用一个较小的swap分区替换原有的swap分区。

3. swap分区管理命令

这里对前面用到的 swapon 和 swapoff 命令进行简单说明。

3.1 swapon 命令

swapon 命令用于启用一个或多个交换分区或交换文件。

  • # 基本语法:
  • swapon [选项] [设备]
  • # 启用单个交换分区
  • swapon /dev/sda2
  • # 启用所有列出的交换分区
  • sudo swapon -a
  • # 显示当前激活的交换分区
  • swapon -s
  • # 设置交换分区的优先级
  • swapon -p 10 /dev/sda2

3.2 swapoff 命令

swapoff 命令用于禁用一个或多个交换分区或交换文件。

  • # 基本语法
  • swapoff [选项] [设备]
  • # 禁用单个交换分区
  • swapoff /dev/sda2
  • # 禁用所有列出的交换分区
  • swapoff -a
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐