linux: dd命令来拷贝文件

本文介绍如何使用dd命令高效地进行磁盘备份与恢复操作。通过多个实例展示了不同场景下的应用方法,例如整盘备份、创建磁盘镜像、从备份恢复等。还介绍了如何利用gzip进行压缩备份及解压恢复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

dd命令用来拷贝文件非常方便

用法:

dd [选项]

dd if=PATH1 of=PATH2

示例:

1.将本地的/dev/hdb整盘备份到/dev/hdd

dd if=/dev/hdb of=/dev/hdd

2.将/dev/hdb全盘数据备份到指定路径的image文件

dd if=/dev/hdb of=/root/image

3.将备份文件恢复到指定盘

dd if=/root/image of=/dev/hdb

4.备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径

dd if=/dev/hdb | gzip > /root/image.gz

5.将压缩的备份文件恢复到指定盘

gzip -dc /root/image.gz | dd of=/dev/hdb

6.备份磁盘开始的512个字节大小的MBR信息到指定文件

dd if=/dev/hda of=/root/image count=1 bs=512

参数说明:

if =输入文件(或设备名称)。 

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

ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数。 

skip = blocks 跳过读入缓冲区开头的ibs*blocks块。 

obs = bytes 一次写入bytes字节,即写入缓冲区的字节数。 

bs = bytes 同时设置读/写缓冲区的字节数(等于设置ibs和obs)。 

cbs = byte 一次转换bytes字节。 

count=blocks 只拷贝输入的blocks块。 

conv = ASCII 把EBCDIC码转换为ASCIl码。 

conv = ebcdic 把ASCIl码转换为EBCDIC码。 

conv = ibm 把ASCIl码转换为alternate EBCDIC码。 

conv = block 把变动位转换成固定字符。 

conv = ublock 把固定位转换成变动位。 

conv = ucase 把字母由小写转换为大写。 

conv = lcase 把字母由大写转换为小写。 

conv = notrunc 不截短输出文件。 

conv = swab 交换每一对输入字节。 

conv = noerror 出错时不停止处理。 

conv = sync 把每个输入记录的大小都调到ibs的大小(用NUL填充)。 
### 使用 `dd` 命令高效复制大文件的最佳实践 在 Linux 中,`dd` 是一种强大的工具,用于低级数据操作,例如创建磁盘映像、克隆分区以及复制大型文件。为了优化性能并减少资源消耗,在使用 `dd` 复制大文件时可以遵循以下最佳实践: #### 1. 设置合适的块大小 (bs 参数) `dd` 的默认块大小为 512 字节 (`bs=512`) ,这通常不适合处理大文件。较大的块大小能够显著提高 I/O 性能,因为减少了读写次数。推荐设置为几兆字节(MB),具体取决于硬件能力。 ```bash dd if=/source/file of=/destination/file bs=4M conv=sparse,status=progress ``` 上述命令中的参数解释如下: - **if**: 输入文件路径。 - **of**: 输出文件路径。 - **bs=4M**: 将块大小设为 4 MB,可以根据需求调整到更大的值如 8M 或更高[^1]。 - **conv=sparse**: 如果源文件中有大量连续零,则会跳过这些区域以节省空间。 - **status=progress**: 显示实时进度更新。 #### 2. 利用同步选项提升一致性 当目标设备是非易失性存储器时,建议加入 `sync` 转换标志来强制完成每次写入后再继续下一次操作,从而增强数据可靠性。 ```bash dd if=/dev/sda1 of=/backup/image.dd bs=1G conv=fsync,sync ``` 这里增加了两个额外转换标记: - **fsync**: 确保所有缓冲区被刷新至实际介质上之前不会返回成功状态给调用者。 - **sync**: 类似于 fsync 功能但作用范围更广一些[^2]。 #### 3. 并行化多线程传输过程 对于非常庞大的文件或者需要跨网络环境下的远程拷贝场景来说,单一线程可能无法充分利用带宽资源。此时可以通过管道组合多个进程实现并发执行效果。 ```bash pv /path/to/largefile | gzip -c | ssh user@remote 'dd of=/target/path/file.gz' ``` 此脚本利用了三个独立程序共同协作完成任务: - **pv**: 实现可视化的流量监控功能的同时保持原有输入流不变。 - **gzip**: 对原始数据压缩减小体积加快传送速度。 - **ssh & dd**: 远端登录并通过标准输出重定向保存最终结果[^3]。 #### 4. 测试不同配置找到最优解 由于每套系统的具体情况都不尽相同,因此有必要针对特定条件做适当微调测试才能得出最理想的结果。比如改变 buffer 缓冲区容量(`ibs`, `obs`)或是尝试不同的调度算法等方法都值得探索一番。 --- ```python import subprocess def copy_large_file(source, destination, block_size='4M'): """Use DD Command to Copy Large Files Efficiently.""" cmd = f"dd if={source} of={destination} bs={block_size} conv=sparse,status=progress" result = subprocess.run(cmd, shell=True, check=True, text=True, capture_output=True) return result.stdout.strip() # Example Usage output_message = copy_large_file('/mnt/source.iso', '/home/user/copy.iso') print(output_message) ``` 以上 Python 函数封装了一个简单的接口用来简化日常工作中频繁使用的重复劳动环节。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值