linux系统的swap,主要是应付物理内存不足的情况下所造成的内存扩展记录的功能,类似于windows的虚拟内存。

创建swap有两种方式:

  • 设置一个swap分区
  • 创建一个虚拟内存的文件

一、方法一:使用物理分区构建swap

1.在硬盘上创建一个新分区

用fdisk新创建一个空间为内存1.5-2倍的分区,并将该分区的type改成82(Linux swap / Solaris),保存退出。然后用命令partprobe让内核更新分区表。

2.构建swap格式

$ mkswap /dev/sdb3    #假设刚才创建的分区为/dev/sdb3
`</pre>

稍等一会会开到如下的提示,表示已经构建成功:

<pre>`Setting up swapspace version 1, size = 262140 KiB
no label, UUID=103c4545-5fc5-47f3-a8b3-dfbdb64fd7eb
`</pre>

3.查看和加载swap

加载swap

<pre>`$ swapon /dev/sdb3
`</pre>

查看swap使用情况

<pre>`bubble@s225:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          7984       7063        921          1         53       5432
-/+ buffers/cache:       1577       6407
Swap:         8191          0       8191
bubble@s225:~$ cat /proc/swaps 
Filename                Type        Size    Used    Priority
/dev/sdb2                               partition   8388604 0   -1
`</pre>

列出当前使用的swap设备

<pre>`bubble@s225:~$ swapon -s
Filename                Type        Size    Used    Priority
/dev/sdb2                               partition   8388604 0   -1
`</pre>

# 二、方法二:使用文件构建swap

如果是在物理分区无法支持的情况下,可以用loop设备构建swap。与物理分区不一样的只是利用dd创建一个大文件而已。

关于loop设备构建方法可以点此传送门查看:特殊设备loop挂载

## 1.使用dd命令在 / 根目录创建一个swap文件

<pre>`$ dd if=/dev/zero of=/swap bs=1M count=4096    #创建一个4096MB的文件
`</pre>
> dd if=/dev/zero of=/swap bs=1M count=4096 参数说明
#这个命令的意义如下:

#if 是input file,输入文件,/dev/zero是会一直输出0的设备

#of 是output file,输出文件,将一堆0写入后面的/swap文件

#bs 是每个block大小,就像文件系统的block

#count 则是总共多少个bs的意思。
## 2.使用mkswap将/swap文件格式化为swap的文件格式

<pre>`$ mkswap /swap    #使用该命令时一定要注意上面dd创建的文件大小,否则整个文件系统就挂了
`</pre>

## 3.启动swap

<pre>`$ swapon /swap
`</pre>

## 4.设置swap文件访问权限

<pre>`$ chown root:root /swap
$ chmod 600 /swap
`</pre>

# 三、设置开机自动挂载swap文件

修改/etc/fstab文件

<pre>`# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# &lt;file system&gt; &lt;mount point&gt;   &lt;type&gt;  &lt;options&gt;       &lt;dump&gt;  &lt;pass&gt;
# / was on /dev/sdc1 during installation
UUID=66f8c01a-7f73-4ff9-b835-9fe2ae5dd16a /               ext4    errors=remount-ro 0       1
# /home was on /dev/sdb1 during installation
UUID=6afe4fd8-4fed-4c70-9289-39fcba99b587 /home           ext3    defaults        0       2
# swap was on /dev/sdb2 during installation 最后一行就是自动挂载swap分区的
UUID=c2f5e3c1-7b10-42e1-a86b-04b90b4720ba none            swap    sw              0       0
`</pre>

# 四、修改swappiness参数,提高swap交换区性能

<pre>`echo 0 | sudo tee /proc/sys/vm/swappiness
echo vm.swappiness = 0 | sudo tee -a /etc/sysctl.conf #设置为0后,swap仅在内存不足的时候才会使用,这样可以提高性能。