华子目录
前言
- 在
Linux
系统中,swap
交换分区的作用类似于Windows
系统中"虚拟内存
"。当有程序
被调入内存
后,但是该程序
又不是
常被CPU
所取用时,那么这些不常被使用
的程序
将会被放到硬盘
的swap
交换分区当中,而将速度较快
的内存空间
释放给真正
需要的程序
使用,以避免由于物理内存不足而造成的系统效能低的问题。如果系统没有swap
交换分区,或者现有交换分区
的容量
不够用时,可扩展swap
交换分区。
管理交换分区的命令
mkswap
mkswap
命令在Linux
系统中用于将指定的分区
格式化为swap交换文件系统
。交换空间
是硬盘
上的一个区域
,当系统的物理内存
(RAM)不足时,系统会使用交换空间
来存储暂时不使用的内存
页面,从而允许系统继续运行而不会耗尽内存。
命令语法
bash
mkswap [选项]... [设备]
- 设备 :指定要创建为交换空间的设备或分区,如
/dev/sda2
或/swapfile
。
常用选项(一般不会带选项
)
-c
:在创建交换空间之前,先执行一个坏的块检查。-f
:强制创建交换空间
,即使该设备似乎已经包含文件系统。
-L
标签:设置交换空间的标签
。-p
优先级:设置交换空间的优先级(0 到 32767,0 为最低)。-s
大小:指定交换空间的大小
(以字节
为单位)。这主要用于文件交换空间。-U
UUID:为交换空间设置UUID
。-v
:显示详细信息,执行时更详细地输出操作。
示例
-
为分区创建交换空间:
假设
/dev/sdb1
是一个未使用的硬盘分区
,你可以使用以下命令将其格式化为交换空间:bashmkswap /dev/sdb1
然后,你需要启用这个交换空间:
bashswapon /dev/sdb1
如果你想在启动时
自动启用
这个交换空间,可以编辑/etc/fstab
文件并添加相应的行。 -
为文件创建交换空间:
首先,创建一个文件作为交换空间(这里以 2GB 为例):
bashfallocate -l 2G /swapfile
或者,如果你的系统不支持
fallocate
,可以使用dd
命令(但会比较慢):bashdd if=/dev/zero of=/swapfile bs=1G count=2
- 创建一个文件
/swapfile
,从无限零资源
去读,每一块大小为1G
,一共有2块
,不能用cat
去查看,不然会卡死
然后,将文件格式化为交换空间:
bashmkswap /swapfile
启用
交换空间:bashswapon /swapfile
设置权限
bashchmod 0600 /swapfile
查看
当前虚拟内存bashswapon -s
写入
/etc/fstab
,实现开机挂载
bashvim /etc/fstab
- 创建一个文件
swapon
命令
swapon
命令在 Linux
系统中用于启用或激活
交换空间(swap space
)。
命令语法
bash
swapon [选项]... [设备]
- 设备 :指定要启用的交换设备或文件的路径,如
/dev/sda2
或/swapfile
。
常用选项
-a
:从/etc/fstab
文件中读取所有标记为"swap
"的行,并启用它们
。这是启动系统时常用的选项,用于自动启用
所有配置的交换空间
。-h
:显示帮助信息。-p
优先级:设置交换设备的优先级(0 到 32767,其中 0 是最低优先级)。如果未指定,swapon
将使用默认值。-s
:显示当前启用
的交换设备
和它们的统计信息,如总大小、已用空间
等。这个选项不会启用
任何交换设备,只是显示信息
。
示例
-
启用一个交换分区:
假设
/dev/sdb1
是一个已经被格式化
为交换空间
的分区,你可以使用以下命令来启用它:bashswapon /dev/sdb1
-
启用一个交换文件:
如果你已经创建了一个名为
/swapfile
的交换文件
,并且想要启用
它,可以使用:bashswapon /swapfile
-
从
/etc/fstab
自动启用所有交换空间
:在系统启动时,通常不需要手动运行
swapon
命令来启用交换空间,因为/etc/fstab
文件中的配置会自动处理这一过程。但是,如果你需要手动执行这一操作(比如,在/etc/fstab
配置错误后),可以使用:bashswapon -a
这将读取
/etc/fstab
文件中所有标记为"swap
"的行,并启用
它们。 -
查看当前启用的交换空间:
要查看
当前系统
启用了哪些交换空间
以及它们的统计信息,可以使用:bashswapon -s
swapoff
命令
swapoff
命令在 Linux
系统中用于关闭(禁用)交换空间(swap space
)。当系统不再需要某个交换分区或文件作为虚拟内存时,可以使用 swapoff
命令来停用它。
命令语法
bash
swapoff [选项]... [设备]
- 设备 :指定要禁用的交换设备或文件的路径,如
/dev/sda2
或/swapfile
。
常用选项
-a
:从/etc/fstab
文件中读取所有标记为"swap
"的行,并尝试禁用它们。注意,这个选项在实际使用中可能并不常见,因为/etc/fstab
通常用于启动时的自动挂载,而不是禁用。
示例
-
禁用一个交换分区:
假设
/dev/sdb1
是一个已经启用的交换分区,你可以使用以下命令来禁用它:bashswapoff /dev/sdb1
-
禁用一个交换文件:
如果你之前启用了一个名为
/swapfile
的交换文件,并希望现在禁用它,可以使用:bashswapoff /swapfile
-
查看交换空间状态:
在禁用交换空间之前或之后,你可能想要查看当前系统的交换空间状态。虽然
swapoff
命令本身不直接显示这些信息,但你可以使用swapon -s
命令来查看当前启用的交换空间列表,或者使用free -h
命令来查看系统的总体内存和交换空间使用情况。bashswapon -s # 查看当前启用的交换空间 free -h # 查看内存和交换空间使用情况
free
命令
free
命令是Linux
系统中用于查看内存使用情况的工具,它提供了系统总内存、已使用内存、空闲内存、缓存以及交换空间(swap
)等关键信息。
命令格式与参数
free
命令的基本格式如下:
bash
free [选项]...
常用的参数包括:
-b
:以字节(Byte)为单位显示内存使用情况。-k
:以千字节(KB)为单位显示内存使用情况(默认)。-m
:以兆字节(MB)为单位显示内存使用情况。-g
:以吉字节(GB)为单位显示内存使用情况。-h
:以人类可读的方式(如KB、MB、GB)显示内存大小。-o
:不显示缓冲区调节列。-s [间隔秒数]
:以指定的间隔时间持续观察内存使用状况。-t
:显示内存总和列。-V
:显示版本信息。
输出信息解释
free
命令的输出通常包含几行关键信息,每行代表不同的内存使用情况:
-
Mem行(物理内存):
- total:物理内存总量。
- used:已使用的物理内存量。
- free:空闲的物理内存量。
- shared:被多个进程共享的内存量(现代Linux系统中此值通常为0)。
- buffers/cached:被内核用作缓冲和缓存的内存量。这部分内存虽然被标记为"已用",但实际上当应用程序需要更多内存时,这些缓冲和缓存可以被回收。
-
-/+ buffers/cache行:
- 这行从应用程序的角度重新计算了内存的使用情况。它考虑了缓冲和缓存是可回收的,因此将它们视为可用内存的一部分。
-
Swap行(交换空间):
- total:交换空间总量。
- used:已使用的交换空间量。
- free:空闲的交换空间量。
使用实例
-
查看内存使用情况(以MB为单位):
bashfree -m
-
持续观察内存使用情况(每5秒刷新一次):
bashfree -s 5
-
以人类可读的方式显示内存使用情况:
bashfree -h
实验1:扩展交换空间
1.查看之前的交换空间
- 查看
之前
的交换空间
bash
[root@rhel9 ~]# free -h
total used free shared buff/cache available
Mem: 1.9Gi 1.1Gi 358Mi 21Mi 573Mi 760Mi
Swap: 2.0Gi 0B 2.0Gi
- 或使用
swapon -s
查看
bash
[root@rhel9 ~]# swapon -s
Filename Type Size Used Priority
/dev/nvme0n1p2 partition 2097148 0 -2
- 或使用
lsblk
bash
[root@rhel9 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 10G 0 disk
sr0 11:0 1 8.4G 0 rom
nvme0n1 259:0 0 100G 0 disk
├─nvme0n1p1 259:1 0 500M 0 part /boot
├─nvme0n1p2 259:2 0 2G 0 part [SWAP] #表示交换分区
└─nvme0n1p3 259:3 0 97.5G 0 part /
2.创建磁盘分区
- 先使用
fdisk -l
查看
bash
[root@rhel9 ~]# fdisk -l
Disk /dev/nvme0n1:100 GiB,107374182400 字节,209715200 个扇区
磁盘型号:VMware Virtual NVMe Disk
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x1c83a586
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/nvme0n1p1 * 2048 1026047 1024000 500M 83 Linux
/dev/nvme0n1p2 1026048 5220351 4194304 2G 82 Linux swap / Solaris
/dev/nvme0n1p3 5220352 209715199 204494848 97.5G 83 Linux
Disk /dev/sda:10 GiB,10737418240 字节,20971520 个扇区
磁盘型号:VMware Virtual S
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
- 我们发现
/dev/nvm0n1
这个磁盘已经没有空间可用了,/dev/sda
这个磁盘还没有使用过 - 使用
fdisk
创建2G大小的磁盘分区
bash
[root@rhel9 ~]# fdisk /dev/sda
欢迎使用 fdisk (util-linux 2.37.4)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
设备不包含可识别的分区表。
创建了一个磁盘标识符为 0xa447abfd 的新 DOS 磁盘标签。
命令(输入 m 获取帮助):n
分区类型
p 主分区 (0 primary, 0 extended, 4 free)
e 扩展分区 (逻辑分区容器)
选择 (默认 p):p
分区号 (1-4, 默认 1):
第一个扇区 (2048-20971519, 默认 2048):
最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (2048-20971519, 默认 20971519): +2G
创建了一个新分区 1,类型为"Linux",大小为 2 GiB。
命令(输入 m 获取帮助):p
Disk /dev/sda:10 GiB,10737418240 字节,20971520 个扇区
磁盘型号:VMware Virtual S
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xa447abfd
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sda1 2048 4196351 4194304 2G 83 Linux
bash
[root@rhel9 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 10G 0 disk
└─sda1 8:1 0 2G 0 part #发现创建成功
sr0 11:0 1 8.4G 0 rom
nvme0n1 259:0 0 100G 0 disk
├─nvme0n1p1 259:1 0 500M 0 part /boot
├─nvme0n1p2 259:2 0 2G 0 part [SWAP]
└─nvme0n1p3 259:3 0 97.5G 0 part /
bash
[root@rhel9 ~]# fdisk -l
Disk /dev/nvme0n1:100 GiB,107374182400 字节,209715200 个扇区
磁盘型号:VMware Virtual NVMe Disk
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x1c83a586
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/nvme0n1p1 * 2048 1026047 1024000 500M 83 Linux
/dev/nvme0n1p2 1026048 5220351 4194304 2G 82 Linux swap / Solaris
/dev/nvme0n1p3 5220352 209715199 204494848 97.5G 83 Linux
Disk /dev/sda:10 GiB,10737418240 字节,20971520 个扇区
磁盘型号:VMware Virtual S
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xa447abfd
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sda1 2048 4196351 4194304 2G 83 Linux
3.创建交换空间
- 使用
mkswap
命令
bash
[root@rhel9 ~]# mkswap /dev/sda1
正在设置交换空间版本 1,大小 = 2 GiB (2147479552 个字节)
无标签,UUID=5fce9557-a964-4ff1-9e44-8cf89ca57c5d
- 创建完发现
交换空间
没有变
bash
[root@rhel9 ~]# swapon -s
Filename Type Size Used Priority
/dev/nvme0n1p2 partition 2097148 0 -2
bash
[root@rhel9 ~]# free -h
total used free shared buff/cache available
Mem: 1.9Gi 728Mi 1.0Gi 11Mi 347Mi 1.2Gi
Swap: 2.0Gi 0B 2.0Gi
4.启动交换空间
- 使用
swapon
命令
bash
[root@rhel9 ~]# swapon /dev/sda1
- 启动完发现,
交换空间扩大了
bash
[root@rhel9 ~]# free -h
total used free shared buff/cache available
Mem: 1.9Gi 728Mi 1.0Gi 11Mi 347Mi 1.2Gi
Swap: 4.0Gi 0B 4.0Gi
实验2:禁用交换空间
- 禁用之前需要使用
swapon -s
或lsblk
查看交换空间位于哪个分区
上
bash
[root@rhel9 ~]# swapon -s
Filename Type Size Used Priority
/dev/nvme0n1p2 partition 2097148 0 -2
/dev/sda1 partition 2097148 0 -3
bash
[root@rhel9 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 10G 0 disk
└─sda1 8:1 0 2G 0 part [SWAP]
sr0 11:0 1 8.4G 0 rom
nvme0n1 259:0 0 100G 0 disk
├─nvme0n1p1 259:1 0 500M 0 part /boot
├─nvme0n1p2 259:2 0 2G 0 part [SWAP]
└─nvme0n1p3 259:3 0 97.5G 0 part /
- 使用
swapoff
命令禁用/dev/sda1
bash
[root@rhel9 ~]# swapoff /dev/sda1
- 验证
bash
[root@rhel9 ~]# free -h
total used free shared buff/cache available
Mem: 1.9Gi 728Mi 1.0Gi 11Mi 347Mi 1.2Gi
Swap: 2.0Gi 0B 2.0Gi
- 发现交换空间少了,但是分区还在
bash
[root@rhel9 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 10G 0 disk
└─sda1 8:1 0 2G 0 part
sr0 11:0 1 8.4G 0 rom
nvme0n1 259:0 0 100G 0 disk
├─nvme0n1p1 259:1 0 500M 0 part /boot
├─nvme0n1p2 259:2 0 2G 0 part [SWAP]
└─nvme0n1p3 259:3 0 97.5G 0 part /