# 内存交换空间(swap)之建置
早期年代因为内存不足,因此可以暂时将内存的程序拿到硬盘中暂放的内存置换空间(swap)就显得非常重要,所以之前老见到说安装 linux 一定需要两个 partition,一个是根目录,另一个就是 swap 了
一般来说,如果硬件资源配置足够的话,swap 应该不会被系统使用到。会被用到的时候,通常就是物理内存不足的情况了。在用到 swap 时,你的主机磁盘灯就会开始闪个不停
但是你不能预估不会存在物理内存不够用的情况,所以预留 swap 是有必要的,特别是在服务器上,不知道什么时候会有大量的网络请求。
假如现在有这样一种情况:系统已经建立起来了,但是却发现没有建立 swap,那么可以通过如下的方式来做
- 设置一个 swap partition
- 建立一个虚拟内存的文件
# 使用实体分区槽建立 swap
步骤如下
- 分区:使用 gdisk 在磁盘中分区出一个分区槽给系统作为 swap。
- 格式化:利用建立 swap 格式的 「mkswap 装置文件名」就能够格式化该分区槽成为 swap 格式
- 使用:最后将该 swap 装置启动,方法为「swapon 装置文件名」
- 观察:通过 free 与 swapon -s 指令来观察内存的用量
# 1. 分区
[root@study ~]# gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): n
Partition number (6-128, default 6):
First sector (34-85491678, default = 69220352) or {+-}size{KMGTP}:
Last sector (69220352-85491678, default = 85491678) or {+-}size{KMGTP}: +512M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8200
Command (? for help): p
Disk /dev/sda: 85491712 sectors, 40.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 67038DBF-B66A-4D0F-92B2-BFBF0744CD1D
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 85491678
Partitions will be aligned on 2048-sector boundaries
Total free space is 15224765 sectors (7.3 GiB)
Number Start (sector) End (sector) Size Code Name
1 2048 6143 2.0 MiB EF02
2 6144 2103295 1024.0 MiB 0700
3 2103296 65026047 30.0 GiB 8E00
4 65026048 67123199 1024.0 MiB 8300 Linux filesystem
5 67123200 69220351 1024.0 MiB 0700 Microsoft basic data
6 69220352 70268927 512.0 MiB 8200 Linux swap
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.
# 刷新分区
[root@study ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40.8G 0 disk
├─sda1 8:1 0 2M 0 part
├─sda2 8:2 0 1G 0 part /boot
├─sda3 8:3 0 30G 0 part
│ ├─centos-root 253:0 0 10G 0 lvm /
│ ├─centos-swap 253:1 0 1G 0 lvm [SWAP]
│ └─centos-home 253:2 0 5G 0 lvm /home
├─sda4 8:4 0 1G 0 part /data/xfs
├─sda5 8:5 0 1G 0 part
└─sda6 8:6 0 512M 0 part # 出现了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# 2. 建立 swap 格式
[root@study ~]# mkswap /dev/sda6
正在设置交换空间版本 1,大小 = 524284 KiB
无标签,UUID=89727d5b-a222-4878-be50-19bbb61cabb0
# 确实可以抓到该装置了
[root@study ~]# blkid /dev/sda6
/dev/sda6: UUID="89727d5b-a222-4878-be50-19bbb61cabb0" TYPE="swap" PARTLABEL="Linux swap" PARTUUID="5fff6d01-b73a-45c2-be69-8fc4a67e0788"
1
2
3
4
5
6
7
2
3
4
5
6
7
# 3. 开始观察看看
[root@study ~]# free
total used free shared buff/cache available
Mem: 1190952 389504 83364 10916 718084 640164
Swap: 1048572 0 1048572
[root@study ~]# free -h
total used free shared buff/cache available
Mem: 1.1G 380M 81M 10M 701M 625M
Swap: 1.0G 0B 1.0G
# 列出目前使用的 swap 装置有哪些
[root@study ~]# swapon -s
文件名 类型 大小 已用 权限
/dev/dm-1 partition 1048572 0 -2
# 使用 swapon 指令挂载 swap 分区槽
[root@study ~]# swapon /dev/sda6
[root@study ~]# free
total used free shared buff/cache available
Mem: 1190952 389848 82492 10916 718612 639820
Swap: 1572856 0 1572856
[root@study ~]# swapon -s
文件名 类型 大小 已用 权限
/dev/dm-1 partition 1048572 0 -2
/dev/sda6 partition 524284 0 -3
# 可以看到这里 sda6 被用上了
# 建立永久挂载
nano /etc/fstab
# 这里是文件系统,所以没有挂载点,第二个字段写 swap
UUID="89727d5b-a222-4878-be50-19bbb61cabb0" swap swap defaults 0 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 使用文件建立 swap
如果是在四题分区槽无法支持的环境下,可以使用上一小节中提到的 loop 装置来建立
[root@study ~]# dd if=/dev/zero of=/tmp/swap bs=1M count=128
记录了128+0 的读入
记录了128+0 的写出
134217728字节(134 MB)已复制,0.0852543 秒,1.6 GB/秒
[root@study ~]# ll -h /tmp/swap
-rw-r--r--. 1 root root 128M 10月 27 21:22 /tmp/swap
# 格式化的时候一定要特别注意,路径不要错,否则有可能搞垮你的文件系统
[root@study ~]# mkswap /tmp/swap
正在设置交换空间版本 1,大小 = 131068 KiB
无标签,UUID=977e598a-ff20-4be9-bc28-7792c19bfe32
[root@study ~]# swapon /tmp/swap
swapon: /tmp/swap:不安全的权限 0644,建议使用 0600。
[root@study ~]# swapon -s
文件名 类型 大小 已用 权限
/dev/dm-1 partition 1048572 0 -2
/dev/sda6 partition 524284 0 -3
/tmp/swap file 131068 0 -4
# 使用 swapoff 指令关掉刚才手动挂载的两个挂载点,并配置自动挂载
# 建立永久挂载
nano /etc/fstab
# 增加配置
/tmp/swap swap swap defaults 0 0
# 关闭手动挂载的挂载点
[root@study ~]# swapoff /dev/sda6 /tmp/swap
[root@study ~]# swapon -s
文件名 类型 大小 已用 权限
/dev/dm-1 partition 1048572 0 -2
# 手动挂载所有,再查看下,配置正确
[root@study ~]# swapon -a
swapon: /tmp/swap:不安全的权限 0644,建议使用 0600。
[root@study ~]# swapon -s
文件名 类型 大小 已用 权限
/dev/dm-1 partition 1048572 0 -2
/dev/sda6 partition 524284 0 -3
/tmp/swap file 131068 0 -4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
swap 主要功能是当物理内存不够时,则某些在内存中所占的程序会暂时被移动到 swap 中,让物理内存可以被需要的程序来使用。另外,如果主机支持电源管理模式,也就是说使用「休眠」功能的话,运行中的程序状态则会被记录到 swap 中去,以作为「唤醒」主机的状态依据。另外某些程序会利用 swap 的特性来存放一些数据,所以 swap 需要建立,只是不需要太大
← 设置开机挂载 文件系统的特殊观察与操作 →