系统目录扩容、swap

一、缩减home分区给其他分区

起初服务器当初考虑不周,分区划分不太合理

将/home磁盘空间缩减  并将新的磁盘分区扩充到/根目录

卸载/home分区并压缩分区

卸载/home时 提示目标忙,fuser -m /home查看谁用/home时提示没有fuser命令

# umount /home
umount: /home:目标忙。

(有些情况下通过 lsof(8) 或 fuser(1) 可以找到有关使用该设备的进程的有用信息)

fuser -m /home   //继续查找谁在用/home
。。。

kill -9 11757    //停止进程

umount /home    //卸载/home文件系统

压缩分区

resize2fs -p /dev/mapper/centos-home 100G

确认是xfs格式系统

cat /etc/fstab|grep centos-home

xfs文件系统扩容必须安装xfsdump工具

yum install xfsdump -y

减少/home空间到100GB,增大根目录,延伸/目录空间

然后重新挂载/home

# mount /home

mount: /dev/mapper/centos-home:不能读超级块

必须格式化/home分区,才能挂载----所以缩减/home分区之前必须备份/home的内容(切记!!!)

重新挂载mount /home即可

二、增加交换分区的两种方式

方法一:

1. 准备分区(准备将/dev/sde磁盘,划分为1G分区)
[root@server0 ~]# fdisk    /dev/sde (t转换分区的ID 82)
[root@server0 ~]# partprobe /dev/sde
[root@server0 ~]# ll /dev/sde*
brw-rw----. 1 root disk 253, 16 12月 6 10:18 /dev/sde
brw-rw----. 1 root disk 253, 17 12月 6 10:18 /dev/sde1

2.格式化
[root@server0 ~]# mkswap /dev/sde1

3.挂载
[root@server0 ~]# blkid /dev/sde1(查看UUID号)
/dev/sde1: UUID="ea5b1c77-e540-463c-9644-0d75450f8b4c" TYPE="swap"
[root@server0 ~]# vim /etc/fstab(挂载)
UUID="ea5b1c77-e540-463c-9644-0d75450f8b4c"   swap   swap   defaults  0 0
[root@server0 ~]# swapon -a (读取/etc/fstab)
[root@server0 ~]# swapon -s
Filename Type Size Used Priority
/dev/vdb1 partition 524284 0 -1

方法二:

# dd if=/dev/zero of=/tmp/swap bs=1M count=8192           //创建8192M的文件块
# mkswap /tmp/swap                                        //创建swap文件
# swapon /tmp/swap                                        //激活swap文件
执行以上命令可能会出现:“不安全的权限 0644,建议使用 0600”类似提示,不要紧张,实际上已经激活了,可以忽略提示,也可以听从系统的建议修改下权限。
# swapon -s                                               //查看swap
修改/etc/fstab文件,增加以下内容,让系统引导时自动启动
# vi /etc/fstab                                           //在最后添加下面代码
/tmp/swap           swap        swap    defaults      0 0

关闭交换分区

sync命令用于数据同步,sync命令是在关闭Linux系统时使用的。

Linux 系统中欲写入硬盘的资料有的时候为了效率起见,会写到 filesystem buffer 中,这个 buffer 是一块记忆体空间,如果欲写入硬盘的资料存于此 buffer 中,而系统又突然断电的话,那么资料就会流失了,sync 指令会将存于 buffer 中的资料强制写入硬盘中。

sudo sync && sudo swapoff -a
sudo sed  '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

查询占用swap分区的进程

$ for i in $( cd /proc;ls |grep "^[0-9]"|awk ' $0 >100') ;do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps 2>/dev/null ; done | sort -k2nr | head -10
1635 0.253906M
1634 0.0429688M
1001 0M
101 0M
1018 0M
102 0M
103 0M
1043 0M

ps  -p  进程id

查看指定进程所使用的swap命令: 

awk '/^Swap:/ {SWAP+=$2}END{print SWAP" KB"}' /proc/$(pid)/smaps  

查看所有进程占用情况swap的脚本:

#!/bin/bash  
      
    function getswap {  
    SUM=0  
    OVERALL=0  
    for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do  
    PID=`echo $DIR | cut -d / -f 3`  
    PROGNAME=`ps -p $PID -o comm --no-headers`  
    for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'`  
    do  
    let SUM=$SUM+$SWAP  
    done  
    echo "PID=$PID - Swap used: $SUM - ($PROGNAME )"  
    let OVERALL=$OVERALL+$SUM  
     SUM=0  
      
    done  
    echo "Overall swap used: $OVERALL"  
    }  
      
    getswap  
    #getswap|egrep -v "Swap used: 0"  

vm.swappiness取值范围 0~100。值越大,swap用得越厉害。

1.临时修改:
sudo sysctl vm.swappiness=100

立即生效,不需要重启

设置/proc/sys/vm/swappiness=0,不过这就禁用了所有进程使用swap

2.永久修改:
打开sysctl.conf
sudo gedit /etc/sysctl.conf
查找vm.swappiness,如果找不到,则加入一行shu:
vm.swappiness=30

三、swap分区查看与调整

http://www.360doc.com/content/14/0725/06/11722185_396868770.shtml

四、对交换分区调优

1、关于swap优先级

 swap分区的优先级(Priority)从高到低依次使用,最高32767,最低优先级是0

这样设置使得Linux并行的使用优先级相同的swap分区(Priority = 1的分区),这会大幅的提高对swap的读写。当这些分区满了,就会使用较低优先级swap分区(Priority = 0的分区)

2、设置swap优先级

多个交换分区分布在不同的磁盘
挂载时,使用相同的优先级

# vim /etc/fstab

UUID="ea5b1c77-e540-463c-9644-0d75450f8b4c" swap swap defaults,pri=1 0 0
UUID="ea5b1c77-e540-465c-9644-0d75457f8b45" swap swap defaults,pri=1 0 0

pri是优先级的意思,设置相同即可。

# swapon -a
# swapon -s
Filename Type Size Used Priority
/dev/sdb1 partition 524284 0 1
/dev/sdc1 partition 524284 0 1

注:当内存不大(4G左右),交换分区应做成内存2倍

posted @ 2019-08-03 17:42  凡人半睁眼  阅读(430)  评论(0编辑  收藏  举报