• 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  0 0' >> /etc/fstab
       [root@anonymous ~]#echo '/root/test /mnt/test  ext4  defaults,loop  0 0' >> /etc/fstab
       [root@anonymous ~]#mount -a
    
  • 相关阅读:
    浅谈px,em和rem这些单位的区别
    nodejs中的formidable模块
    es6中的Symbol.iterator属性
    jQuery源码解析----内部插入的外部函数
    关于js函数中存在异步的情况下的变量的分析
    jQuery源码解析----模拟核心buildFragment
    jQuery源码解析----模拟html()、text()、val()
    Config
    Zuul
    Hystrix
  • 原文地址:https://www.cnblogs.com/iuskye/p/6629345.html
Copyright © 2020-2023  润新知