swap分区
     分类:系统管理     有: 0 条评论

swap分区

     分类:系统管理     有: 0 条评论

开启、关闭swap分区

Linux中默认是开启了swap分区的,能避免在内存无剩余空间时程序被kill掉的情况;但是一旦内存中的数据写入了到swap分区;系统将异常的缓慢;比存储在物理硬盘上的速度要慢的多。google和facebook貌似已经开发出了可以替代Linux这种内存管理机制的软件了,之前看到过,不过不记得名字了。
这种情况下对于Redis等内存型服务来说,性能急剧下降!有必要时要关闭swap。

关闭swap
不使用交换分区(将swap分区空间设置为0),注意不是禁用。有些服务也要求启用swap服务;所以这里关闭就行了,不是禁用。

# 临时生效
sysctl -w vm.swappiness=0

# 永久生效
echo "vm.swappiness = 0">> /etc/sysctl.conf

# 使规则生效
sysctl -p


刷新swap(关闭再开),如果想关闭就关闭不打开
(将SWAP里的数据转储回内存,并清空SWAP里的数据)
swapoff -a && swapon -a

参考:https://blog.csdn.net/odailidong/article/details/79656188


普通分区转Swap分区

增加Swap分区,适用于系统没有Swap分区,或者有Swap分区但空间很小的情况。

查看有哪些分区:fdisk -l
查看已挂载的分区:df -h
这两条命令可以看出系统有没有多余的没有使用的分区。

查看内存和Swap空间:free -m  -m是以MB为单位显示

           total    used    free    shared  buffers  cached
Mem:    996     928     67      0    215    482
-/+ buffers/cache:   231     765
Swap:           0      0      0

上表中Swap分区大小是0(有Swap分区没有激活,或者根本没有Swap分区),这时我们需要增加Swap空间,有3种方式,都要用root用户操作。

压缩正常的分区,分出小部分转换为Swap分区。

如果是LVM分区,参考:LVM磁盘管理

按照教程分区,特别要注意:调整分区大小lvreduce切割分区后要resize2fs,不然区块不一致,会导致磁盘挂载失败无法启动(默认安装系统时是xfs格式,在切割后可能要重新格式化才能使用,注意/etc/fstab里的挂载参数,保险做法是注释掉/etc/fstab里的相关内容,重启后手动挂载,正常的话再修改/etc/fstab文件。)

找到要要缩小的磁盘,比如/home,先备份/home下的文件

cd /home
tar -zcpv -f /tmp/home.tar.gz ./*

然后卸载/home下的分区,先在终端df -Th一下,记下挂载在/home下的设备名,假设是/dev/sda5。执行命令
umount /homeumount /dev/sda5就卸载了。

如果是LVM分区缩小分区请看:LVM磁盘管理--缩小其他分区扩容根分区;特别是lvm分区,当缩小了其他分区,把容量扩容到swap分区时,用lvdisplay看到的是已经扩容了,但是free -h看到并没有扩大。
这种情况不用重新分区(空间是有的,只是只使用部分,就像硬盘扩容一样,重新格式化就会识别到扩容的部分了):

swapoff /dev/cl/swap   #关闭swap
mkswap /dev/cl/swap    #重新格式化
swapon /dev/cl/swap    #激活swap

如果不是上面这种情况,就按下面的步骤走:
重新分区,执行命令fdisk /dev/sda(lvm分区的话,如fdisk /dev/mapper/cl-swap这样的类型,也是先分区再格式化为ext3,再转换未swap并激活)

注意:如果是lvm从其他分区合并到原来的swap分区,使用lvm合并后,resize2fs,再分区直接使用全部空间就行了。

输入p,查看一下当前的分区表
输入d,删除分区,输入5,删除/dev/sda5
输入n,新建分区,输入+8G,建立一个8G分区
输入n,新建分区,输入起始磁道号,然后输入结束磁道号,把剩余空间再新建一个分区
这时候,会提示要reboot才能读取磁盘分区表,我们不reboot,输入命令partprobe就可以了!

挂载磁盘,恢复/home

tar -zxvf /tmp/home.tar.gz -C /home

把8G空间转换为Swap分区,和下面的内容是一样的。


有未使用的分区或为激活的Swap分区,直接转换为Swap分区激活即可。

这里假设/dev/sda5是空闲空间。如果是lvm分区,且调整过分区,这里一般要先fdisk分区后才能格式化

  1. 格式化分区:mkfs.ext3 /dev/sda5mkfs -t ext3 /dev/sda5会有UUID号,记录下来备用(或者直接使用设备号也是可的)。
  2. 将分区转换成交换分区,格式化交换分区(mkswap):mkswap /dev/sda5
  3. 激活交换分区:swapon /dev/sda5
  4. 现在再free -m看看,Swap分区已经不为0了。
  5. 最后添加开机挂载就行,按格式写好,注意UUID是刚刚记录下来的,或是使用设备号。
UUID=aa65f414-312f-4ec8-aed6-9e0423e87938 none            swap    sw              0       0
/dev/mapper/cl-swap     swap                    swap    defaults        0 0

Swap分区转普通分区

  1. 关闭交换分区(swapoff):swapoff /dev/sda5
  2. 重新格式化分区:mkfs.ext3 /dev/sda5会有UUID号,记录下来备用。
  3. 设置磁盘巻标(自己起个名字):e2label /dev/sda5 swap2
  4. 查看巻标:
e2label /dev/sda5  
swap2
  1. 根据巻标查看硬盘:findfs LABEL=sky
  2. 最后添加开机挂载就行,按格式写好,注意UUID是刚刚记录下来的。
UUID=aa65f414-312f-4ec8-aed6-9e0423e87938 none            swap    sw              0       0

使用交换分区文件进行swap区扩展

dd if=/dev/zero of=/home/new_swap bs=1024 count=1024000    #这里指定一个bs为1M,count一共1024000个,一共1G
mkswap -f  /home/new_swap
swapon  /home/new_swap
echo  '/home/new_swap              swap                    swap    defaults        0 0' >> /etc/fstab

(●゚ω゚●)