DD命令整理

  sre

hdd
dd命令:把指定的输入文件拷贝到指定的输出文件中,并且在拷贝过程中可以进行格式转换。
格式:dd [选项]
命令中各个选项的含义:
if = 输入文件(或设备名称)。
of = 输出文件(或设备名称)。
ibs = bytes 一次读取bytes字节,及读入缓冲区的字节数。
skip = blocks 跳过读入缓冲区开头的ibs*blocks块。
obs = bytes 一次写入bytes字节,及写入缓冲区的字节数。
bs = bytes 同时设置读/写缓冲区的字节数(等于设置ibs和obs).
cbs = byte 一次转换bytes字节。
count = blocks 只拷贝输入的block块。
conv = ASCⅡ 把EBCDIC码转换为ASCⅡ。
conv = ebcdic 把ASCⅡ码转换为EBCDIC码。
conv = ibm ibm把ASCⅡ码转换为alternate EBCDIC码。
conv = block 把变动位转换成固定字符。
conv = ublock 把固定位转换成变动位。
conv = ucase 把字母由小写转换为大写。
conv = lcase 把字母由大写转换为小写。
conv = notrunc 不截短输出文件。
conv = swab 交换每一对输入字节。
conv = noerror 出错是不停止处理。
conv = sync 把每个输入记录的大小都调到ibs的大小(用NUL填充)。

例如:
创建一个100M的空文件
dd if=/dev/zero of=hello.txt bs=100M count=1

硬盘对拷: dd if=/dev/sda of=/dev/sdb
硬盘备份: dd if=/dev/sda of=~/sda.bak
硬盘压缩备份: dd if=/dev/sda | gzip>~/sda.gzip
硬盘恢复:dd if~/sda.bak of=/dev/sda
解压恢复 gzip -dc ~/sda.gzip | dd of=/dev/sda
将内存里的数据拷贝到root目录下的mem.bin文件:dd if=/dev/mem of=/root/mem.bin
bs=1024
拷贝光盘数据到root文件夹下,并保存为cd.iso文件:dd if=/dev/cdrom of=/root/cd.iso

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

利用netcat远程备份
在源主机上执行此命令备份/dev/hda:dd if=/dev/hda bs=16065b | netcat < targethost-IP >
1234在目的主机上执行此命令来接收数据并写入/dev/hdc:netcat -l -p 1234 | dd of=/dev/hdc
bs=16065b
以下两条指令是目的主机指令的变化分别采用bzip2 gzip对数据进行压缩,并将备份文件保存在当前目录 :
netcat -l -p 1234 | bzip2 > partition.img
netcat -l -p 1234 | gzip > partition.img

