华子目录
前言
- 在
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大小:指定交换空间的大小(以字节为单位)。这主要用于文件交换空间。-UUUID:为交换空间设置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 /