DD命令整理
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
数据丢失带来的损失是相当昂贵的。关键数据的丢失会对各种规模的企业带来影响。有几种方法来备份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