dd命令使用总结

dd常用参数

if:就是input file,也可以是某设备文件
of:就是output file,也支持是设备文件
bs:规划的一个block大小,若未指定则默认为512byte
count:指定bs的数量
skip=n,指 if 后面的原文件跳过 n bytes 再开始读取;
seek=n,指 of 后面的目标文件跳过 n bytes 再开始写入;
oflag=direct,真实磁盘io

测试硬盘读写速度
  • 测试磁盘的IO写速度
~# time dd if=/dev/zero of=1.db bs=8k count=30000  
30000+0 records in
30000+0 records out
245760000 bytes (246 MB) copied, 0.731931 s, 336 MB/s

real    0m0.735s
user    0m0.001s
sys     0m0.151s
  • 测试磁盘的IO读速度
~# dd if=test.dbf bs=8k count=300000 of=/dev/null
30000+0 records in
30000+0 records out
245760000 bytes (246 MB) copied, 0.0342157 s, 7.2 GB/s
dd备份磁盘
  • 查看磁盘信息
root@aikeru:~# fdisk -u -l /dev/sdb
Disk /dev/sdb: 50 MiB, 52428800 bytes, 102400 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: C94E55EA-A4D2-4E78-9D73-46CBAE7A03EF

Device     Start    End Sectors Size Type
/dev/sdb1   2048  32767   30720  15M EFI System
/dev/sdb2  32768  94207   61440  30M Linux filesystem
/dev/sdb3  94208 102366    8159   4M BIOS boot
  • 备份为文件

    • count=fdisk命令中最大的end数+1
dd bs=512 count=102367 if=/dev/sdb of=./nas.img
  • 备份到远程主机
dd bs=512 count=102367 if=/dev/sdb | ssh 192.168.2.2 "of=./nas.img"  
  • 添加硬盘不重启
partprobe
for i in `seq 0 32`; do echo "- - -" > /sys/class/scsi_host/host$i/scan;done
  • 还原
dd bs=512 count=102367 if=./nas.img of=/dev/sdc
dd克隆硬盘
  • 本地克隆
dd bs=512 count=102367 if=/dev/sdb of=/dev/sdc
  • 远程克隆
dd bs=512 count=102367 if=/dev/sdb | ssh 192.168.2.2 "of=./dev/sdc"  
dd添加swap分区
    dd if=/dev/zero of=/swapfile bs=1M count=4000
    mkswap /swapfile
    chmod 600 /swapfile
    swapon /swapfile 

转载于:https://blog.51cto.com/m51cto/2372674

