关于swap,使用fdisk和dd的区别

创建交换空间所需的交换文件是一个普通的文件,但是,创建交换文件与创建普通文件不同,必须通过dd命令来完成,同时这个文件必须位于本地硬盘上,不能在网络文件系统(NFS)上创建swap交换文件。例如:

[root@localhost ~]# dd if=/dev/zero of=/data/swapfile bs=1024 count=65536 # if=输入文件(/dev/zero提供无限零数据流),of=输出文件(指定交换文件路径),bs=设置读写块大小(1024字节=1KB),count=复制块数量(65536个块,总大小=64MB)
65536+0 records in
65536+0 records out

if=输入文件,或者设备名称。

of=输出文件或者设备名称。

ibs=bytes 表示一次读入bytes 个字节(即一个块大小为 bytes 个字节)。

obs=bytes 表示一次写bytes 个字节(即一个块大小为 bytes 个字节)。

bs=bytes,同时设置读写块的大小,以bytes为单位,此参数可代替 ibs 和 obs。

count=blocks 仅拷贝blocks个块。

激活和使用swap

首先通过mkswap命令指定作为交换空间的设备或者文件:

[root@localhost ~]# mkswap /data/swapfile # 将普通文件格式化为交换空间格式,写入swap签名

通过swapon命令激活swap:

[root@localhost ~]# /usr/sbin/swapon /data/swapfile # 激活交换文件,系统开始使用该交换空间

dd 和 fdisk 在创建 swap 时的核心区别:

维度dd 命令fdisk 命令
操作对象文件(普通文件)磁盘/分区(/dev/sdb、/dev/sda1)
本质创建一个内容为0的普通文件修改磁盘分区表,划分出一个独立分区
大小任意指定(64MB、1GB、10GB)受磁盘剩余空间和分区表限制
是否需要格式化mkswap 格式化文件mkswap 格式化分区
激活方式swapon /data/swapfileswapon /dev/sdb1
永久挂载/etc/fstab 写文件路径/etc/fstab 写设备路径或UUID
性能略低(通过文件系统层)略高(直接访问块设备)
灵活性(随时增删改,无需重分区)(大小固定,调整需删分区)
适用场景临时扩容、云主机无法分区时物理机、长期固定交换分区

一句话本质

  • dd = 造一个“交换文件”(像一个装满0的大箱子,放在现有文件系统里)
  • fdisk = 划一个“交换分区”(从磁盘上切一块独立区域,不经过文件系统)

直观对比示例

方式1:dd 创建交换文件

# 1. 生成文件
dd if=/dev/zero of=/swapfile bs=1M count=1024  # 1GB文件

# 2. 格式化
mkswap /swapfile

# 3. 激活
swapon /swapfile

# 4. 查看
swapon --show
# /swapfile file 1048572 0 -2
#          ^ 类型是 file

方式2:fdisk 创建交换分区

# 1. 分区
fdisk /dev/sdb
# n → p → 1 → 回车 → +1G → t → 82 → w

# 2. 通知内核
partprobe /dev/sdb

# 3. 格式化
mkswap /dev/sdb1

# 4. 激活
swapon /dev/sdb1

# 5. 查看
swapon --show
# /dev/sdb1 partition 1048572 0 -2
#          ^ 类型是 partition

如何选择?

场景推荐方式原因
临时加个swap应急 dd 文件不用分区,用完就删,灵活
云服务器(不能重启) dd 文件无法修改分区表,文件方案唯一解
物理机/长期固定 fdisk 分区性能略好,独立隔离
已有空闲分区 fdisk 分区现成的直接用
磁盘已无空闲空间 dd 文件只要硬盘还有容量,文件就能建

终极总结

命令本质类比
dd在文件系统里创建一个文件当swap在房间里放个水箱当蓄水池
fdisk从磁盘上划一个独立区域当swap在房子外专门建个水池

两者最终都被 mkswap + swapon 激活使用,殊途同归。
dd 适合灵活应急,fdisk 适合规范部署。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注