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)
mrlapugamrlapuga
上一篇 2017-03-19 10:23
下一篇 2017-03-19 14:59

相关推荐

  • 第四周作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@centos7 ~]# cp -r /etc/skel/ /home/tuser1 [root@centos7 ~]# chmod …

    Linux干货 2017-01-16
  • Centos6基于虚拟主机的Lamp配置bbs、Blog、PhpMyAdmin应用程序

    Centos6实现基于虚拟主机的各应用程序搭建: 一、配置三个基于名称的虚拟主机;       虚拟主机一、discuzX       虚拟主机二、wordpress       虚拟主机三…

    Linux干货 2016-10-09
  • linux计划任务

    linux计划任务、周期性任务执行 未来的某时间点执行一次某任务:at,batch 周期性运行某任务:crontab 执行结果: 会通过邮件发送给用户, 存放在/var/spool/mail/UserName ~]# ss -tnl 或者 ~]# netstat -tnlp  查看是否有25号端口打开,来判断本机的邮件服务是否正常打开 本地电子邮件…

    Linux干货 2016-09-19
  • linux学习总结-linux基础(之二)

    六、在Linux基础目录命名法则及功用 根据FHS(http://www.pathname.com/fhs/)的官方文件指出, 他们的主要目的是希望让使用者可以了解到已安装软件通常放置于那个目录下, 所以他们希望独立的软件开发商、操作系统制作者、以及想要维护系统的用户,都能够遵循FHS的标准。 也就是说,FHS的重点在于规范每个…

    Linux干货 2016-09-23
  • M20 – 1- 第二周博客(1):帮助手册查询的使用

    Linux系统中存在诸多的命令,而这些命令分为内键命令和外部命令。如何查询命令属于内部还是外部呢。前一篇博客已经介绍type命令,type命令可以区分命令属于内部还是外部,下面举个例子: 为什么这一期博客还重复讲如何区分内部与外部命令呢,因为在man手册查询中,内部命令并不是使用man查询帮助手册,仅仅使用与外部命令,那内键命令如何查询呢,接下来要讲的就是h…

    Linux干货 2016-08-02
  • shell四剑客之sed

    概述 Stream EDitor, 行编辑器 sed是一种流编辑器,它一次处理一行内容。处理时,把 当前处理的行存储在临时缓冲区中,称为“模式空间”( pattern space),接着用sed命令处理缓冲区中的内容 ,处理完成后,把缓冲区的内容送往屏幕。接着处理下一 行,这样不断重复,直到文件末尾。文件内容并没有改变 ,除非你使用重定向存储输出。Sed主要…

    Linux干货 2016-08-15