还记得在安装 Linux 之前大家常常会告诉你的话吧!就是安装时一定需要的两个 partition 啰!一个是根目录,另外一个就是 swap(内存置换空间)。关于内存置换空间的解释在第四章安装 Linux 内的磁盘分区时有约略提过,swap 的功能就是在应付物理内存不足的情况下所造成的内存延伸记录的功能。
一般来说,如果硬件的配备足够的话,那么 swap 应该不会被我们的系统所使用到,swap 会被利用到的时刻通常就是物理内存不足的情况了。从第零章的计算器概论当中,我们知道 CPU 所读取的数据都来自于内存,那当内存不足的时候,为了让后续的程序可以顺利的运行,因此在内存中暂不使用的程序与数据就会被挪到 swap 中了。此时内存就会空出来给需要运行的程序加载。由于 swap 是用硬盘来暂时放置内存中的信息,所以用到 swap 时,你的主机硬盘灯就会开始闪个不停啊!
虽然目前(2009)主机的内存都很大,至少都有 1GB 以上啰!因此在个人使用上你不要配置 swap 应该也没有什么太大的问题。不过服务器可就不这么想了~由于你不会知道何时会有大量来自网络的要求,因此你最好能够预留一些 swap 来缓冲一下系统的内存用量!至少达到『备而不用』的地步啊!
现在想象一个情况,你已经将系统创建起来了,此时却才发现你没有建置 swap ~那该如何是好呢?透过本章上面谈到的方法,你可以使用如下的方式来创建你的 swap 啰!
- 配置一个 swap partition
- 创建一个虚拟内存的文件
不啰唆,就立刻来处理处理吧!
使用实体分割槽建置swap
创建 swap 分割槽的方式也是非常的简单的!透过底下几个步骤就搞定啰:
- 分割:先使用 fdisk 在你的磁盘中分割出一个分割槽给系统作为 swap 。由于 Linux 的 fdisk 默认会将分割槽的 ID 配置为 Linux 的文件系统,所以你可能还得要配置一下 system ID 就是了。
- 格式化:利用创建 swap 格式的『mkswap 装置文件名』就能够格式化该分割槽成为 swap 格式啰
- 使用:最后将该 swap 装置启动,方法为:『swapon 装置文件名』。
- 观察:最终透过 free 这个命令来观察一下内存的用量吧!
不啰唆,立刻来实作看看!既然我们还有多余的磁盘容量可以分割,那么让我们继续分割出 256MB 的磁盘分区槽吧!然后将这个磁盘分区槽做成 swap 吧!
- 1. 先进行分割的行为啰!
[root@www ~]# fdisk /dev/hdc Command (m for help): n First cylinder (2303-5005, default 2303): <==这里按[enter] Using default value 2303 Last cylinder or +size or +sizeM or +sizeK (2303-5005, default 5005): +256M Command (m for help): p Device Boot Start End Blocks Id System .....中间省略..... /dev/hdc6 2053 2302 2008093+ 83 Linux /dev/hdc7 2303 2334 257008+ 83 Linux <==新增的项目 Command (m for help): t <==修改系统 ID Partition number (1-7): 7 <==从上结果看到的,七号partition Hex code (type L to list codes): 82 <==改成 swap 的 ID Changed system type of partition 7 to 82 (Linux swap / Solaris) Command (m for help): p Device Boot Start End Blocks Id System .....中间省略..... /dev/hdc6 2053 2302 2008093+ 83 Linux /dev/hdc7 2303 2334 257008+ 82 Linux swap / Solaris Command (m for help): w # 此时就将 partition table 升级了! [root@www ~]# partprobe # 这个玩意儿很重要的啦!不要忘记让核心升级 partition table 喔! |
- 2. 开始建置 swap 格式
[root@www ~]# mkswap /dev/hdc7 Setting up swapspace version 1, size = 263172 kB <==非常快速! |
- 3. 开始观察与加载看看吧!
[root@www ~]# free total used free shared buffers cached Mem: 742664 684592 58072 0 43820 497144 -/+ buffers/cache: 143628 599036 Swap: 1020088 96 1019992 # 我有 742664K 的物理内存,使用 684592K 剩余 58072K ,使用掉的内存有 # 43820K / 497144K 用在缓冲/缓存的用途中。 # 至于 swap 已经存在了 1020088K 啰!这样会看了吧?! [root@www ~]# swapon /dev/hdc7 [root@www ~]# free total used free shared buffers cached Mem: 742664 684712 57952 0 43872 497180 -/+ buffers/cache: 143660 599004 Swap: 1277088 96 1276992 <==有添加啰!看到否? [root@www ~]# swapon -s Filename Type Size Used Priority /dev/hdc5 partition 1020088 96 -1 /dev/hdc7 partition 257000 0 -2 # 上面列出目前使用的 swap 装置有哪些的意思! |
如果是在实体分割槽无法支持的环境下,此时前一小节提到的 loop 装置建置方法就派的上用场啦!与实体分割槽不一样的只是利用 dd 去建置一个大文件而已。多说无益,我们就再透过文件建置的方法创建一个128 MB 的内存置换空间吧!
- 1. 使用 dd 这个命令来新增一个 128MB 的文件在 /tmp 底下:
[root@www ~]# dd if=/dev/zero of=/tmp/swap bs=1M count=128 128+0 records in 128+0 records out 134217728 bytes (134 MB) copied, 1.7066 seconds, 78.6 MB/s [root@www ~]# ll -h /tmp/swap -rw-r--r-- 1 root root 128M Oct 28 15:33 /tmp/swap |
- 2. 使用 mkswap 将 /tmp/swap 这个文件格式化为 swap 的文件格式:
[root@www ~]# mkswap /tmp/swap Setting up swapspace version 1, size = 134213 kB # 这个命令下达时请『特别小心』,因为下错字节控制,将可能使您的文件系统挂掉! |
- 3. 使用 swapon 来将 /tmp/swap 启动啰!
[root@www ~]# free total used free shared buffers cached Mem: 742664 450860 291804 0 45584 261284 -/+ buffers/cache: 143992 598672 Swap: 1277088 96 1276992 [root@www ~]# swapon /tmp/swap [root@www ~]# free total used free shared buffers cached Mem: 742664 450860 291804 0 45604 261284 -/+ buffers/cache: 143972 598692 Swap: 1408152 96 1408056 [root@www ~]# swapon -s Filename Type Size Used Priority /dev/hdc5 partition 1020088 96 -1 /dev/hdc7 partition 257000 0 -2 /tmp/swap file 131064 0 -3 |
- 4. 使用 swapoff 关掉 swap file
[root@www ~]# swapoff /tmp/swap [root@www ~]# swapoff /dev/hdc7 [root@www ~]# free total used free shared buffers cached Mem: 742664 450860 291804 0 45660 261284 -/+ buffers/cache: 143916 598748 Swap: 1020088 96 1019992 <==回复成最原始的样子了! |
swap使用上的限制
说实话,swap 在目前的壁纸计算机来讲,存在的意义已经不大了!这是因为目前的 x86 主机所含的内存实在都太大了 (一般入门级至少也都有 512MB 了),所以,我们的 Linux 系统大概都用不到 swap 这个玩意儿的。不过,如果是针对服务器或者是工作站这些常年上线的系统来说的话,那么,无论如何,swap 还是需要创建的。
因为 swap 主要的功能是当物理内存不够时,则某些在内存当中所占的程序会暂时被移动到 swap 当中,让物理内存可以被需要的程序来使用。另外,如果你的主机支持电源管理模式,也就是说,你的 Linux 主机系统可以进入『休眠』模式的话,那么,运行当中的程序状态则会被纪录到 swap 去,以作为『唤醒』主机的状态依据!另外,有某些程序在运行时,本来就会利用 swap 的特性来存放一些数据段,所以, swap 来是需要创建的!只是不需要太大!
不过, swap 在被创建时,是有限制的喔!
- 在核心 2.4.10 版本以后,单一 swap 量已经没有 2GB 的限制了,
- 但是,最多还是仅能创建到 32 个 swap 的数量!
- 而且,由于目前 x86_64 (64位) 最大内存寻址到 64GB,因此, swap 总量最大也是仅能达 64GB 就是了!
用大文件试了试,成功了,硬盘因为分区所以...........