玩转Linux dd命令:备份与恢复指南

欢迎来到我的博客,代码的世界里,每一行都是一个故事


在这里插入图片描述

🎏:你只管努力,剩下的交给时间

🏠 :小破站

玩转Linux dd命令:备份与恢复指南

    • 前言
    • 简介
      • 基本语法
      • 常用选项
    • 示例
        • 3. 高级用法
    • 性能优化
      • 1. 调整块大小(`bs` 选项)
      • 2. 使用直接 I/O(`oflag=direct` 选项)
      • 3. 异步 I/O(`oflag=dsync` 或 `iflag=dsync` 选项)
      • 4. 禁用错误检测(`conv=noerror,sync` 选项)
      • 5. 多线程处理(`pv` 工具)
      • 6. 调整输入输出缓冲区大小(`ibs` 和 `obs` 选项)
      • 7. 设置进度显示(`status=progress` 选项)
      • 总结

前言

在Linux世界中,有一个命令被称为数据处理的“瑞士军刀”,那就是dd命令。无论你是需要复制大文件、创建磁盘镜像,还是进行数据备份,dd命令都能轻松应对。虽然它功能强大,但也常被新手认为复杂难用。今天,我们就来揭开dd命令的神秘面纱,看看它如何帮助我们高效地处理数据。

简介

dd 是一个在 Unix 和类 Unix 操作系统中用于低级别数据复制和转换的命令。它的名字来源于 IBM 的 JCL(Job Control Language)中的一条类似命令。dd 是一个强大且灵活的工具,可以用于备份、恢复、创建磁盘映像、清除磁盘数据等操作。

以下是 dd 命令的基本用法和一些常见选项:

基本语法

dd if=<输入文件> of=<输出文件> [选项]
  • if(input file):输入文件或设备。例如,if=/dev/sda 表示读取整个硬盘。
  • of(output file):输出文件或设备。例如,of=/dev/sdb 表示写入另一个硬盘。

常用选项

  • bs(block size):指定读写的块大小。例如,bs=4M 表示每次读写 4MB 的数据。
  • count:指定要复制的块数。例如,count=100 表示只复制 100 个块。
  • status:控制状态输出的详细程度。例如,status=progress 会显示复制进度。
  • conv:指定数据转换选项。例如,conv=sync,noerror 表示同步写入并忽略读写错误。

示例

  • 复制文件:将一个文件复制到另一个文件。

    dd if=/path/to/source_file of=/path/to/destination_file
    
  • 备份磁盘分区:将一个磁盘分区备份到一个镜像文件。

    dd if=/dev/sda1 of=/path/to/backup.img
    
  • 恢复磁盘分区:将镜像文件恢复到磁盘分区。

    dd if=/path/to/backup.img of=/dev/sda1
    
3. 高级用法
  • 设置块大小:使用bs参数设置块大小,以提高复制效率。

    dd if=/dev/sda of=/path/to/backup.img bs=64K
    
  • 跳过和截取数据:使用skipcount参数跳过输入文件中的部分数据或仅复制部分数据。

    dd if=/dev/sda of=/path/to/backup.img skip=1M count=100M
    
  • 数据格式转换:使用conv参数进行数据格式转换,如转换为小写或大写。

    dd if=/path/to/source_file of=/path/to/destination_file conv=lcase
    
  • 生成一个 1GB 的随机数据文件

    dd if=/dev/urandom of=randfile bs=1M count=1024 status=progress
    
  • 转换文本文件的换行符

    dd if=unixfile.txt of=dosfile.txt conv=unix2dos
    
  • 创建启动盘:将ISO文件写入U盘,制作启动盘。

    dd if=/path/to/ubuntu.iso of=/dev/sdb bs=4M status=progress
    
  • 磁盘性能测试:使用dd命令测试磁盘的读写速度。

    dd if=/dev/zero of=testfile bs=1G count=1 oflag=direct
    

性能优化

dd 命令可以通过调整一些参数来优化性能,特别是在处理大文件或设备时。以下是一些常用的性能优化方法:

1. 调整块大小(bs 选项)

选择合适的块大小可以显著提高 dd 的性能。块大小太小会导致系统调用频繁,增加开销;块大小太大会浪费内存。一般来说,较大的块大小(如 4MB 或 8MB)通常能提高传输速度。

dd if=/dev/sda of=/path/to/backup.img bs=4M status=progress

2. 使用直接 I/O(oflag=direct 选项)

使用直接 I/O 选项可以绕过操作系统的缓存,提高大文件复制的性能。这对于磁盘备份和恢复尤其有效。

