1、linux 下 dd 命令详解名称: dd 使用权限: 所有使用者 dd 这个指令在 manual 里的定义是 convert and copy a file使用方式: dd option如果你想要在线看 manual, 可以试试: dd -help或是 info dd如果你想要看看这个版本如何: dd -version输入或输出 dd if=STDIN of=STDOUT强迫输入或输出的 Size 为多少 Bytes bs: dd -ibs=BYTE -obs=SIZE强迫一次只做多少个 Bytes cbs=BYTES跳过一段以后才输出 seek=BLOCKS跳过一段以后才输入 skip=B
2、LOCKS当然你可以拿这个来方便的拷贝光碟(注意,你的光碟是标准的 iso9660 格式才可以这么做唷!)dd if=/dev/cdrom of=cdrom.iso 其中 if 后面以及 of 后面的内容依你的需求调整。然后给系统这个指令就可以烧了:cdrecord -v cdrom.iso 这篇不是在讲 cdrecord 的,所以上面的指令是最为简单但是不一定能符合您的硬件环境.功能:把指定的输入文件拷贝到指定的输出文件中,并且在拷贝过程中可以进行格式转换。可以用该命令实现 DOS 下的 diskcopy 命令的作用。先用 dd 命令把软盘上的数据写成硬盘的一个寄存文件,再把这个寄存文件写入
3、第二张软盘上,完成 diskcopy 的功能。需要注意的是,应该将硬盘上的寄存文件用 rm 命令删除掉。系统默认使用标准输入文件和标准输出文件。语法:dd 选项if =输入文件(或设备名称)。of =输出文件(或设备名称)。ibs = bytes 一次读取 bytes 字节,即读入缓冲区的字节数。skip = blocks 跳过读入缓冲区开头的 ibs*blocks 块。obs = bytes 一次写入 bytes 字节,即写入缓冲区的字节数。bs = bytes 同时设置读/写缓冲区的字节数(等于设置 ibs 和 obs)。cbs = byte 一次转换 bytes 字节。count=blo
4、cks 只拷贝输入的 blocks 块。conv = ASCII 把 EBCDIC 码转换为 ASCIl 码。conv = ebcdic 把 ASCIl 码转换为 EBCDIC 码。conv = ibm 把 ASCIl 码转换为 alternate EBCDIC 码。conv = block 把变动位转换成固定字符。conv = ublock 把固定位转换成变动位。conv = ucase 把字母由小写转换为大写。conv = lcase 把字母由大写转换为小写。conv = notrunc 不截短输出文件。conv = swab 交换每一对输入字节。conv = noerror 出错时不停止
5、处理。conv = sync 把每个输入记录的大小都调到 ibs 的大小(用 NUL 填充)。dd 的主要选项:指定数字的地方若以下列字符结尾乘以相应的数字:b=512, c=1, k=1024, w=2, xm=number mif=file输入文件名,缺省为标准输入。of=file输出文件名,缺省为标准输出。ibs=bytes一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。obs=bytes一次写 bytes 个字节(即一个块大小为 bytes 个字节)。bs=bytes同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。cbs=bytes一次转换 by
6、tes 个字节,即转换缓冲区大小。skip=blocks从输入文件开头跳过 blocks 个块后再开始复制。seek=blocks从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)count=blocks仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。conv=conversion,conversion.用指定的参数转换文件。转换参数:ascii 转换 EBCDIC 为 ASCII。ebcdic 转换 ASCII 为 EBCDIC。ibm 转换 ASCII 为 alternate EBCDIC.block 把每一行转换为长度为 cbs
7、的记录,不足部分用空格填充。unblock使每一行的长度都为 cbs ,不足部分用空格填充。lcase 把大写字符转换为小写字符。ucase 把小写字符转换为大写字符。swab 交换输入的每对字节。 Unlike theUnix dd, this works when an odd number ofbytes are read. If the input file containsan odd number of bytes, the last byte issimply copied (since there is nothing toswap it with).noerror出错时不停止
8、。notrunc不截短输出文件。sync 把每个输入块填充到 ibs 个字节,不足部分用空(NUL)字符补齐。由于 dd 命令允许二进制方式读写,所以特别适合在原始物理设备上进行输入/ 输出。例如可以用下面的命令为软盘建立镜像文件:dd if=/dev/fd0 of=disk.img bs=1440k有趣的是,这个镜像文件能被 HD-Copy ,Winimage 等工具软件读出。再如把第一个硬盘的前 512 个字节存为一个文件:dd if=/dev/hda of=disk.mbr bs=512 count=12.实例分析2.1.数据备份与恢复2.1.1 整盘数据备份与恢复备份:dd if=/d
9、ev/hdx of=/dev/hdy将本地的/dev/hdx 整盘备份到/dev/hdydd 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将压缩的备份文件恢复到指定盘2.1.2.利用 net
10、cat 远程备份dd if=/dev/hda bs=16065b | netcat 1234在源主机上执行此命令备份/dev/hdanetcat -l -p 1234 | dd of=/dev/hdc bs=16065b在目的主机上执行此命令来接收数据并写入/dev/hdcnetcat -l -p 1234 | bzip2 partition.imgnetcat -l -p 1234 | gzip partition.img以上两条指令是目的主机指令的变化分别采用 bzip2 gzip 对数据进行压缩,并将备份文件保存在当前目录。2.1.3.备份 MBR备份:dd if=/dev/hdx of
11、=/path/to/image count=1 bs=512备份磁盘开始的 512Byte 大小的 MBR 信息到指定文件恢复:dd if=/path/to/image of=/dev/hdx将备份的 MBR 信息写到磁盘开始部分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 i
12、f=/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=/
13、dev/urandom of=/dev/hda1利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。执行此操作以后,/dev/hda1 将无法挂载,创建和拷贝操作无法执行。2.4 磁盘管理2.4.1.得到最恰当的 block sizedd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.filedd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.filedd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file dd if=/dev/zero
14、bs=8192 count=125000 of=/root/1Gb.file通过比较 dd 指令输出中所显示的命令执行时间,即可确定系统最佳的 block size 大小2.4.2 测试硬盘读写速度dd if=/root/1Gb.file bs=64k | dd of=/dev/nulldd 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 错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生。且这个过程是安全,高效的。