Linux 更改swap分区

字数: 2691

一般通过修改磁盘分区来增加 swap 分区空间,只是单纯的调整swap空间会占用物理内存。

修改磁盘分区

 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
# 查看各分区信息
[root@FXQ-YWYY-57-81 dev]# fdisk --l
Disk /dev/vda: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 55A9D713-559A-436B-BA30-299A54040073

Device        Start       End  Sectors  Size Type
/dev/vda1      2048   1230847  1228800  600M EFI System
/dev/vda2   1230848   3327999  2097152    1G Linux filesystem
/dev/vda3   3328000  70436863 67108864   32G Linux filesystem
/dev/vda4  70436864 103991295 33554432   16G Linux swap


Disk /dev/vdb: 500 GiB, 536870912000 bytes, 1048576000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x93389753

Device     Boot Start        End    Sectors  Size Id Type
/dev/vdb1        2048 1048575999 1048573952  500G 83 Linux


Disk /dev/loop0: 3.94 GiB, 4202692608 bytes, 8208384 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

1 删除磁盘分区

如果删除磁盘分区,这部分空间并不会被显示,而是属于未使用的状态,不会计入 df -h 返回的结果(它返回的是已经挂载了的可用空间)。需将这部分空间重新分配到新的分区。

 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
# 使用 fdisk 命令,后边接 分区名
[root@FXQ-YWYY-57-81 /]# fdisk /dev/vda

