zoukankan      html  css  js  c++  java
  • 【转】linux dd 的简单应用

    原文地址:http://blog.csdn.net/ioriqqe/article/details/6634556

    man dd 输出:

    NAME
           dd - 转换和拷贝文件

    摘要
           dd  [--help]  [--version]  [if=file]  [of=file]  [ibs=bytes] [obs=bytes] [bs=bytes] [cbs=bytes] [skip=blocks] [seek=blocks] [count=blocks] [conv={ascii, ebcdic, ibm,
           block, unblock, lcase, ucase, swab, noerror, notrunc, sync}]

    描述
           当进行非强制的转换的时候,使用指定的输入和输出块大小拷贝文件(默认是从标准输入到标准输出。)

           它每次从输入读取指定大小的一个块(默认是512字节)。如果使用 bs=bytes 选项,并且没有转换,除了指定 sync, noerror, 或 notrunc 之外, 那么dd将把全部读到的数据(可以比请
           求读的少)写到独立的输出块去。 这个输出块的长度和读到的数据完全一样,除非指定使用 sync(同步)转换,那样的话,数据结尾处将追加NUL字符(或空格,见下)。

           其他情况下,输入的时候每次读一个块,然后处理,并将输出结果收集起来,最后写到指定大小的数据块中去。最终的输出块可能会比指定的大小短一些。

           数字值选项(以字节或块为单位)后面可以跟一个乘数: k=1024,b=512,w=2,c=1(w和c是GNU扩展语法。最好别使用w,因为在system V中,它表示2,在4.2 BSD中,它表示4)。两个或
           更多的数值表达式可以通过x乘起来。 GEU fileutils 4.0并且允许在数据块大小的叙述中使用下列乘法后缀(用bs=,cbs=,obs=):M=1048576,G=1073741824,同理可得T,P,E,Z ,Y
           。D后缀表示数值是以十进制表示的:kD=1000 MD=1000000 GD=1000000000等等。(注意,在ls、df、du命令中,M等标记的大小是由环境变量确定的,而在DD中,它的值是固定的。)

    选项
           if=file
                  从 file 中读而不是标准输入。

           of=file
                  写到 file 里去而不是标准输出。除非指定 conv=notrunc ,否则, dd 将把 file 截为O字节(或由 seek= 选项指定的大小)

           ibs=bytes
                  一次读 bytes 字节。默认是512。

           obs=bytes
                  一次写 bytes 字节。默认是512。

           bs=bytes
                  一 次读和写 bytes 字节。这将覆盖 ibs 和 obs 设定的值(并且,设定 bs 不等于同时将 ibs 和 obs 设为同一个值,至少在只使用 sync, noerror 或 notrunc 转换时是这样的
                  。因为bs规定,每个输入块都应作为单独的数据块拷贝到输出,而不把较短的块组合到一起)。

           cbs=bytes
                  为 block 转换和 unblock 转换指定转换块的大小。

           skip=blocks
     在拷贝之前,跳过输入文件的前 blocks 块,每块大小为 ibs-byte 字节。

           seek=blocks
                  在拷贝之前,跳过输出文件的前 blocks 块,每块大小为 obs-byte 字节。

           count=blocks
                  只拷贝输入文件的前 blocks 块(每块的大小为 ibs-byte 字节),而不是全部内容,直到文件末尾。

           conv=转换"[,"转换"]..."
                  将文件按 转换参数指定的方式转换(在,两边没有空格)。

                  转换方式包括:


                  ascii  将EBCDIC转换成ascii。

                  ebcdic 将ascii转换成ebcdic。

                  ibm    将ascii转换成alternative ebcdic。

                  block  每一行输入,无论长短,输出都是 cbs 字节,并且其中的换行(NEWLINE,即c中的'0)用空格替换。如有必要,行尾会填充空格。

                  unblock
                         用换行替换每个输入块( cbs 字节大小)末尾的空格。

                  lcase  将大写字母转换成小写。

                  ucase  将小写字母转换成大写。

                  swab   交换每对输入字节。如果读入的字节数是奇数,最后一个字节只是简单的复制到输出(因为没有能跟它交换的字节了)(POSIX 1003.26,PASC翻译1003.2 3号和4号)。

                  noerror
                         发生读错误时,继续进行。

                  notrunc
                         不截断输出文件。

                  sync   用0填充到每个输入块的末尾,使其大小为 ibs 字节。

    2.实例分析

    2.1.数据备份与恢复

    2.1.1整盘数据备份与恢复
    备份:

    dd if=/dev/hdx of=/dev/hdy
    将本地的/dev/hdx整盘备份到/dev/hdy


    dd if=/dev/hdx of=/path/to/image
    将/dev/hdx全盘数据备份到指定路径的image文件


    dd if=/dev/hdx | gzip >/path/to/image.gz
    备份/dev/hdx全盘数据,并利用gzip工具进行压缩,保存到指定路径
                 


    恢复:
    dd if=/path/to/image of=/dev/hdx
    将备份文件恢复到指定盘


    gzip -dc /path/to/image.gz | dd of=/dev/hdx 或gunzip -c /path/to/image |dd of=/dev/hdx
    将压缩的备份文件恢复到指定盘


    2.1.2.利用netcat远程备份


    dd if=/dev/hda bs=16065b | netcat < targethost-IP > 1234
    在源主机上执行此命令备份/dev/hda


    netcat -l -p 1234 | dd of=/dev/hdc bs=16065b
    在目的主机上执行此命令来接收数据并写入/dev/hdc


    netcat -l -p 1234 | bzip2 > partition.img
                    netcat -l -p 1234 | gzip > partition.img
    以上两条指令是目的主机指令的变化分别采用bzip2  gzip对数据进行压缩,并将备份文件保存在当前目录。

    2.1.3.备份MBR

    硬盘主引导扇区(硬盘的前512字节) = 硬盘主引导记录(MBR,硬盘的前446字节)+ 硬盘分区表(DPT,MBR后面的66字节)
    MBR 446字节(0000–01BD),DPT 64字节(01BE–01FD),结束标志2字节(55 AA)
    其中的这个结束标志很重要,如果缺失的话会导致系统无限次重启。
    备份:

    dd if=/dev/hdx of=/path/to/image count=1 bs=512
    备份磁盘开始的512Byte大小的MBR信息到指定文件
                  


    恢复:

    dd if=/path/to/image of=/dev/hdx
    将备份的MBR信息写到磁盘开始部分

    如果只想备份和恢复分区表:

    备份:

    dd if=/dev/hdx of=/path/to/image count=1 bs=512 skip=446
    跳过前446字节备份磁盘第一扇区的后66字节DPT信息到指定文件

    恢复:

    dd if=/path/to/image of=/dev/hdx count=1 bs=512 seek=446
    将备份DPT信息写到MBR后面的66字节。

    2.1.4.备份软盘

    dd if=/dev/fd0 of=disk.img count=1 bs=1440k
    将软驱数据备份到当前目录的disk.img文件

    2.1.5.拷贝内存资料到硬盘

    dd if=/dev/mem of=/root/mem.bin bs=1024
    将内存里的数据拷贝到root目录下的mem.bin文件

    2.1.6.从光盘拷贝iso镜像

    dd if=/dev/cdrom of=/root/cd.iso
    拷贝光盘数据到root文件夹下,并保存为cd.iso文件     

    2.2.增加Swap分区文件大小

    dd if=/dev/zero of=/swapfile bs=1024 count=262144
    创建一个足够大的文件(此处为256M)


    mkswap /swapfile
    把这个文件变成swap文件


    swapon /swapfile
    启用这个swap文件


    /swapfile swap swap defaults 0 0
    在每次开机的时候自动加载swap文件, 需要在 /etc/fstab 文件中增加一行

    2.3.销毁磁盘数据

    dd if=/dev/urandom of=/dev/hda1
    利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。执行此操作以后,/dev/hda1将无法挂载,创建和拷贝操作无法执行。


    2.4磁盘管理

    2.4.1.得到最恰当的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 if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
    通过比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小

                  
    2.4.2测试硬盘读写速度

    dd if=/root/1Gb.file bs=64k | dd of=/dev/null
                    dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
    通过上两个命令输出的执行时间,可以计算出测试硬盘的读/写速度     


    2.4.3.修复硬盘

    dd if=/dev/sda of=/dev/sda
    当 硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生magnetic flux point。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数 据起死回生。且这个过程是安全,高效的。

  • 相关阅读:
    php ajax 表格排序,调整列宽,修改内容
    Jquery隐藏式评论
    还是一个鼠标点击td变成input,失去焦点更新数据库
    Jquery php 点击td变成input,修改后失去焦点发送数据
    hdu 1713 相遇周期 比较绕的最大公约,最小公倍问题
    hdu 1722 Cake (抽象出欧几里得)
    提供Webservice的地方
    实现汉字转拼音
    java 注解
    c#获取汉字的拼音首字母
  • 原文地址:https://www.cnblogs.com/cyttina/p/2770932.html
Copyright © 2011-2022 走看看