一般来说,如果硬件的配备资源足够的话,那么 swap 应该不会被我们的系统所使用到, swap 会被利用到的时刻通常就是实体内存不足的情况了。从当中,我们知道 CPU 所读取的数据都来自于内存, 那当内存不足的时候,为了让后续的程序可以顺利的运行,因此在内存中暂不使用的程序与数据就会被挪到 swap 中了。 此时内存就会空出来给需要执行的程序载入。由于 swap 是用磁盘来暂时放置内存中的信息,所以用到 swap 时,你的主机磁盘灯就会开始闪个不停啊!

虽然目前(2015)主机的内存都很大,至少都有 4GB 以上啰!因此在个人使用上,你不要设置 swap 在你的 Linux 应该也没有什么太大的问题。 不过服务器可就不这么想了~由于你不会知道何时会有大量来自网络的要求,因此最好还是能够预留一些 swap 来缓冲一下系统的内存用量! 至少达到“备而不用”的地步啊!

现在想像一个情况,你已经将系统创建起来了,此时却才发现你没有创建 swap ~那该如何是好呢? 通过本章上面谈到的方法,你可以使用如下的方式来创建你的 swap 啰!

  • 设置一个 swap partition
  • 创建一个虚拟内存的文件
    不啰唆,就立刻来处理处理吧!

创建 swap 分区的方式也是非常的简单的!通过下面几个步骤就搞定啰:

  • 格式化:利用创建 swap 格式的“mkswap 设备文件名”就能够格式化该分区成为 swap 格式啰
  • 使用:最后将该 swap 设备启动,方法为:“swapon 设备文件名”。
  • 观察:最终通过 free 与 swapon -s 这个指令来观察一下内存的用量吧!
    不啰唆,立刻来实作看看!既然我们还有多余的磁盘容量可以分区,那么让我们继续分区出 512MB 的磁盘分区吧! 然后将这个磁盘分区做成 swap 吧!

    1. 先进行分区的行为啰!

Command (? for help): p
Number Start (sector) End (sector) Size Code Name
6 69220352 70268927 512.0 MiB 8200 Linux swap # 重点就是产生这东西!

Do you want to proceed? (Y/N): y

[root@study ~]# partprobe
[root ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 252:0 0 40G 0 disk
…..(中间省略)…..
`-vda6 252:6 0 512M 0 part # 确定这里是存在的才行!

鸟哥有简化输出喔!结果可以看到我们多了一个 /dev/vda6 可以使用于 swap 喔!

    1. 开始创建 swap 格式
      1. [root@study ~]# mkswap /dev/vda6
      2. Setting up swapspace version 1, size = 524284 KiB
      3. no label, UUID=6b17e4ab-9bf9-43d6-88a0-73ab47855f9d
      4. [root@study ~]# blkid /dev/vda6
      5. # 确定格式化成功!且使用 blkid 确实可以抓到这个设备了喔!

[root ~]# swapon /dev/vda6
[root@study ~]# free
total used free shared buff/cache available
Mem: 1275140 227940 329256 7804 717944 874752
Swap: 1572856 101260 1471596 <==有看到增加了没?

[root ~]# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 1048572 101260 -1
/dev/vda6 partition 524284 0 -2

上面列出目前使用的 swap 设备有哪些的意思!

[root ~]# nano /etc/fstab
UUID="6b17e4ab-9bf9-43d6-88a0-73ab47855f9d" swap swap defaults 0 0

当然要写入配置文件,只不过不是文件系统,所以没有挂载点!第二个字段写入 swap 即可。

7.5.2 使用文件创建swap

如果是在实体分区无法支持的环境下,此时前一小节提到的 loop 设备创建方法就派的上用场啦! 与实体分区不一样的,这个方法只是利用 dd 去创建一个大文件而已。多说无益,我们就再通过文件创建的方法创建一个 128 MB 的内存交换空间吧!

    1. 使用 dd 这个指令来新增一个 128MB 的文件在 /tmp 下面:

这样一个 128MB 的文件就创建妥当。若忘记上述的各项参数的意义,请回前一小节查阅一下啰!

    1. 使用 mkswap 将 /tmp/swap 这个文件格式化为 swap 的文件格式:
      1. [root@study ~]# mkswap /tmp/swap
      2. Setting up swapspace version 1, size = 131068 KiB
      3. no label, UUID=4746c8ce-3f73-4f83-b883-33b12fa7337c
      4. # 这个指令下达时请“特别小心”,因为下错字符控制,将可能使您的文件系统挂掉!
    1. 使用 swapon 来将 /tmp/swap 启动啰!
    1. 使用 swapoff 关掉 swap file,并设置自动启用

    说实话,swap 在目前的桌面电脑来讲,存在的意义已经不大了!这是因为目前的 x86 主机所含的内存实在都太大了 (一般入门级至少也都有 4GB 了),所以,我们的 Linux 系统大概都用不到 swap 这个玩意儿的。不过, 如果是针对服务器或者是工作站这些常年上线的系统来说的话,那么,无论如何,swap 还是需要创建的。

    因为 swap 主要的功能是当实体内存不够时,则某些在内存当中所占的程序会暂时被移动到 swap 当中,让实体内存可以被需要的程序来使用。另外,如果你的主机支持电源管理模式, 也就是说,你的 Linux 主机系统可以进入“休眠”模式的话,那么, 运行当中的程序状态则会被纪录到 swap 去,以作为“唤醒”主机的状态依据! 另外,有某些程序在运行时,本来就会利用 swap 的特性来存放一些数据段, 所以, swap 来是需要创建的!只是不需要太大!