dd if=/dev/sda of=/path/to/backup.img bs=4M oflag=direct status=progress

3. 异步 I/O(oflag=dsynciflag=dsync 选项)

异步 I/O 可以在写入数据时不等待 I/O 操作完成,这样可以提高数据传输效率。dsync 选项可以保证数据完整性。

dd if=/dev/sda of=/path/to/backup.img bs=4M oflag=dsync status=progress

4. 禁用错误检测(conv=noerror,sync 选项)

在复制过程中,如果遇到错误,默认情况下 dd 会停止。使用 noerror 选项可以忽略错误,继续复制。sync 选项可以填充错误的块,使输出文件和输入文件大小一致。

dd if=/dev/sda of=/path/to/backup.img bs=4M conv=noerror,sync status=progress

5. 多线程处理(pv 工具)

dd 本身是单线程的,可以通过 pv 工具来监控和调整数据流,以提高性能。pv 工具允许实时监控进度,并可以利用多线程进行数据处理。

安装 pv 工具:

sudo apt-get install pv

使用 pvdd 组合:

pv -tpreb /dev/sda | dd of=/path/to/backup.img bs=4M

6. 调整输入输出缓冲区大小(ibsobs 选项)

可以分别设置输入和输出的块大小,以优化特定设备的读写性能。例如,输入块大小为 1MB,输出块大小为 4MB:

dd if=/dev/sda of=/path/to/backup.img ibs=1M obs=4M status=progress

7. 设置进度显示(status=progress 选项)

虽然这不会直接提高性能,但 status=progress 选项可以实时显示进度,使你能够监控 dd 的执行情况,有助于识别和优化性能瓶颈。

dd if=/dev/sda of=/path/to/backup.img bs=4M status=progress

总结

通过适当调整 dd 的参数和选项,可以显著提高数据传输的性能。根据具体的使用场景和硬件环境,选择合适的块大小、直接 I/O、异步 I/O 等选项,可以优化 dd 的执行效率。在进行重要数据操作前,建议先进行小规模测试,确保选项设置正确且高效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/860262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python-九九乘法表(对齐式1)

[题目描述] 输出九九乘法表&#xff0c;输出格式见样例。输入格式&#xff1a; 无输出格式&#xff1a; 输出乘法表&#xff0c;对齐方式见样例输出。样例输入 无样例输出 来源/分类&#xff08;难度系数&#xff1a;一星&#xff09; 完整代码展示&#xff1a; #对齐式1 a[] …

夏季生鲜防损规范

一、引言 在夏季&#xff0c;高温与高湿度的环境条件对生鲜商品的品质和保存构成了严峻挑战&#xff0c;生鲜商品由于其天然的易腐特性&#xff0c;在夏季极易发生变质和损耗&#xff0c;那么超市夏季生鲜防损规范主要包含哪几个方面呢&#xff1f; 二、生鲜商品分类及特点 …

使用 MediaSession API 控制 Web 媒体播放

在现代的 web 应用程序中&#xff0c;多媒体播放已经成为了很常见的功能。为了提供更好的用户体验&#xff0c;我们可以使用 MediaSession API 来控制网页中的媒体播放。 什么是 MediaSession API&#xff1f; MediaSession API 允许网页控制媒体会话&#xff0c;例如音频和视…

C/C++混合编译说明

C调用C的函数: C的头文件中声明&#xff0c;被C调用的函数&#xff0c;是以C的方式编译 C的头文件&#xff1a; #ifdef __cplusplus extern "C" { #endif void func_c(void); #ifdef __cplusplus } #endif C调用C的函数&#xff1a; C的源文件中声明&#xff…

Windows操作防火墙命令

Windows操作防火墙命令 启用防火墙&#xff1a; netsh advfirewall set allprofiles state on禁用防火墙&#xff1a; netsh advfirewall set allprofiles state off添加新的入站规则允许端口80&#xff08;HTTP&#xff09;&#xff1a; netsh advfirewall firewall add r…

Python生成器嵌套太多?使用yield from秒变简洁!

目录 1、yield from基础概念 🌐 1.1 yield关键字回顾 1.2 yield from引入动机 2、yield from深入解析 🧭 2.1 语法与用法 2.2 传递生成器控制权 2.3 与迭代器的高效整合 2.4 与传统yield对比优势 3、实战应用示例 📈 3.1 链接多个生成器 3.2 简化递归生成器实…

