Linux 常用命令 - dd 【复制及转换文件内容】
简介
dd 命令源自于磁盘复制(disk dump)的缩写,是 Linux 和 Unix 系统中用于转换和复制文件的一个强大工具。它可以在复制过程中进行格式转换,支持不同的块大小,能够直接对硬盘设备进行操作,非常适合进行备份和恢复任务。dd 命令能够精确控制输入/输出过程中的数据块大小以及数量,使其在处理原始磁盘数据时特别有用。
使用方式
dd [选项]
常用选项
-
bs=BYTES:一次读和写 BYTES 字节。该选项会覆盖ibs和obs设定的值,默认为 512。 -
cbs=BYTES:一次转换 BYTES 字节。 -
conv=CONVS:指定一个或多个转换参数,以逗号分隔。(具体参数列表见下文) -
count=N:只拷贝输入文件的前 N 个块。 -
ibs=BYTES:指定一次读取 BYTES 字节,默认为 512。 -
if=FILE:从指定的 FILE 中读取而不是默认的标准输入中。 -
iflag=FLAGS:指定一个或多个输入处理标志,以逗号分隔。(具体标志列表见下文) -
obs=BYTES:指定一次写入 BYTES 字节,默认为512. -
of=FILE:将数据写入指定的 FILE 而不是标准输出。 -
oflag=FLAGS:指定一个或多个输出处理标志,以逗号分隔。(具体标志列表见下文) -
seek=N:指定在开始写入数据之前应该跳过写入目标的前 N 个块(块大小由obs指定或默认)。 -
skip=N:指定在开始处理输入数据之前应该跳过 N 个块(块大小由ibs指定或默认)。 -
status=LEVEL:控制dd命令在标准错误输出(stderr)上打印的信息量级别。none:抑制所有的输出信息,除了错误消息。noxfer:抑制最后的传输统计信息。progress:显示周期性的传输统计信息。
-
--help:显示帮助信息。 -
--version:显示版本信息。
CONV 转换参数
-
ascii:从EBCDIC编码转换为ASCII编码。EBCDIC是一种在IBM大型机上使用的字符编码,而ASCII是更通用的字符编码。 -
ebcdic:从ASCII编码转换为 EBCDIC 编码。 -
ibm:从ASCII编码转换到 alternate EBCDIC编码,这种形式常用于IBM系统。 -
block:将以换行符结尾的记录使用空格填充至指定的cbs(转换块大小)大小。 -
unblock:将cbs大小记录中的尾部空格替换为换行符。 -
lcase:将大写字母转换为小写字母。 -
ucase:将小写字母转换为大写字母。 -
sparse:尝试对包含NUL(空字符)的输入块进行seek操作(跳过)而不是写入操作,以此来优化空间使用。 -
swab:交换每对输入字节的位置。 -
sync:将每个输入块使用NULs(空字符)填充至ibs(输入块大小)。如果与block或unblock一起使用,则用空格而不是NULs填充。 -
excl:如果输出文件已经存在,操作将失败。 -
nocreat:不创建输出文件。 -
notrunc:不截断输出文件,即不改变文件的大小。 -
noerror:在读取错误后继续运行。 -
fdatasync:在操作完成前,将数据写入磁盘,确保数据已被真实存储。 -
fsync:与fdatasync相似,但也包括元数据的写入。
FLAG
-
append:以追加模式写入数据到输出文件。(仅对输出有效,建议与conv=notrunc一起使用以避免截断文件。) -
direct:使用直接 I/O 进行数据读写,绕过操作系统的缓存,可以提高处理大量数据时的效率。 -
directory:当目标不是一个目录的时候操作失败。 -
dsync:使用同步I/O进行数据写入,确保数据在返回之前确实被写入存储设备。 -
sync:类似于dsync,但同步操作也包括元数据,确保数据和元数据的完整性。 -
fullblock:累计完整的输入块,直到达到指定的块大小再处理。(仅适用于输入标志,有助于确保数据块的完整性。) -
nonblock:使用非阻塞 I/O,允许在没有立即可用数据时继续执行操作,而不是阻塞等待。 -
noatime:读取文件时不更新其访问时间,有助于减少对源文件系统的影响。 -
nocache:请求操作系统丢弃或避免使用缓存。 -
noctty:执行dd操作时,不将打开的文件分配为控制终端。 -
nofollow:不跟随符号链接。 -
count_bytes:将count=N选项视为字节计数而不是块计数。(仅适用于输入标志。) -
skip_bytes:将skip=N选项视为字节计数而不是块计数。(仅适用于输入标志。) -
seek_bytes:将seek=N选项视为字节计数而不是块计数。(仅适用于输出标志。)
参考示例
1. 创建一个大小为1GB的文件
dd if=/dev/zero of=1GB.file bs=1G count=1
使用 /dev/zero 作为输入文件(一个提供无限零值的特殊文件),输出到1GB.file,块大小设置为1GB,只复制1个块:
jay@ubuntu:~/Project/test/dd$ dd if=/dev/zero of=1GB.file bs=1G count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 8.12519 s, 132 MB/s
命令执行成功后查看文件属性,确认生成的文件大小为 1G:
jay@ubuntu:~/Project/test/dd$ ls -lh
total 1.1G
-rw-rw-r-- 1 jay jay 1.0G Feb 29 16:52 1GB.file
2. 备份磁盘区
sudo dd if=/dev/sda1 of=./backup.img bs=4M
将 /dev/sda1 分区复制到一个名为 backup.img 的文件中,同时使用 4MB 的块大小提高复制效率。
jay@ubuntu:~/Project/test/dd$ sudo dd if=/dev/sda1 of=./backup.img bs=4M
[sudo] password for jay:
128+0 records in
128+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 0.544554 s, 986 MB/s
3. 生成随机字符串
dd if=/dev/urandom bs=1 count=15 status=none | base64 -w 0
结合 /dev/urandom 设备,我们可以直接生成随机数序列,并且使用 base64 转换为可读字符串:
jay@ubuntu:~/Project/test/dd$ dd if=/dev/urandom bs=1 count=15 status=none | base64 -w 0
AyCv7e1kTuyAVTcnwpvK
示例中使用了抑制输出信息选项来保证输出内容的简洁,并且由于使用了 base64 将二进制数据转换为可读的字符,所以实际长度会比设定的 15 个字节要长,使用 dd 命令生成的二进制数据确实是 15 个字节。
4. 测试磁盘写入速度
dd if=/dev/zero of=./testfile bs=2G count=1 oflag=direct
使用 oflag=direct 可以使写入操作绕过操作系统缓存直接到磁盘,这个方法得到的写入速度更加真实,同时 /dev/zero 是个特殊设备,对它进行读取会产生无限的零值,并且不会产生 IO 操作。因此上述命令只存在写入IO 操作,其结果可以作为磁盘写入速度的依据:
jay@ubuntu:~/Project/test/dd$ dd if=/dev/zero of=./testfile bs=2G count=1 oflag=direct
0+1 records in
0+1 records out
2147479552 bytes (2.1 GB, 2.0 GiB) copied, 2.15183 s, 998 MB/s
5. 测试磁盘读取速度
dd if=./testfile of=/dev/null bs=2G count=1 iflag=direct
同样使用 iflag=direct 可以使读取操作绕过系统缓存,从而得到更真实的读取速度。其中 /dev/null 也是一个特殊设备,所有写入其中的数据都会被丢弃,不会产生 IO 操作,上述命令只存在读 IO 操作,其结果可以作为磁盘读取速度的依据:
jay@ubuntu:~/Project/test/dd$ dd if=./testfile of=/dev/null bs=2G count=1 iflag=direct
0+1 records in
0+1 records out
2147479552 bytes (2.1 GB, 2.0 GiB) copied, 1.34799 s, 1.6 GB/s
注意事项
-
选项参数中的
N和BYTES可以带有特定后缀,用来表示不同的数量单位,以字节为基准,以乘法形式与N或BYTES进行计算。如c=1,w=2,b=512,kB=1000,K=1024,MB=1000*1000,M=1024*1024,xM等同于M,GB=1000*1000*1000,G=1024*1024*1024。以此类推也支持T,P,E,Z,Y。 -
当 dd 命令正在执行数据复制或转换操作时,你可以向它发送一个
USR1信号。接收到这个信号后,dd进程会将当前的 I/O 统计信息打印到标准错误输出(stderr),然后继续执行其复制或转换操作。这允许用户在dd操作过程中实时监控其性能和进度,而不会中断或重启命令。 -
使用
dd命令时需要格外小心,错误的输入文件(if)或输出文件(of)路径可能导致数据丢失。 -
由于
dd命令非常强大,其能直接作用于物理硬盘,因此建议在执行dd命令前,再次检查命令的正确性,并确保有适当的数据备份。避免造成无法挽回的后果。
相关文章:
Linux 常用命令 - dd 【复制及转换文件内容】
简介 dd 命令源自于磁盘复制(disk dump)的缩写,是 Linux 和 Unix 系统中用于转换和复制文件的一个强大工具。它可以在复制过程中进行格式转换,支持不同的块大小,能够直接对硬盘设备进行操作,非常适合进行备…...
全网唯一免费无水印AI视频工具!
最近Morph Studio开始免费公测!支持高清画质,可以上传语音,同步口型,最重要的是生成的视频没有水印! Morph Studio国内就可以访问,可以使用国内邮箱注册(我用的163邮箱),…...
kafka(四)消息类型
一、同步消息 1、生产者 同步发送的意思就是,一条消息发送之后,会阻塞当前线程,直至返回 ack。 由于 send 方法返回的是一个 Future 对象,根据 Futrue 对象的特点,我们也可以实现同 步发送的效果,只需在调…...
Emacs之显示blame插件:blamer、git-messenger(一百四十四)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...
【10分钟速通webpack,全流程打包,编译,发包,全干货,附代码 】
需求 后端有个nodejs 基础库,用typescript编写,需要发包到代码仓库上,被其它业务引入。这其中就涉及了: 编译, 打包,发包。 工作流速览 前提依赖 webpack主体 npm install --save-dev webpack webpack…...
设计模式深入解析与实例应用
目录 工厂模式1.简单工厂模式2.工厂方法模式3.抽象工厂模式 策略模式责任链模式概述模板方法模式概述单例模式概述 工厂模式 工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳实践,旨在将对象的创建过程与使用过程分离,以提高代码的…...
服务器数据恢复—异常断电导致RAID6阵列中磁盘出现坏扇区的数据恢复案例
服务器存储数据恢复环境: 一台存储中有一组由12块SAS硬盘组建的RAID6磁盘阵列,划分为一个卷,分配给几台Vmware ESXI主机做共享存储。该卷中存放了大量Windows虚拟机,这些虚拟机系统盘是统一大小,数据盘大小不确定&…...
前端工程化08-新的包管理工具pnpm
1、历史原因解读 pnpm这个东西发布的时间是比较早的,但是在最近一两年的时候才开始流行,甚至是可以说非常的盛行,那么这个包到底是个什么东西的,那么我们先说下,原来的包管理工具到底有那些问题?比如说我们…...
章十九、JavaVUE —— 框架、指令、声明周期、Vue-cli、组件路由、Element
目录 一、 框架 ● vue.js 框架 ● 特点 ● Vue 安装 二、 第一个vue程序 ● 创建项目 编辑 ● 导入 vue.js ● 创建vue对象,设置属性,使用模版渲染到页面 介绍 — Vue.js (vuejs.org) 三、 vue指令 ● v-text ● v-html ● v-…...
正则表达式阅读理解
这段正则表达式可以匹配什么呢? 超级复杂的一段正则表达式。 ((max|min)\\s*\\([^\\)]*(,[^\\)]*)*\\)|[a-zA-Z][a-zA-Z0-9]*(_[a-zA-Z][a-zA-Z0-9]*)?(\\*||%)?|[0-9](\\.[0-9])?|\\([^\\)]*(,[^\\)]*)*\\))(\\s*[-*/%]\\s*([a-zA-Z][a-zA-Z0-9]*(_[a-zA-Z][…...
Apache Calcite Linq4j学习
Lin4j简介 Linq4j是Apache Calcite项目中的一个模块,它提供了类似于LINQ(Language-Integrated Query)的功能,用于在Java中进行数据查询和操作。Linq4j可以将逻辑查询转换为物理查询,支持对集合进行筛选、映射、分组等…...
FPGA SATA高速存储设计
今天来讲一篇如何在fpga上实现sata ip,然后利用sata ip实现读写sata 盘的目的,如果需要再速度和容量上增加,那么仅仅需要增加sata ip个数就能够实现增加sata盘,如果仅仅实现data的读写整体来说sata ip设计比较简单,下面…...
MySQL----为什么选择使用MySQL
在我们日常做项目的过程中,不论是个人还是企业,大多数会选择使用MySQL数据库作为后端数据库存储,它到底有什么优势,能够做到如此广为流传呢? 优点 稳定性:MySQL具有良好的稳定性和可靠性,能够保…...
01.音视频小白系统入门(新专栏)
目录 一、基础知识 二、音频 三、视频 四、流媒体服务器 五、收获 音视频技术在远程办公、在线教育、远程医疗等领域的应用广泛。 学习音视频技术有助于提升职业竞争力,满足市场需求。 掌握音视频基础知识对未来发展至关重要,基础不牢会导致后续学习…...
C++:enum枚举共用体union
enum枚举 C继承C的枚举用法 (1)典型枚举类型定义,枚举变量定义和使用 (2)枚举类型中的枚举值常量不能和其他外部常量名称冲突: 举例1宏定义,举例2另一个枚举 // 定义一个名为Color的枚举类型 enum Color {RED, // 红色,默认值…...
动手学深度学习(Pytorch版)代码实践 -计算机视觉-47转置卷积
47转置卷积 import torch from torch import nn from d2l import torch as d2l# 输入矩阵X和卷积核矩阵K实现基本的转置卷积运算 def trans_conv(X, K):h, w K.shapeY torch.zeros((X.shape[0] h - 1, X.shape[1] w - 1))for i in range(X.shape[0]):for j in range(X.shap…...
LinkedIn被封原因和解封方法
对于初识领英和对领英生态规则不熟悉的人来说,很容易造成领英账号被封号(被限制登录)的情况,那么如何才能避免和解决领英帐号被封号(被限制登录)的难题呢? 领英帐号被封号或被限制登录主要会有两类情况。 首先要搞清楚, Linkedi…...
redis sentinel 部署
安装Redis 建议版本不要太低 > 6.2,我这里是redis 7.2.5 curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg echo "deb [signed-by/usr/share/keyrings/redis-archive-keyring.gpg] http…...
spring boot (shiro)+ websocket测试连接不上的简单检测处理
1、用前端连接测试的demo一切正常,但是到了项目中连接不上了 一开始以为是地址错,但是换了apifox测试也是不可以。 2、考虑是shiro进行了拦截了,所以就访问不到了地址,那么就放行。 3、再次用apifox测试,成功了。 当然…...
Jenkins - Python 虚拟环境
Jenkins - Python 虚拟环境 引言Python 虚拟环境创建 Python 虚拟环境安装 virtualenv(可选)创建虚拟环境激活虚拟环境安装依赖包退出虚拟环境(可选)注意 Python 虚拟环境实践 引言 Automation 脚本通常会部署到 Jenkins 上运行&…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
