Linux交换分区 Swap 虚拟内存 理解虚拟内存

SWAP分区是Linux的交换分区。交换分区实际存在于磁盘中,不过Linux系统可以将它当作内存使用,当物理真实内存不足的时候交换分区就可以和真实内存进行数据交换。简单地说就是从磁盘里拿出一块空间当作内存的储备区。虽说磁盘被拿来当作内存使用,但是速度还是磁盘的速度。可以想象下面一种日常生活的场景:

当你工作的时候一定是把桌洞里的东西拿出来放到桌面上,并且手里拿着一部分东西在操作,然后桌面和桌洞里的东西在不断的交换你手里的东西和桌面上的东西也一直在交换。
可以这么想:你从桌洞里拿出来了一本《5年高考3年模拟——理综》放到桌面上,然后拿起笔开始刷题。后来你又从桌洞里拿出来了一本《5年高考3年模拟——数学》放到桌面上,准备两本一起写(就是这么屌),写一题理综写一题数学。再后来你又想同时写语文,但是你发现你的桌面上已经没有了那么大的空间,就只能把语文放到桌洞里,每次拿出来语文就要把数学或是理综放到桌洞中。
计算机实际上是这样。从磁盘中打开了一个程序(一本书),操作系统就(另一个人)把这个程序运行起来放到内存中(放到桌面上),CPU将(部分)程序加载到寄存器中(拿起笔开始做题)。然后又运行了一个程序,CPU就在这两个程序之间切换(做完一题数学就换一题理综)。再运行一个程序,发现内存不足(桌面不够用了)就将内存和磁盘中的交换分区开始交换(把语文放到桌洞里,每次拿出来语文就要把数学或是理综放到桌洞中)

0X00 创建一个分区 || 创建一块文件

要想创建swap分区可以有两种分配空间的方式,一种是直接从磁盘中分出来一块用来当做swap分区,然后格式化为swap格式

1
2
# 对磁盘sdb进行分区
fdisk /dev/sdb

在提示符下输入n 然后会提示p 或 e的选项,P就是主分区,只能创建4个, e就是逻辑分区,不限个数。
我们创建一个逻辑分区就行。然后会提示新分区的起始扇区,使用默认的就好,直接回车
接下来是终止扇区,这里支持直接输入扇区号和输入大小两种方式,我们普遍直接输入分区大小
输入 +512M 按下回车,就是创建一个512M的分区。现在fdisk又回到了开始的提示符,如果之前的操作有错误可以直接输入q退出,如果没有问题就可以输入w保存并退出。
根据你的命令,就创建了一个名为sdb*的文件,这个文件就是分区文件。

另一种方式就是创建一个文件,然后将这块文件格式化为swap格式

1
2
3
# 创建一个512M的数据类型文件
dd if=/dev/zero of=swapfile bs=1024 count=523288
# if -> input_file输入文件 of -> output_file输出文件 bs -> block_size块大小 count -> 计数

解释一下特殊文件/dev/zero

/dev/zero 这个文件放在Linux存放设备的目录下,如果以他为输出源,输出的全部都是二进制0
cat /dev/zero > test 这个命令会生成一个test文件并不断的向该文件中输入二进制0

0X01 格式化&&激活&&挂载swap分区

1
2
3
4
5
6
7
8
9
# 格式化刚才的文件
# 根据创建的方式选择命令
mkswap /dev/sdb*
mkswap swapfile

# 激活swap分区 相等于挂载
# 根据创建的方式选择命令
swapon /dev/sdb*
swapon swapfile

0X02 设置自动挂载

大家都是懒人,谁想每次开机都手动挂载一次分区呢?所以我们可以一劳永逸,将挂载设为自动

1
2
3
4
5
6
7
# 打开配置文件
vim /etc/fstab

# 添加这样一行
# 根据创建的方式选择命令
/dev/sdb* swap swap defaults 0 0
/home/swapfile swap swap defaults 0 0

下面解释这个配置文件的每一列

  1. 第一列是数据块文件的位置
  2. 第二列是挂载点
  3. 第三列是分区类型
  4. 第四列是挂载参数 通常默认
  5. 第五列是备份选项 0代表不备份 1代表备份 通常为0
  6. 第六列是自检顺序 0代表不自检 1和2代表自检 如果是根分区要设为1,其他分区只能是2 通常为0