<think>嗯,用户让我介绍一下dd命令的详解。首先,我需要回忆一下dd命令的基本用法和常见用途。dd是一个在Unix和类Unix系统中常用的命令行工具,主要用于转换和复制文件。不过它的功能其实挺强大的,可能用户需要了解它的各种参数和实际应用场景。 首先,我应该从dd的基本语法开始,说明各个常用选项的作用,比如if(输入文件)、of(输出文件)、bs(块大小)、count(块数量)等。这些是用户最常接触的参数,需要详细解释每个参数的意义和如何组合使用。 然后,可能需要举一些实际的例子,比如用dd制作启动盘、备份磁盘、测试磁盘性能等等。这些例子能帮助用户更好地理解dd的应用场景。比如,制作启动盘通常需要指定输入文件为ISO镜像,输出文件是USB设备,这时候需要注意设备路径的正确性,避免误操作。 另外,用户可能对dd的安全注意事项不太清楚,特别是dd如果使用不当可能会覆盖重要数据。这部分需要特别强调,提醒用户在操作前确认输入输出参数,避免数据丢失。例如,误将of指向系统磁盘而不是USB设备,可能会导致系统无法启动。 还需要提到dd的一些高级用法,比如转换数据格式、调整字节序、处理文本文件等。虽然这些功能可能不如复制和备份常用,但对于有特定需求的用户来说可能很有用。例如,使用conv=swab来交换字节序,处理不同系统间的数据交换问题。 测试磁盘读写性能也是一个常见的用例,这时候可以用dd配合不同的块大小来测试速度。需要解释bs参数和count参数如何影响测试结果,以及如何解读输出的统计信息,比如时间和速度。 可能还需要比较dd与其他工具(如cp、rsync)的区别,说明在什么情况下应该选择dd而不是其他工具。比如,当需要精确控制块大小或者进行底层数据操作时,dd更为合适。 用户可能还会关心dd命令的输出信息,比如记录了复制的字节数、时间、速度等,这些信息对于调试和优化操作很有帮助。需要解释这些输出项的含义,以及如何根据这些信息调整参数。 此外,可能有一些常见的错误使用案例,比如误操作导致数据丢失,或者块大小设置不合理导致性能低下。这部分需要给出一些避免错误的建议,比如使用status=progress来实时查看进度,或者在不确定的时候先进行dry run。 最后,总结一下dd的优缺点,强调其强大但需要谨慎使用,同时提供一些学习资源或进一步阅读的链接,方便用户深入理解。</think>### `dd`命令详解 `dd`是Linux/Unix系统中功能强大的**底层数据复制工具**,支持按块(block)读写、转换数据格式等。常用于磁盘克隆、备份、性能测试等场景。 --- #### **一、基本语法** ```bash dd if=<输入文件> of=<输出文件> [选项] ``` --- #### **二、核心选项解析** | 选项 | 作用 | |-----------|----------------------------------------------------------------------| | `if=FILE` | 指定输入文件(默认为标准输入) | | `of=FILE` | 指定输出文件(默认为标准输出) | | `bs=N` | 设置单次读写块的大小(如`bs=4M`,默认512字节) | | `count=N` | 复制`N`个块后停止(按`bs`指定的块大小计算) | | `skip=N` | 跳过输入文件的前`N`个块 | | `seek=N` | 跳过输出文件的前`N`个块 | | `conv=参数` | 数据转换(如`notrunc`不截断输出文件,`sync`填充无效块为0) | --- #### **三、经典应用场景** 1. **克隆磁盘/分区** ```bash dd if=/dev/sda of=/dev/sdb bs=4M status=progress ``` - 将磁盘`sda`完整克隆到`sdb`,显示进度(`status=progress`)。 2. **制作启动U盘** ```bash dd if=ubuntu.iso of=/dev/sdX bs=4M conv=fdatasync ``` - 将ISO镜像写入U盘设备`sdX`,强制同步写入(`conv=fdatasync`)。 3. **备份MBR(主引导记录)** ```bash dd if=/dev/sda of=mbr.bak bs=512 count=1 ``` - 备份磁盘前512字节的MBR到文件。 4. **测试磁盘读写速度** ```bash dd if=/dev/zero of=testfile bs=1G count=1 oflag=direct ``` - 通过写入1GB数据测试写入速度(绕过缓存,`oflag=direct`)。 5. **填充磁盘剩余空间为0** ```bash dd if=/dev/zero of=/mnt/filler bs=1M; rm /mnt/filler ``` - 生成临时文件占满空间后删除,便于后续压缩磁盘镜像。 --- #### **四、注意事项** 1. **高危操作警告** - `of=`参数错误可能导致数据丢失!务必确认目标设备/文件正确。 - 示例错误:`dd if=file of=/dev/sda`可能覆盖系统盘。 2. **性能优化** - 增大`bs`(如`bs=4M`)可提升速度,但需权衡内存和磁盘特性。 - 使用`oflag=direct`或`iflag=direct`绕过缓存,测试真实速度。 3. **数据完整性** - 添加`conv=fsync`确保所有数据写入物理磁盘。 - 网络传输时,可结合`gzip`压缩: ```bash dd if=/dev/sda | gzip > sda.img.gz ``` --- #### **五、扩展技巧** 1. **转换数据格式** - 大小写转换:`dd if=input.txt of=output.txt conv=lcase` - 交换字节序:`dd if=file.bin of=swapped.bin conv=swab` 2. **仅复制部分数据** ```bash dd if=/dev/sda of=partition.img bs=1M skip=2048 count=4096 ``` - 从磁盘2048MB处开始,复制4GB数据(跳过前2048个1MB块,复制4096个块)。 --- #### **六、常见问题** 1. **`dd`与`cp`的区别?** - `dd`按块操作,适合底层设备或精确控制;`cp`按文件操作,更易用。 2. **如何中断运行中的`dd`?** - 发送`SIGINT`信号(`Ctrl+C`),但已写入的数据不可逆。 --- **总结**:`dd`功能强大但需谨慎使用,熟练掌握后可应对磁盘操作、数据恢复等复杂任务。建议操作前备份重要数据!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值