CentOS 作为Linux世界里最稳定的服务器版本,用来代替商业操作系统RedHat的使用,因为CentOS5是利用rhas5的源码,去掉redhat的商标、图标之后编译发行的,是一个源码编译版本,经历了CentOS 5.2、CentOS 6.x、CentOS 7.x、CentOS 8.x、CentOS Stream滚动发布版本等。

在安装CentOS 5.2的时候,忘设置swap交换分区,在内存较小的情况下,增大swap可提高性能。

配置swap之前,通过 free 和 df 查看 swap 和 磁盘空间情况,目的是通过配置swap后比较变化。

free -m

[root@ithomer ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1008        955         53          0         17        168
-/+ buffers/cache:        769        239
Swap:            0          0          0

df -h

[root@ithomer ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       20G   15G  4.2G  79% /
tmpfs           505M     0  505M   0% /dev/shm
/dev/xvdb       9.9G  5.1G  4.4G  54% /home/data

 

第一步 创建文件块

[homer@homer ~]# cd /var   (进入一个文件夹)

[homer@homer var]# sudo dd if=/dev/zero of=/var/swapfile bs=2048 count=1024000

说明:swap大小一般是内存大小的两倍,例如:物理内存为1GB,则swap应当设为2GB

1024000+0 records in
1024000+0 records out
2097152000 bytes (2.1 GB) copied, 51.9534 s, 40.4 MB/s

参数解释:

dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换

if=文件名:输入文件名,缺省为标准输入

of=文件名:输出文件名,缺省为标准输出

bs:输入输出块的大小,例如:1024表示一块为1KB,2048表示一块为2KB

count: 分配的块大小,例如:1024000表示分配了1M个块,2048000分配了2M个块

计算swap大小的示例:

bs=1024,count=1M,合计 1KB * 1M = 1GB磁盘空间

bs=2048,count=1M,合计 2KB * 1M = 2GB磁盘空间

bs=2048,count=2M,合计 2KB * 2M = 4GB磁盘空间

dd的输出是:
x+y records in
m+n records out

x和m的含义:x和m个完整的块(也就是bs指定的块大小)被读入和写出。
y和n的含义: y和n个不完整的块(部分块)被读入和写出。

1024000+0 records in
1024000+0 records out

表示输入输出为 1024000个完整的块,输入输出为0个不完整的块,即全部是完整的块

 

创建swap文件

[homer@homer var]# sudo /sbin/mkswap /var/swapfile   (创建swap文件,实际上dd已创建,此处不必再创建)

homer@homer-pc:/var$ sudo /sbin/mkswap swapfile
Setting up swapspace version 1, size = 2047996 KiB
no label, UUID=1fdd9f51-165c-462d-9708-e8548fd122d9

[homer@homer var]# ll /var/swapfile 
-rw-r--r-- 1 root root 1048576000 11月 27 00:55 /var/swapfile

修改权限及创建 mkswap

[root@mimvp-bj var]# chmod 0600 /var/swapfile   (只有当前用户可读写swap文件)

[root@mimvp-bj var]# mkswap /var/swapfile 1024000
Setting up swapspace version 1, size = 1023996 KiB
no label, UUID=b51afc6a-5fbf-45de-9287-9a29f2d84f73

[homer@homer var]# sudo  /sbin/swapon /var/swapfile     (激活swap文件)

[homer@homer var]# sudo  /sbin/swapon -s               (检查swap是否正确)

homer@homer-pc:/var$ /sbin/swapon -s
Filename                                Type            Size    Used    Priority
/var/swapfile                           file            2047996 7736    -1
/var/swapfile2                          file            2047996 0       -2

由上可见,创建了两块swap交换区,分别为 /var/swapfile 和 /var/swapfile2,大小分别为2GB

[homer@homer var]# sudo vim  /etc/fstab       (加到fstab文件中让系统引导时自动启动)

在末尾增加以下内容(挂载了两块Swap):

/var/swapfile swap swap defaults 0 0
/var/swapfile2 swap swap defaults 0 0

centos-configure-swap-on-swap-method-01

[homer@homer var]# sudo reboot       (不用重启服务器,也可通过 top 或 htop 查看swap大小)

重启之后,top命令查看,有swap分区的大小了,例如下图 Swap = 1023996k total

centos-configure-swap-on-swap-method-02

free -m    # 查看Swap大小

homer@homer-pc:/var$ free -m
             total       used       free     shared    buffers     cached
Mem:          3690       3532        158        191         43       1323
-/+ buffers/cache:       2165       1524
Swap:         3999        184       3815

df -h   # 查看/dev/xvda1 磁盘少了1GB,被Swap占用了1GB

[root@ithomer ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       20G   16G  3.2G  84% /
tmpfs           505M     0  505M   0% /dev/shm
/dev/xvdb       9.9G  5.1G  4.4G  54% /home/data

根据上面 free 和 df 与配置 swap 之前比较,发现swap由0增加到了999(大约为1GB),而系统主盘(/dev/xvda1)由 4.2G 减小到了 3.2G 大约为1GB,即swap的空间来源于系统主盘(/dev/xvda1

 

总结整理成自动化脚本

vim install_swap_centos.sh

#!/bin/bash
#
# mimvp.com
# create  2014.11.30
# update  2024.06.26


swapfile='/var/swapfile'
swapfile_bs=2048
swapfile_count=2048000  # 4GB
#swapfile_count=4096000  # 8GB


## swap前后观察swap和磁盘大小
function print_free_df() {
    echo -e "\nfree -m"
    free -m
    
    echo -e "\ndf -h"
    df -h
}

## swap新增配置
function install_swap() {
    echo -e "install_swap..."
    
    print_free_df
    
    if [ ! -e "${swapfile}" ]; then
        echo -e "\ndd if=/dev/zero of=${swapfile} bs=${swapfile_bs} count=${swapfile_count}"
        dd if=/dev/zero of=${swapfile} bs=${swapfile_bs} count=${swapfile_count}

        echo -e "\n/sbin/mkswap ${swapfile}"
        /sbin/mkswap ${swapfile}
    
        # 只有当前用户可读写swap文件
        chmod 0600 ${swapfile}
    
        # 激活swap文件
        echo -e "\n/sbin/swapon ${swapfile}"
        /sbin/swapon ${swapfile}

        # 检查swap正确
        echo -e "\n/sbin/swapon -s"
        /sbin/swapon -s
    else
        echo -e "\n${swapfile} exist, no need to create"
    fi
    
    
    # 配置挂载,开机自动启动挂载
    flag=`grep "${swapfile}" /etc/fstab | wc -l`
    if (( $flag <= 0 )); then
        echo -e "\n${swapfile} swap swap defaults 0 0" >> /etc/fstab
    else
        echo -e "\n${swapfile} exist in /etc/fstab, no need to config"
    fi
    
    print_free_df
    
    # 不用重启服务器,也可通过 top 或 htop 查看swap大小
    #reboot
}

install_swap

 

删除swapfile文件

$ rm -f swapfile 
rm: cannot remove ‘swapfile’: Permission denied

原因是删除swapfile文件时,提示权限禁止,正在使用中,需要先卸载swapfile文件

卸载掉swap文件步骤:

1)注释掉/etc/fstab里的挂载

vim /etc/fstab

#/var/swapfile swap     swap     defaults     0   0
#/var/swapfile2 swap     swap     defaults     0   0

2)卸载掉swap文件:/sbin/swapoff /var/swapfile    (删除swap前,一定要先卸载

3)sudo  -s  切换到root权限rm -f swapfile (删除成功)

查看验证注释/etc/fstab文件:

cat /etc/fstab

LABEL=/     /           ext4    defaults,noatime  1   1
tmpfs       /dev/shm    tmpfs   defaults        0   0
devpts      /dev/pts    devpts  gid=5,mode=620  0   0
sysfs       /sys        sysfs   defaults        0   0
proc        /proc       proc    defaults        0   0
#/var/swapfile swap     swap     defaults     0   0
#/var/swapfile2 swap     swap     defaults     0   0

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       16G  6.2G  9.5G  40% /
devtmpfs        489M   56K  489M   1% /dev
tmpfs           498M     0  498M   0% /dev/shm

 

/etc/fstab 文件详解

fstab中存放了与分区有关的重要信息,其中每一行为一个分区记录,每一行又可分为六个部份:

1. 第一项是想要mount的储存装置的实体位置,如//var/swapfile2

2. 第二项就是您想要将其加入至哪个目录位置,如/home或/,这其实就是在安装时提示的挂入点

3. 第三项就是所谓的local filesystem,其包含了以下格式:如ext、ext2、msdos、iso9660、nfs、swap等,或如ext2,可以参见/prco /filesystems说明

4. 第四项就是您mount时,所要设定的状态,如ro(只读)或defaults(包括了其它参数如rw、suid、exec、auto、nouser、 async),可以参见mount nfs

async/sync

设置是否为同步方式运行,默认为async

auto/noauto

 当下载mount -a 的命令时,此文件系统是否被主动挂载。默认为auto

rw/ro

 是否以以只读或者读写模式挂载

exec/noexec

 限制此文件系统内是否能够进行"执行"的操作

user/nouser

是否允许用户使用mount命令挂载

suid/nosuid

是否允许SUID的存在

usrquota

启动文件系统支持磁盘配额模式

grpquota

启动文件系统对群组磁盘配额模式的支持

defaults

同时具有rw,suid,dev,exec,auto,nouser,async等默认参数的设置

5. 第五项是提供DUMP功能,在系统DUMP时是否需要备份BACKUP的标志位,其内定值是0

0

代表不要做dump备份

1

代表要每天进行dump的操作

2

代表不定日期的进行dump操作

6. 第六项是设定此filesystem是否要在开机时做check的动作,除了root的filesystem其必要的check为1之外,其它皆可视需要 设定,内定值是0

0

不要检验

1

最早检验(一般根目录会选择)

2

1级别检验完成之后进行检验

 

问题与解决

1、格式化及启动swap文件

接下来执行mkswap命令,将myswap文件格式化成s文件系统,系统才能使用,切换到/tmp目录,并执行以下命令:

# mkswap swapfile (将文件格式化为swap文件格式)

setting up swapspace version 1 , size = 262144 KB

# swapon /var/swapfile (#启动swap分区)

要停止使用新创建的swap文件,只要执行 swapoff /tmp/swapfile命令即可,如果swap交换文件不再使用,可以删除此文件。

2、检查swap

#/sbin/swapon -s

3、 开机时自动启动新添加的swap分区

如果每次开机后都要执行swapon命令启动swap分区或者文件,这太麻烦了.

这时可以利用文字编辑器在/etc/fstab文件加一行,好让开机时自动启动swap分区及文件:

/dec/hdb5 swap swap defaults 0 0 (开机时启动此swap分区)

/var/swapfile swap swap defaults 0 0 (开机时启动此swap文件) .

4、 swap空间大小

通常情况下,Swap空间应大于或等于物理内存的大小,最小不应小于64M,通常Swap空间的大小应是物理内存的2-2.5倍

但根据不同的应用,应有不同的配置:如果是小的桌面系统,则只需要较小的Swap空间,而大的服务器系统则视情况不同需要不同大小的Swap空间。特别是数据库服务器和Web服务器,随着访问量的增加,对Swap空间的要求也会增加,具体配置参见各服务器产品的说明。

5、 swap数量

Swap分区的数量对性能也有很大的影响。

因为Swap交换的操作是磁盘IO的操作,如果有多个Swap交换区,Swap空间的分配会以轮流的方式操作于所有的Swap,这样会大大均衡IO的负载,加快Swap交换的速度。

如果只有一个交换区,所有的交换操作会使交换区变得很忙,使系统大多数时间处于等待状态,效率很低。用性能监视工具就会发现,此时的CPU并不很忙,而系统却慢。这说明,瓶颈在IO上,依靠提高CPU的速度是解决不了问题的。

 

 

参考推荐

CentOS 开机自动挂载硬盘

Linux mount NFS命令

Linux NFS 服务的详细配置