5 thoughts on - DD命令整理

  • 数据丢失带来的损失是相当昂贵的。关键数据的丢失会对各种规模的企业带来影响。有几种方法来备份Linux系统,包括rsync的和rsnapshot等。本文提供有关使用dd命令备份Linux系统的6个实例。 dd是一个功能强大的UNIX工具,由Linux内核的makefile进行引导映像,它也可以用来复制数据。

    例 1:备份整个硬盘
    使用dd命令备份整个硬盘。在这个例子中,源硬盘的设备名为/ dev/ sda的,目标硬盘的设备名是/ dev/ sdb。执行dd命令,备份整个硬盘/dev/sha到同一系统的另一个硬盘/dev/sdb。如下所示:

    [root@linuxprobe ~]# dd if=/dev/sda of=/dev/sdb
    – “if”后跟输入文件,“of”后跟输出文件。
    – 上述命令在执行过程中如有任何错误都会失败。但若加入参数“CONV= NOERROR”,则即使执行过程中有错误,它也会继续复制。
    – 输入文件和输出文件在执行前必须检查再三,如果两者顺序颠倒,你可能会损失所有数据。

    在备份整个硬盘时,我们也可以加入sync参数来同步I/O。 如下所示:

    [root@linuxprobe ~]# dd if=/dev/sda of=/dev/sdb conv=noerror,sync

    例 2:创建硬盘的映像
    使用dd命令为硬盘创建一个图像文件并将其保存在其他存储设备。这种备份方式有很多好处:一是易于使用,二是这种备份方法的速度快于其他方法的备份,也能让你更快速的恢复数据。
    创建一个硬盘/dev/sda的image命令:

    [root@linuxprobe ~]# dd if=/dev/sda of=~/sdadisk.img

    例 3:恢复硬盘映像文件恢复数据
    使用dd命令将硬盘的映像文件恢复数据到另一个硬盘。如下所示:

    [root@linuxprobe ~]# dd if=sdadisk.img of=/dev/sdb

    Sdadisk.img文件是/dev/sda的映像,所以上面的命令将恢复/dev/had的映像到/dev/sdb

    例 4:创建软盘映像
    使用dd命令创建软盘的映像备份。输入文件填写软盘机设备的位置,输出文件写软盘映像文件的名称,如下所示。

    [root@linuxprobe ~]# dd if=/dev/fd0 of=myfloppy.img

    例 5:备份分区
    使用dd命令备份硬盘分区。输入文件填写分区的设备名称,输出文件填写你指定的目标路径或映像文件。 dd命令示例所示如下:

    [root@linuxprobe ~]# dd if=/dev/sda1 of=~/partition1.img

    例 6:光盘备份
    dd命令允许我们创建源文件的iso文件,所以我们可以插入CD,输入dd命令来创建一个CD的iso文件内容。

    [root@linuxprobe ~]# dd if=/dev/cdrom of=tgsservice.iso bs=2048

    dd命令从输入中读取一个块并将其写入输出文件。你可以指定输入和输出文件的块大小。参数“bs”指定输入和输出文件的块大小。上面的dd命令使用的块大小为2048 bytes.
    注意:如果光盘是自动挂载的,在使用dd命令创建iso映像之前最好umount掉以避免造成对CD ROM不必要的访问。

  • /dev/zero设备

    在类UNIX 操作系统中, /dev/zero 是一个特殊的文件,当你读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00)。其中的一个典型用法是用它提供的字符流来覆盖信息,另一个常见用法是产生一个特定大小的空白文件。

    [root@wow ~]# cat /dev/zero |od -x
    0000000 0000 0000 0000 0000 0000 0000 0000 0000

  • /dev/full设备

    类Unix系统中,/dev/full(常满设备)是一个特殊设备文件,总是在向其写入时返回设备无剩余空间(错误码为ENOSPC),读取时则与/dev/zero相似,返回无限的空字符(NULL, ASCII NUL, 0x00)。这个设备通常被用来测试程序在遇到磁盘无剩余空间错误时的行为。

    [root@wow ~]# echo “dsds” >>/dev/full
    -bash: echo: write error: No space left on device
    [root@wow ~]# cat /dev/full |od -x
    0000000 0000 0000 0000 0000 0000 0000 0000 0000

  • /dev/tcp
    打开这个文件就类似于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。

    1.打开/dev/tcp
    以读写方式打开/dev/tcp,并指定服务器名为: http://www.csdn.net,端口号为:80,指定描述符为8
    exec 8<>/dev/tcp/www.csdn.net/80
    要注意的是:/dev/tcp本身是不存在的。
    2. 向文件中写入数据
    向文件中随便写一些数据: echo -e “GET”>8&
    3. 读文件
    读取返回的信息:cat<&8

  • /dev/tty
    当程序打开此文件是,Linux会自动将它重定向到一个终端窗口,因此该文件对于读取人工输入时特别有用。见如下Shell代码:
    /> vi test_dev_tty.sh

    #!/bin/bash
    printf “Enter new password: ” #提示输入
    stty -echo #关闭自动打印输入字符的功能
    read password < /dev/tty #读取密码 printf "\nEnter again: " #换行后提示再输入一次 read password2 < /dev/tty #再读取一次以确认 printf "\n" #换行 stty echo #记着打开自动打印输入字符的功能 echo "Password = " $password #输出读入变量 echo "Password2 = " $password2 echo "All Done" 在vi中保存并退出后执行以下命令: /> chmod +x test_dev_tty.sh #使该文件成为可执行文件
    /> ./test_dev_tty
    Enter new password: #这里密码的输入被读入到脚本中的password变量
    Enter again: #这里密码的输入被读入到脚本中的password2变量
    Password = hello
    Password2 = hello
    All Done

LEAVE A COMMENT

Captcha Code