Linux交换空间详解(一)

这是Linux交换空间详解第一部分,要阅读第二部分,请点击Linux交换空间详解(二)

交换空间

Linux把物理内存(physical RAM)分成一块一块的小内存,每一块内存被称为页(page)。当内存资源不足时,Linux把某些页的内容转移至硬盘上的一块空间上,以释放内存空间。硬盘上的那块空间叫做交换空间(swap space),而这一过程被称为交换(swapping)。物理内存和交换空间的总容量就是虚拟内存的可用容量。

交换空间的必要性体现在两个方面。第一,当系统需要的内存大于可用物理内存时,Linux内核把物理内存中不常用的页面内容交换出去(swap out),并把腾出来的内存页面分配给当前需要内存的程序或进程。第二,一个程序启动时有很多内存页面只是用来初始化程序的,之后程序的运行再也不需要这些内存页面。Linux可以把这些内存页面交换出去,腾出空间给其他的程序或作为磁盘缓存。

然而交换也有它的不足之处。硬盘的存取速度相对于内存来说是非常慢的。内存的速度可以用纳秒(nanoseconds)来衡量,而硬盘的速度是用毫秒(milliseconds)衡量的。尽管固态硬盘比机械硬盘在性能上有了大幅提升,但与RAM相比还是要慢很多。另外,在固态硬盘上分出一个交换空间并不是一个好主意。

交换空间(swap space)通常是一个磁盘分区,但也可以是一个文件。我们称前者为交换分区(swap partition),称后者为交换文件(swap file)。用户可以在安装Linux发行版时创建交换空间,也可以安装完成后在任何时间创建。如果用户电脑的物理内存(physical RAM)在1G以下,那么交换空间的创建就很有必要。对于不愁物理内存的用户,比如安装了16G内存,交换空间的创建就属于个人偏好了。需要指出的是,Linux发行版的休眠功能是要用到交换空间的。当Linux执行挂起操作(suspend)时,当前系统的状态保存到内存。而执行休眠操作(hibernate)时,系统的状态保存到交换空间。所以如果用户不创建交换空间,就相当于禁用了休眠。

查看当前系统交换空间的状态,我们可以在终端中输入命令: swapon –show

上图是我的ubuntu系统交换空间状态,第一栏是交换空间的名字;第二栏表明交换空间是以分区的形式存在的;第三栏是交换空间大小;第四栏显示系统已经用了多少交换空间;第五栏是这个交换空间的优先级。

查看交换空间状态的另外一个命令是: free -h

在Linux系统上,所有的东西都被视作文件。Everything is a file on Linux. 所以不管是交换分区还是交换文件,它们都被当作一个文件来处理。交换分区和交换文件在性能上不存在差异。

交换分区(swap partition)

交换分区是硬盘上的一块独立的空间,它只是用来交换的。交换分区内不可以像其他分区一样存放文件。如果硬盘上挂载了两个交换分区,而且它们的优先级相同,那么Linux内核将交替地使用它们地进行交换操作,这将大大改善交换性能。大多数Linux分区工具如fdisk, cfdisk, parted, gparted都可以创建交换分区。如下图,交换分区的ID通常都是82。

要新建一个交换分区,我们可以使用mkswap命令,例如: sudo mkswap /dev/sdb3

mkswap将会擦除指定分区上的所有数据,并为新的交换分区生成一个UUID。如果想要自己指定一个UUID,那么可以使用 -U选项。

sudo mkswap -U custom_UUID /dev/sdb3

用swapon命令启用新的交换分区,如下图。Linux系统开机启动脚本经常调用swapon -a命令来挂载/etc/fstab文件里列出的所有交换空间。

设置开机自动挂载交换分区,编辑/etc/fstab文件。在文件末尾添加如下记录。注意fstab文件要用tab键将各项分开,不要用空格键。如果你的Linux发行版使用systemd,那么不需要在/etc/fstab添加这条记录。

检查交换分区是否会开机自动挂载,我们可以先用swapoff -a命令来关闭所有交换空间,然后用swapon -a命令来挂载所有/etc/fstab文件记录的交换空间,最后执行swapon –show命令。

再次用fdisk命令读取分区表时,你可能会发现新建的交换分区被标注的类型是83,然而82才是交换分区的类型。在这种情况下,我们需要用fdisk工具的 t 命令来修改分区类型。

为这篇文章评分
[Total: 3 Average: 3.3]

Leave a Reply

Your email address will not be published.

The maximum upload file size: 2 MB. You can upload: image, audio, video, document, spreadsheet, interactive, text, archive, code, other. Links to YouTube, Facebook, Twitter and other services inserted in the comment text will be automatically embedded. Drop file here