Git之checkout/reset --hard/clean -f区别(四十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Elasticsearch:倒数排序融合 - Reciprocal rank fusion - 8.14

警告&#xff1a;此功能处于技术预览阶段&#xff0c;可能会在未来版本中更改或删除。语法可能会在正式发布之前发生变化。Elastic 将努力修复任何问题&#xff0c;但技术预览中的功能不受官方正式发布功能的支持 SLA 约束。 倒数排序融合 (reciprocal rank fusion - RRF) 是一…

【数学】Leetcode 50. Pow(x, n)【中等】

Pow(x, n) 实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数&#xff08;即&#xff0c;xn &#xff09;。 示例 1&#xff1a; 输入&#xff1a;x 2.00000, n 10 输出&#xff1a;1024.00000 示例 2&#xff1a; 输入&#xff1a;x 2.10000, n 3 输出&#xf…

wireshark抓包方法及常用过滤命令

wireshark是一个抓包小能手&#xff0c;排查网络问题的时候常常离不开&#xff0c;网上的使用教程也有很多&#xff0c;但多数是抓的有线数据包&#xff0c;本文主要介绍使用wireshark抓空口包的方法和常用命令。 -----再牛逼的梦想&#xff0c;也抵不住傻逼般的坚持&#xff…

OpenAI: 禁止在不支持的地区使用其 API

OpenAI 给开发者发邮件表示&#xff0c;禁止其 API 用于不被允许的地区&#xff0c;否则 7 月 9 日将面临封杀。 本次封杀似乎不区分 IP &#xff0c;而是直接按照地理位置。

电商数据自动化批量采集:商品数据|订单数据|店铺数据|图片搜索|关键字搜索

电商竞争白热化的今天&#xff0c;一个电商卖家往往会在多个平台铺设店铺来获取更多的客户。有没有什么高效的电商数据采集方式呢&#xff1f; 针对主流电商平台数据采集、ERP、OA等业务系统数据采集、行业数据采集&#xff0c;可以用以下5种电商数据采集方式&#xff1a; API…

【Linux】Ubuntu 部署 Zabbix 7.0

实验环境&#xff1a;Ubuntu-22.04 官方下载地址&#xff1a; 下载Zabbix 7.0 LTS for Ubuntu 22.04 (Jammy), MySQL, Apache 1、下载 Zabbix 官方安装包以及环境配置 下载 zabbix 安装包 wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabb…

Perl如何进行错误处理和创建子程序详解

在Perl中创建子程序&#xff08;类似于其他编程语言中定义函数&#xff09;的基本语法如下&#xff1a; 使用sub关键字&#xff1a;这是定义子程序的关键字。 子程序名称&#xff1a;可以是任何有效的Perl标识符。 参数列表&#xff1a;子程序可以有零个或多个参数&#xff0…

Spring-Boot整合Redis【随记】

基于spring boot整合. 1 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2 编写redis的配置文件 application.yml进行编写. 属性: url por…

Django网站开发技术的应用(理论篇)

概述 Django提供了许多功能。比如在安全方面上Django提供了csrf防护机制以防止跨域脚本攻击、使用身份验证机制以防止未授权的登录等等。在数据库方面上Django提供了orm&#xff08;面向对象的数据库访问技术&#xff09;方便了对数据库的操作。此外Django还提供自定义模板、缓…

掌握Three.js:学习路线,成为3D可视化开发的高手!

学习Three.js可以按照以下路线进行&#xff1a; 基础知识&#xff1a; 首先要了解基本的Web开发知识&#xff0c;包括HTML、CSS和JavaScript。如果对这些知识已经比较熟悉&#xff0c;可以直接进入下一步。 Three.js文档&#xff1a; 阅读Three.js官方文档是学习的第一步。官…

(更新)2004-2022年 全国各省环境污染治理投资额数据

环境污染治理投资额是衡量一个国家或地区在环境保护和污染治理方面投入力度的重要经济指标。它体现了政府和企业在改善环境质量、推动绿色发展方面的共同努力&#xff0c;同时也是环境规制政策执行强度的一个反映。 数据简介 环境污染治理投资额涵盖了以下几个方面&#xff1…

APP软件系统的开发流程

APP软件系统的开发是一个复杂的过程&#xff0c;需要多方面的知识和技能。建议选择专业的开发团队进行开发&#xff0c;以确保APP的质量和成功。APP软件系统的开发流程通常包括以下几个阶段。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合…

react获取use声明的变量的值

在React中&#xff0c;使用useState Hook 可以让你在函数组件中添加状态。useState返回一个状态变量&#xff08;当前的值&#xff09;和一个用于更新这个状态变量的函数。要获取useState中的值&#xff0c;你只需要直接使用这个状态变量即可。 下面是一个简单的例子&#xff…