首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Linux学习之dd命令使用

Linux学习之dd命令使用

作者头像
ICT系统集成阿祥
发布2026-02-28 17:19:16
发布2026-02-28 17:19:16
490
举报
文章被收录于专栏:数通数通

一、dd 命令核心基础

1. 核心语法

dd 命令的核心是数据读写与转换,所有操作都围绕「输入源」和「输出目标」展开,基础格式:

代码语言:javascript
复制
ddif=<输入源>of=<输出目标>[选项/参数]
  • if(input file):指定数据来源(文件、磁盘设备、特殊设备如 /dev/zero 等)
  • of(output file):指定数据目标(文件、磁盘设备等)

2. 核心参数(高频使用)

代码语言:javascript
复制
单次读写的块大小(如 4M、1G),越大复制效率越高(需匹配设备特性)

二、dd 命令典型应用场景(附解释)

按使用频率和实用性分类,每个案例标注「核心作用+注意事项」:

1. 文件操作类

(1)基础文件复制(替代 cp,适合大文件)
代码语言:javascript
复制
ddif=/path/sourcefile of=/path/destfile bs=4M status=progress
  • 优势:bs 可自定义块大小,大文件复制效率高于 cpstatus=progress 实时看进度。
(2)文本内容转换
代码语言:javascript
复制
# 小写转大写
ddif=testfile of=testfile_upper conv=ucase
# 大写转小写
ddif=testfile of=testfile_lower conv=lcase

2. 磁盘/分区操作类(核心高频)

(1)磁盘/分区备份(生成镜像文件)
代码语言:javascript
复制
# 备份 /dev/sda1 分区到镜像文件
ddif=/dev/sda1 of=/backup/sda1.img bs=4M status=progress conv=noerror,fsync
  • noerror:遇到坏块不停止(避免备份中断);fsync:确保数据完全写入磁盘。
(2)镜像恢复到磁盘/分区
代码语言:javascript
复制
# 把镜像恢复到 /dev/sda1(⚠️ 目标分区会被覆盖,务必确认路径!)
ddif=/backup/sda1.img of=/dev/sda1 bs=4M status=progress conv=fsync
(3)制作启动盘(写入 ISO 到 U 盘)
代码语言:javascript
复制
# /dev/sdb 是 U 盘设备(不是分区!如 /dev/sdb1 错误)
ddif=ubuntu.iso of=/dev/sdb bs=4M status=progress conv=fsync
(4)备份/恢复分区表(精准操作)
代码语言:javascript
复制
# 备份分区表(MBR 分区表前 512 字节包含分区信息)
ddif=/dev/sda of=/backup/partition_table bs=512count=1status=progress
# 恢复分区表(⚠️ 风险极高,确保设备路径正确)
ddif=/backup/partition_table of=/dev/sda bs=512count=1status=progress

3. 性能测试类

(1)测试磁盘读取速度(绕过缓存)
代码语言:javascript
复制
# /dev/null 是空设备,不写入数据;iflag=direct 绕过系统缓存,测真实速度
ddif=/dev/sda of=/dev/null bs=1G count=1iflag=direct status=progress
(2)测试磁盘写入速度(绕过缓存)
代码语言:javascript
复制
# /dev/zero 生成空数据;oflag=direct 绕过缓存,测真实写入速度
ddif=/dev/zero of=/tmp/test_write bs=1G count=1oflag=direct status=progress

4. 数据擦除类(安全删除设备数据)

代码语言:javascript
复制
# 用随机数据覆盖整块磁盘(/dev/sda),无法恢复(耗时久)
ddif=/dev/urandom of=/dev/sda bs=1M status=progress

三、I/O 行为控制:iflag/oflag 扩展

这两个参数是「精准控制读写行为」的关键,新手重点掌握以下值:

代码语言:javascript
复制
绕过系统缓存,直接读写硬件(测真实磁盘性能必用)

示例:

代码语言:javascript
复制
# 精准测试 4K 块大小的读取性能
ddif=/dev/sdb of=/dev/null bs=4K count=1000iflag=direct,fullblock status=progress

四、实战案例:swap 分区动态扩容

swap 是Linux的虚拟内存,通过 dd 配合其他命令可动态扩容,步骤如下(完整可执行):

代码语言:javascript
复制
# 1. 创建 16G 的 swap 文件(fallocate 更快,dd 更兼容)
fallocate -l 16G /swapfile  # 快速创建空文件
# 或用 dd(兼容性更好):dd if=/dev/zero of=/swapfile bs=1M count=16384 status=progress

# 2. 初始化 swap 文件(格式化)
mkswap /swapfile

# 3. 启用 swap 文件
swapon /swapfile

# 4. 设置永久生效(重启后仍生效)
echo"/swapfile none swap defaults 0 0">> /etc/fstab

# 5. 验证效果(查看 swap 大小)
free -h
  • 关键:/swapfile 的权限需为 600(若权限不对,执行 chmod 600 /swapfile)。

总结

  1. dd 核心语法是 if=输入 of=输出 [参数],bs(块大小)和 status=progress是新手最常用的参数;
  2. 磁盘/分区操作(备份、恢复、启动盘制作)是 dd 的核心场景,操作前务必确认设备路径(避免覆盖重要数据);
  3. 性能测试需加 iflag/oflag=direct 绕过缓存,才能得到真实的磁盘读写速度;
  4. swap 扩容中,dd if=/dev/zero 用于生成空数据文件,是 fallocate 的兼容替代方案。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-02-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ICT系统集成阿祥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、dd 命令核心基础
    • 1. 核心语法
    • 2. 核心参数(高频使用)
  • 二、dd 命令典型应用场景(附解释)
    • 1. 文件操作类
      • (1)基础文件复制(替代 cp,适合大文件)
      • (2)文本内容转换
    • 2. 磁盘/分区操作类(核心高频)
      • (1)磁盘/分区备份(生成镜像文件)
      • (2)镜像恢复到磁盘/分区
      • (3)制作启动盘(写入 ISO 到 U 盘)
      • (4)备份/恢复分区表(精准操作)
    • 3. 性能测试类
      • (1)测试磁盘读取速度(绕过缓存)
      • (2)测试磁盘写入速度(绕过缓存)
    • 4. 数据擦除类(安全删除设备数据)
  • 三、I/O 行为控制:iflag/oflag 扩展
  • 四、实战案例:swap 分区动态扩容
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档