Welcome to fdisk (util-linux 2.35.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

# 列出当前分区信息
Command (m for help): p
Disk /dev/vda: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 55A9D713-559A-436B-BA30-299A54040073

Device        Start       End  Sectors  Size Type
/dev/vda1      2048   1230847  1228800  600M EFI System
/dev/vda2   1230848   3327999  2097152    1G Linux filesystem
/dev/vda3   3328000  70436863 67108864   32G Linux filesystem
/dev/vda4  70436864 103991295 33554432   16G Linux swap

# 删除命令,选择第四个分区,按顺序来的
Command (m for help): d
Partition number (1-4, default 4): 4

Partition 4 has been deleted.

# w 是保存退出
Command (m for help): w
The partition table has been altered.
Syncing disks.

2 新增磁盘分区

 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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# 使用 fdisk 磁盘管理命令
[root@FXQ-YWYY-57-81 ~]# fdisk /dev/vda

Welcome to fdisk (util-linux 2.35.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p
Disk /dev/vda: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 55A9D713-559A-436B-BA30-299A54040073

Device       Start      End  Sectors  Size Type
/dev/vda1     2048  1230847  1228800  600M EFI System
/dev/vda2  1230848  3327999  2097152    1G Linux filesystem
/dev/vda3  3328000 70436863 67108864   32G Linux filesystem

Command (m for help): m

Help:

  GPT
   M   enter protective/hybrid MBR

  Generic
   d   delete a partition	# 删除
   F   list free unpartitioned space
   l   list known partition types
   n   add a new partition	# 新增
   p   print the partition table
   t   change a partition type	# 更改分区类型
   v   verify the partition table
   i   print information about a partition

  Misc
   m   print this menu
   x   extra functionality (experts only)

  Script
   I   load disk layout from sfdisk script file
   O   dump disk layout to sfdisk script file

  Save & Exit
   w   write table to disk and exit
   q   quit without saving changes

  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty DOS partition table
   s   create a new empty Sun partition table

# 新增 n ,内存取默认就行
Command (m for help): n
Partition number (4-128, default 4): 4
First sector (70436864-104857566, default 70436864): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (70436864-104857566, default 104857566): 

Created a new partition 4 of type 'Linux filesystem' and of size 16.4 GiB.
Partition #4 contains a swap signature.

# 默认 y
Do you want to remove the signature? [Y]es/[N]o: y

The signature will be removed by a write command.

# 保存
Command (m for help): w
The partition table has been altered.
Syncing disks.

# 让内核重新读取分区信息
[root@FXQ-YWYY-57-81 ~]# partprobe -s
/dev/vdb: msdos partitions 1
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.
/dev/sr0: msdos partitions
/dev/vda: gpt partitions 1 2 3 4

# 格式化分区,注意这是 filesystem 类型的分区格式化
[root@FXQ-YWYY-57-81 dev]# mkfs.xfs -f /dev/vda4 
meta-data=/dev/vda4              isize=512    agcount=4, agsize=1075647 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=4302587, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

2.1 调整磁盘分区为 swap 分区

 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
60
61
[root@FXQ-YWYY-57-81 ~]# fdisk /dev/vda

Welcome to fdisk (util-linux 2.35.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p
Disk /dev/vda: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 55A9D713-559A-436B-BA30-299A54040073

Device       Start      End  Sectors  Size Type
/dev/vda1     2048  1230847  1228800  600M EFI System
/dev/vda2  1230848  3327999  2097152    1G Linux filesystem
/dev/vda3  3328000 70436863 67108864   32G Linux filesystem

# 更改分区类型为 swap 
Command (m for help): t

Partition number (1-4, default 4): 4
Partition type (type L to list all types): 19

# 保存
Command (m for help): w
The partition table has been altered.
Syncing disks.

# 让内核重新读取分区信息
[root@FXQ-YWYY-57-81 ~]# partprobe -s
/dev/vdb: msdos partitions 1
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.
/dev/sr0: msdos partitions
/dev/vda: gpt partitions 1 2 3 4

# 格式化分区
[root@FXQ-YWYY-57-81 dev]# mkswap /dev/vda4

# 挂载分区
[root@FXQ-YWYY-57-81 dev]# swapon /dev/vda4

# 验证
[root@FXQ-YWYY-57-81 dev]# swapon --show
NAME      TYPE       SIZE USED PRIO
/dev/vda4 partition 16.4G   0B   -2

# 设置开机自启
[root@FXQ-YWYY-57-81 dev]# vi /etc/fstab
# 加入
UUID=9b6af8bf-5a7a-4e6b-8e2e-4afa78cf5bbc none  swap    defaults        0 0


# 如果不清楚 UUID 可设置为它文件的路径
/dev/vda4 none swap defaults 0 0

# 查看 UUID 也是可以的
[root@FXQ-YWYY-57-81 dev]# blkid /dev/vda4
/dev/vda4: UUID="1be2cafb-87e7-4539-8035-76f6d6afe54b" TYPE="swap" PARTUUID="76bd885e-c19a-c04b-bdec-9374a1515872"

更改 swap 分区空间

当服务器使用了默认的 swap 交换区,空间过大时,为了避免留给应用的物理内存太小导致应用服务器运行性能不好,可以如下进行操作,对 swap 区进行缩减。缩减还是增加,其实都是通过新增一个小(大)的新 swap 文件,把这个文件格式化为 swap 空间,然后卸掉原来的 swap 空间,启用新的 swap 空间。

但是它本身使用的是一部分物理磁盘空间,用磁盘空间转为虚拟内存空间,这个 swap 跟 物理内存实际上没有关系。如果不需要分区,则直接把这个分区卸掉,然后把对应的分区文件删除即可。

1 缩小 swap 分区空间

1.1 查看 swap 分区

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 查看 swap 具体是哪个
[root@linux1 ~]# swapon -s
文件名                          类型            大小    已用    权限
/dev/dm-1                      partition      4063228  0       -2


# 或者这么查
[root@linux1 ~]# cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       4063228 0       -2

能看出,swap 交换分区的路径是 /dev/dm-1

1.2 禁用 swap 分区

1
2
3
4
# 禁用
[root@linux1 ~]# swapoff /dev/dm-1
# 编辑 /etc/fstab 删掉 swap 分区的信息
vi /etc/fstab

然后可以看到 swap 分区可用为 0

1
2
3
4
[root@linux1 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           3.7G        284M        3.3G         11M        157M        3.2G
Swap:            0B          0B          0B

1.3 重新创建 swap 分区

创建 swap 分区文件

 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
# 进入 /dev 目录
[root@linux1 ~]# dd if=/dev/zero of=/swapfile bs=500M count=1
记录了1+0 的读入
记录了1+0 的写出
524288000字节(524 MB)已复制,11.1731 秒,46.9 MB/秒
# /dev/zero 是 LINUX 里一个特殊块设备,在每次读取时输出零字节
# /swapfile 可以是任意路径下的文件,注意这个不用事先创建

# 授权
[root@linux1 /]# chmod 600 swapfile

# 把这个文件格式化为 swap 空间
[root@linux1 /]# mkswap /swapfile
正在设置交换空间版本 1,大小 = 511996 KiB
无标签,UUID=fef44c17-e76e-4d25-8607-1546968093c0

# 激活该文件,添加到交换池中
[root@linux1 /]# swapon /swapfile

# 添加该 swap 分区到配置文件里
[root@linux1 /]# vi /etc/fstab
# 加入该 swap 分区信息
/swapfile swap defaults 0 0

# 验证
[root@linux1 /]# swapon --show
NAME      TYPE      SIZE USED PRIO
/swapfile file      500M   0B   -3

# 删除旧的 swap 分区,不然还是会占用内存空间
rm -rf /dev/dm-1
1.3.1 当执行格式化swap空间命令时报错
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[root@linux2 dev]# sudo mkswap swapfile
mkswap: swapfile: warning: wiping old swap signature.
正在设置交换空间版本 1,大小 = 511996 KiB
无标签,UUID=9db8a3f1-5bd5-4634-a659-94f849c0d98c
mkswap: 无法将 swapfile 标签改为 unconfined_u:object_r:swapfile_t:s0: 权限不够

# 临时关闭 selinux 安全模块
setenforce 0

# 格式化完成记得把它改打开
setenforce 1

2 增加 swap 分区空间

这部分如果不是使用的磁盘空间,会使用物理内存空间转为 swap 空间。

 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
[root@linux2 dev]# dd if=/dev/zero of=/dev/dm-1 bs=100M count=1
记录了1+0 的读入
记录了1+0 的写出
104857600字节(105 MB)已复制,0.20253 秒,518 MB/秒

[root@linux2 dev]# mkswap /dev/dm-1
正在设置交换空间版本 1,大小 = 102396 KiB
无标签,UUID=15a0fcd0-c122-4fd4-8ee1-c4709a3ae4a3
mkswap: 无法将 /dev/dm-1 标签改为 unconfined_u:object_r:swapfile_t:s0: 权限不够

# 关闭 sellinux
[root@linux2 dev]# setenforce 0
[root@linux2 dev]# mkswap /swapfile2
正在设置交换空间版本 1,大小 = 102396 KiB
无标签,UUID=6f8da03d-85ab-4841-9508-1d5ed5937787
[root@linux2 dev]# swapon /swapfile2
swapon: /dev/dm-1:不安全的权限 0644,建议使用 0600。
[root@linux2 dev]# chmod 600 /swapfile2

[root@linux2 dev]# free -h
              total        used        free      shared  buff/cache   available
Mem:           3.7G        291M        2.6G        111M        803M        3.1G
Swap:          599M          0B        599M
[root@linux2 dev]# setenforce 1

# 写入 /etc/fstab
vi /etc/fstab
# 添加 
/swapfile2 swap defaults 0 0
Licensed under CC BY-NC-SA 4.0
最后更新于 2024年10月14号 21:10