<span id='p6fz'></span>

<ins id='p6fz'></ins>

<code id='p6fz'><strong id='p6fz'></strong></code>
<i id='p6fz'></i>
<dl id='p6fz'></dl>
  1. <tr id='p6fz'><strong id='p6fz'></strong><small id='p6fz'></small><button id='p6fz'></button><li id='p6fz'><noscript id='p6fz'><big id='p6fz'></big><dt id='p6fz'></dt></noscript></li></tr><ol id='p6fz'><table id='p6fz'><blockquote id='p6fz'><tbody id='p6fz'></tbody></blockquote></table></ol><u id='p6fz'></u><kbd id='p6fz'><kbd id='p6fz'></kbd></kbd>
  2. <i id='p6fz'><div id='p6fz'><ins id='p6fz'></ins></div></i>

        <acronym id='p6fz'><em id='p6fz'></em><td id='p6fz'><div id='p6fz'></div></td></acronym><address id='p6fz'><big id='p6fz'><big id='p6fz'></big><legend id='p6fz'></legend></big></address><fieldset id='p6fz'></fieldset>

        1. Linux系统的dd命令使用教程

          • 时间:
          • 浏览:6
          • 来源:124软件资讯网

              一、基础用法

              dd:用指定巨细的块拷贝一个文件  ,并在拷贝的同时举行指定的转换  。

              注重:指定数字的地方若以下列字符末端  ,则乘以响应的数字:b=512;c=1;k=1024;w=2

              参数注释:

              if=文件名:输入文件名  ,缺省为尺度输入  。即指定源文件  。< if=input file >

              of=文件名:输出文件名  ,缺省为尺度输出  。即指定目的文件  。< of=output file >

              ibs=bytes:一次读入bytes个字节  ,即指定一个块巨细为bytes个字节 。

              obs=bytes:一次输出bytes个字节  ,即指定一个块巨细为bytes个字节 。

              bs=bytes:同时设置读入/输出的块巨细为bytes个字节  。

              cbs=bytes:一次转换bytes个字节 ,即指定转换缓冲区巨细 。

              skip=blocks:从输入文件开头跳过blocks个块后再最先复制 。

              seek=blocks:从输出文件开头跳过blocks个块后再最先复制  。

              注重:通常只用当输出文件是磁盘或磁带时才有用 ,即备份到磁盘或磁带时才有用  。

              count=blocks:仅拷贝blocks个块  ,块巨细即是ibs指定的字节数  。

              conv=conversion:用指定的参数转换文件  。

              ascii:转换ebcdic为ascii

              ebcdic:转换ascii为ebcdic

              ibm:转换ascii为alternate ebcdic

              block:把每一行转换为长度为cbs ,不足部门用空格填充

              unblock:使每一行的长度都为cbs  ,不足部门用空格填充

              lcase:把大写字符转换为小写字符

              ucase:把小写字符转换为大写字符

              swab:交流输入的每对字节

              noerror:堕落时一直止

              notrunc:不截短输出文件

              sync:将每个输入块填充到ibs个字节  ,不足部门用空(NUL)字符补齐 。

              二、dd应用实例

              1.将当地的/dev/hdb整盘备份到/dev/hdd

              代码如下:

              heng@me: dd if=/dev/hdb of=/dev/hdd

              2.将/dev/hdb通盘数据备份到指定路径的image文件

              代码如下:

              heng@me: dd if=/dev/hdb of=/root/image

              3.将备份文件恢复到指定盘

              代码如下:

              heng@me: dd if=/root/image of=/dev/hdb

              4.备份/dev/hdb通盘数据  ,并使用gzip工具举行压缩  ,生存到指定路径

              代码如下:

              heng@me: dd if=/dev/hdb | gzip > /root/image.gz

              5.将压缩的备份文件恢复到指定盘

              代码如下:

              heng@me: gzip -dc /root/image.gz | dd of=/dev/hdb

              6.备份与恢复MBR

              备份磁盘最先的512个字节巨细的MBR信息到指定文件:

              代码如下:

              heng@me: dd if=/dev/hda of=/root/image count=1 bs=512

              count=1指仅拷贝一个块;bs=512指块巨细为512个字节 。

              恢复:

              代码如下:

              heng@me: dd if=/root/image of=/dev/had

              将备份的MBR信息写到磁盘最先部门

              7.备份软盘

              代码如下:

              heng@me: dd if=/dev/fd0 of=disk.img count=1 bs=1440k (即块巨细为1.44M)

              8.拷贝内存内容到硬盘

              代码如下:

              heng@me: dd if=/dev/mem of=/root/mem.bin bs=1024 (指定块巨细为1k)

              9.拷贝光盘内容到指定文件夹  ,并生存为cd.iso文件

              代码如下:

              heng@me: dd if=/dev/cdrom(hdc) of=/root/cd.iso

              10.增添swap分区文件巨细

              第一步:建立一个巨细为256M的文件:

              代码如下:

              heng@me: dd if=/dev/zero of=/swapfile bs=1024 count=262144

              第二步:把这个文件酿成swap文件:

              代码如下:

              heng@me: mkswap /swapfile

              第三步:启用这个swap文件:

              代码如下:

              heng@me: swapon /swapfile

              第四步:编辑/etc/fstab文件 ,使在每次开机时自动加载swap文件:

              代码如下:

              /swapfile swap swap default 0 0

              11.销毁磁盘数据

              代码如下:

              heng@me: dd if=/dev/urandom of=/dev/hda1

              注重:使用随机的数据填充硬盘  ,在某些须要的场所可以用来销毁数据  。

              12.测试硬盘的读写速率

              代码如下:

              heng@me: dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file

              heng@me: dd if=/root/1Gb.file bs=64k | dd of=/dev/null

              通过以上两个下令输出的下令执行时间  ,可以盘算出硬盘的读、写速率  。

              13.确定硬盘的最佳块巨细:

              代码如下:

              heng@me: dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file

              heng@me: dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file

              heng@me: dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file

              heng@me: dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file

              通过比力以上下令输出中所显示的下令执行时间 ,即可确定系统最佳的块巨细  。

              14.修复硬盘:

              代码如下:

              heng@me: dd if=/dev/sda of=/dev/sda 或dd if=/dev/hda of=/dev/hda

              当硬盘较长时间(一年以上)放置不使用后  ,磁盘上会发生magnetic flux point  ,当磁头读到这些区域时会遇到难题  ,并可能导致I/O错误 。当这种情形影响到硬盘的第一个扇区时  ,可能导致硬盘报废  。上边的下令有可能使这些数 据死去活来 。而且这个历程是宁静、高效的 。

              15.使用netcat远程备份

              代码如下:

              heng@me: dd if=/dev/hda bs=16065b | netcat < targethost-IP > 1234

              在源主机上执行此下令备份/dev/hda

              代码如下:

              heng@me: netcat -l -p 1234 | dd of=/dev/hdc bs=16065b

              在目的主机上执行此下令来吸收数据并写入/dev/hdc

              代码如下:

              heng@me: netcat -l -p 1234 | bzip2 > partition.img

              heng@me: netcat -l -p 1234 | gzip > partition.img

              以上两条指令是目的主机指令的转变划分接纳bzip2、gzip对数据举行压缩  ,并将备份文件生存在当前目录  。

              16.将一个很大的视频文件中的第i个字节的值改成0x41(也就是大写字母A的ASCII值)

              代码如下:

              echo A | dd of=bigfile seek=$i bs=1 count=1 conv=notrunc

              三、/dev/null和/dev/zero的区别

              /dev/null ,外号叫无底洞  ,你可以向它输出任何数据 ,它通吃  ,而且不会撑着!

              /dev/zero  ,是一个输入装备  ,你可你用它来初始化文件 。该装备无限尽地提供0  ,可以使用任何你需要的数目——装备提供的要多的多  。他可以用于向装备或文件写入字符串0  。

              /dev/null——它是空装备  ,也称为位桶(bit bucket) 。任何写入它的输出都市被扬弃 。若是不想让新闻以尺度输出显示或写入文件 ,那么可以将新闻重定向到位桶  。

              代码如下:

              heng@me:if=/dev/zero of=./test.txt bs=1k count=1

              heng@me:ls –l

              total 4

              -rw-r--r-- 1 oracle dba 1024 Jul 15 16:56 test.txt

              heng@me:find / -name access_log 2>/dev/null

              1使用/dev/null

              把/dev/null看作”黑洞”  , 它等价于一个只写文件 ,所有写入它的内容都市永远丢失. ,而实验从它那儿读取内容则什么也读不到 。然而  , /dev/null对下令行和剧本都很是的有用

              克制尺度输出

              代码如下:

              heng@me:cat $filename >/dev/null #文件内容丢失  ,而不会输出到尺度输出.

              克制尺度错误

              代码如下:

              heng@me:rm $badname 2>/dev/null #这样错误信息[尺度错误]就被丢到太平洋去了

              克制尺度输出和尺度错误的输出

              代码如下:

              heng@me:cat $filename 2>/dev/null >/dev/null

              若是”$filename”不存在  ,将不会有任何错误信息提醒;若是”$filename”存在  , 文件的内容不会打印到尺度输出  。因此 ,上面的代码基础不会输出任何信息  。当只想测试下令的退出码而不想有任何输出时很是有用  。

              2使用/dev/zero

              像/dev/null一样  , /dev/zero也是一个伪文件 , 但它现实上发生一连不停的null的流(二进制的零流  ,而不是ASCII型的) 。 写入它的输出会丢失不见  , 而从/dev/zero读出一连串的null也比力难题  , 虽然这也能通过od或一个十六进制编辑器来做到 。

              /dev/zero主要的用处是用来建立一个指定长度用于初始化的空文件  ,就像暂时交流文件  。

              用/dev/zero建立一个交流暂时文件

              代码如下:

              #!/bin/bash

              # 建立一个交流文件.

              ROOT_UID=0 # Root 用户的 $UID 是 0.

              E_WRONG_USER=65 # 不是 root?

              FILE=/swap

              BLOCKSIZE=1024

              MINBLOCKS=40

              SUCCESS=0

              # 这个剧本必须用root来运行.

              if [ "$UID" -ne "$ROOT_UID" ]

              then

              echo; echo "You must be root to run this script."; echo

              exit $E_WRONG_USER

              fi

              blocks=${1:-$MINBLOCKS} # 若是下令行没有指定  ,

              #+ 则设置为默认的40块.

              # 上面这句等同如:

              # --------------------------------------------------

              # if [ -n "$1" ]

              # then

              # blocks=$1

              # else

              # blocks=$MINBLOCKS

              # fi

              # --------------------------------------------------

              if [ "$blocks" -lt $MINBLOCKS ]

              then

              blocks=$MINBLOCKS # 最少要有 40 个块长.

              fi

              echo "Creating swap file of size $blocks blocks (KB)."

              dd if=/dev/zero of=$FILE bs=$BLOCKSIZE count=$blocks # 把零写入文件.

              mkswap $FILE $blocks # 将此文件建为交流文件(或称交流分区).

              swapon $FILE # 激活交流文件.

              echo "Swap file created and activated."

              exit $SUCCESS

              关于 /dev/zero 的另一个应用是为特定的目的而用零去填充一个指定巨细的文件  , 如挂载一个文件系统到环回装备 (loopback device)或"宁静地" 删除一个文件  。

              例子建立ramdisk

              代码如下:

              #!/bin/bash

              # ramdisk.sh

              # "ramdisk"是系统RAM内存的一段  ,

              #+ 它可以被当成是一个文件系统来操作.

              # 它的优点是存取速率很是快 (包罗读和写).

              # 弱点: 易失性, 当盘算机重启或关机时会丢失数据.

              #+ 会淘汰系统可用的RAM.

              # 10 # 那么ramdisk有什么作用呢?

              # 生存一个较大的数据集在ramdisk, 好比一张表或字典,

              #+ 这样可以加速数据查询, 由于在内存里查找比在磁盘里查找快得多.

              E_NON_ROOT_USER=70 # 必须用root来运行.

              ROOTUSER_NAME=root

              MOUNTPT=/mnt/ramdisk

              SIZE=2000 # 2K 个块 (可以合适的做修改)

              BLOCKSIZE=1024 # 每块有1K (1024 byte) 的巨细

              DEVICE=/dev/ram0 # 第一个 ram 装备

              username=`id -nu`

              if [ "$username" != "$ROOTUSER_NAME" ]

              then

              echo "Must be root to run "`basename $0`"."

              exit $E_NON_ROOT_USER

              fi

              if [ ! -d "$MOUNTPT" ] # 测试挂载点是否已经存在了,

              then #+ 若是这个剧本已经运行了好频频了就不会再建这个目录了

              mkdir $MOUNTPT #+ 由于前面已经建设了.

              fi

              dd if=/dev/zero of=$DEVICE count=$SIZE bs=$BLOCKSIZE

              # 把RAM装备的内容用零填充.

              # 为何需要这么做?

              mke2fs $DEVICE # 在RAM装备上建立一个ext2文件系统.

              mount $DEVICE $MOUNTPT # 挂载装备.

              chmod 777 $MOUNTPT # 使通俗用户也可以存取这个ramdisk.

              # 可是, 只能由root来缷载它.

              echo ""$MOUNTPT" now available for use."

              # 现在 ramdisk 纵然通俗用户也可以用来存取文件了.

              # 注重, ramdisk是易失的, 以是当盘算机系统重启或关机时ramdisk里的内容会消逝.

              # 拷贝所有你想生存文件到一个通例的磁盘目录下.

              # 重启之后, 运行这个剧本再次建设起一个 ramdisk.

              # 仅重新加载 /mnt/ramdisk 而没有其他的步骤将不会准确事情.

              # 若是加以革新, 这个剧本可以放在 /etc/rc.d/rc.local,

              #+ 以使系统启动时能自动设立一个ramdisk.

              # 这样很合适速率要求高的数据库服务器.

              exit 0

              四、检察dd的拷贝进度

              linux中的DD下令可以很利便的作二进制拷贝 ,好比可以做硬盘克隆 。

              一样平常使用方式如下:

              代码如下:

              dd if=/src/device/name of=/dst/device/name

              ... 然后就等它完成  ,历程退出

              可是当我们需要copy的工具很庞大的时间,这个历程是很痛苦的

              许多人会检察iostat, 来估算或许需要几多时间完成, 这是很不直观的, 也不行靠

              若是我们dd --help

              会看到实在是有要领可以检察copy进度的, 资助文件中的example如下:

              代码如下:

              $ dd if=/dev/zero of=/dev/null& pid=$! 后台运行dd测试,生存历程号到pid中

              现实我们使用的时间可以新开一个终端,

              代码如下:

              

            ps -ef | grep dd

              找到dd的PID, 然后发送USR1(用户自界说信号),检察copy进度

              有些场所我们可能使用当前这个终端, 那么我们可以把当前运行的dd转到后台:ctrl+z, 这时间dd历程被stop了,使用bg %1让其在后台继续运行,而且编为1号,后面若是要它到前台运行,只要键入fg %1就可以了.

              然后我们输入kill -USR1 PID, 这里的PID是前面用ps检察到的历程号

              这时间你就能看到当前的copy信息了,以及平均copy速率