dd命令详解

dd命令: convert and copy a file
用法:
  dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
   bs=#: block size, 复制单元大小
   count=#:复制多少个bs
   of=file 写到所命名的文件而不是到标准输出
   if=file 从所命名文件读取而不是从标准输入
   bs=size 指定块大小(既是ibs也是obs)
   ibs=size 一次读size个byte
   obs=size 一次写size个byte
   cbs=size 一次转化size个byte
   skip=blocks 从开头忽略blocks个ibs大小的块
   seek=blocks 从开头忽略blocks个obs大小的块
   count=n 只拷贝n个记录
用指定的参数转换文件
   conv=conversion[,conversion…]
   转换参数:
    ascii 转换 EBCDIC 为 ASCII
    ebcdic 转换 ASCII 为 EBCDIC
    block 转换一行数据为长度为 cbs 的记录,不足部分用空格填充。
    unblock 替代cbs长度的每一行尾的空格为新行
    lcase 把大写字符转换为小写字符
    ucase 把小写字符转换为大写字符
    nocreat 不创建输出文件
    noerror 出错时不停止
    notrunc 不截断输出文件
    sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐  
备份:
  dd if=/dev/sdx of=/dev/sdy
   将本地的/dev/sdx整盘备份到/dev/sdy
  dd if=/dev/sdx of=/path/to/image
   将/dev/sdx全盘数据备份到指定路径的image文件
  dd if=/dev/sdx | gzip >/path/to/image.gz
   备份/dev/sdx全盘数据,并利用gzip工具进行压缩,保存到指定路径
恢复:
  dd if=/path/to/image of=/dev/sdx
   将备份文件恢复到指定盘
  gzip -dc /path/to/image.gz | dd of=/dev/sdx
   将压缩的备份文件恢复到指定盘
拷贝内存资料到硬盘
  dd if=/dev/mem of=/root/mem.bin bs=1024
   将内存里的数据拷贝到root目录下的mem.bin文件
从光盘拷贝iso镜像
  dd if=/dev/cdrom of=/root/cd.iso
   拷贝光盘数据到root文件夹下,并保存为cd.iso文件
销毁磁盘数据
  dd if=/dev/urandom of=/dev/sda1
   利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。执行此操作以后,/dev/ sda1将无法挂载,创建和拷贝操作无法执行。
得到最恰当的block size
  dd if=/dev/zero bs=1024 count=1000000
   of=/root/1Gb.file
  dd if=/dev/zero bs=2048 count=500000
   of=/root/1Gb.file
  dd if=/dev/zero bs=4096 count=250000
   of=/root/1Gb.file
通过比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小
测试硬盘读写速度
  dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
  dd if=/root/1Gb.file bs=64k | dd of=/dev/null
  通过上两个命令输出的执行时间,可以计算出测试硬盘的写/读/速度
修复硬盘
  dd if=/dev/sda of=/dev/sda
   当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生消磁点。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生,且这个过程是安全高效的。
示例:
  1.备份MBR:
       [root@anonymous ~]#dd if=/dev/sda1 of=/tmp/mbr.bak bs=512
        count=11+0 records in
       1+0 records out
       512 bytes (512 B) copied, 0.000160395 s, 3.2 MB/s

  2.有一个大于2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes,请问如何实现?
       [root@anonymous ~]#dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc
       128+0 records in
       128+0 records out
       128 bytes (128 B) copied, 0.000421017 s, 304 kB/s

  3.创建一个2G的文件系统,块大小为2048byte,预留1%可用空间,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,且默认有acl挂载选项

       [root@anonymous ~]#dd if=/dev/zero of=test bs=1M count=2048
       2048+0 records in
       2048+0 records out
       2147483648 bytes (2.1 GB) copied, 121.521 s, 17.7 MB/s
       [root@anonymous ~]#mkfs.ext4 -b 2048 -L ‘TEST’ -m 1 test
       mke2fs 1.41.12 (17-May-2010)
       test is not a block special device.
       Proceed anyway? (y,n) y
       Filesystem label=TEST
       OS type: Linux
       Block size=2048 (log=1)
       Fragment size=2048 (log=1)
       Stride=0 blocks, Stripe width=0 blocks
       131072 inodes, 1048576 blocks
       10485 blocks (1.00%) reserved for the super user
       First data block=0
       Maximum filesystem blocks=537919488
       64 block groups
       16384 blocks per group, 16384 fragments per group
       2048 inodes per group
       Superblock backups stored on blocks:
        16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816

       Writing inode tables: done                           
       Creating journal (32768 blocks): done
       Writing superblocks and filesystem accounting information: done
       This filesystem will be automatically checked every 35 mounts or
       180 days, whichever comes first.  Use tune2fs -c or -i to override.
       [root@anonymous ~]#tune2fs -o acl test
       tune2fs 1.41.12 (17-May-2010)
       [root@anonymous ~]#echo ‘/root/test /mnt/test  ext4  defaults,loop  0 0’ >> /etc/fstab
       [root@anonymous ~]#mount -a 

原创文章,作者:mrlapuga,如若转载,请注明出处:http://www.178linux.com/71342

(2)
上一篇 2017-03-19 10:23
下一篇 2017-03-19 14:59

相关推荐

  • 文本处理工具之sed

                         文本处理工具之sed 一 、sed的简介    1、Stream EDitor…

    2017-05-01
  • 8月11日shell编程脚本及课后作业

    shell脚本编程 本章内容 编程基础 脚本基础格式 变量 运算 条件测试 流程控制 函数 数组 高级字符串操作 高级变量 配置用户环境 编程基础 程序:指令+数据    程序编程风格:       过程式:以指令为中心,数据服务于指令   &nbs…

    Linux干货 2016-08-15
  • lamp的搭建

    方法一编译安装amp:   1.系统环境:CentOS 6,7       CentOS6:apr,apr-util的版本为1.3.9,不适合httpd-2.4    CentOS7:apr,apr-util的版本为1.4+2.开发环境需要安装:    Developm…

    Linux干货 2016-10-16
  • DNS 的搭建 子域授权及转发(正向解析)

           dns(名称解析服务).它的作用就是将主机名解析成ip地址的过程,同时它是一个分布式,分层次的主机名管理架构。为了我们能更好的了解与理解,实验才是更好的。     安装部署DNS服务: 一.首先安装DNS服务器软件 bind,还有其他相关的软件包,有bind-libs(库文件),bin…

    2017-07-31
  • 内核编译安装 (用NTFS模块)

    内核编译安装 (用NTFS模块) 1 rz 下载的 的内核最新文件 在这 https://www.kernel.org/ 2 tar xvf linux-4.12.10.tar.xz 解压文件 内核文件一般都放在 /usr/src/ 3 cd linux-4.12.10/ 4 [root@god linux-4.12.10]#cp /boot/config-…

    2017-09-04
  • 磁盘冗余阵列 RAID

    一、磁盘冗余阵列 RAID(Redundant Array of Independent Disk)     RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术。根据磁盘陈列的不同组合方式,可以将RAID分为不同的级别。 其中提高传输速率和…

    Linux干货 2016-09-07