dd 命令具有复制文件、转换文件和格式化文本的功能。 参数选项 if=<输入文件> 从指定文件中读取,全称为input file of=<输出文件> 写入到指定文件,全称为output file bs=<字节数> 一次读写的字节数,全称为block size count=<块数> 指定复制block块的个数 ibs=<字节数> 一次读的字节,默认是512 obs=<字节数> 一次写的字节,默认是512 conv=<格式> 格式转换 ucase把字母由小写转换为大写 lcase把字母由大写转换为小写 范例:将/dev/sda1分区复制(备份)到文件中 使用if从/dev/sdb1中读取数据,使用of指定输出到当前日录的dev_sdb1.img。 [root@cs6 ~]# dd if=/dev/sdb1 of=dev_sdb1.img 835317+0 records in 835317+0 records out 427682304 bytes (428 MB) copied, 13.3079 s, 32.1 MB/s [root@cs6 ~]# ll -h dev_sdb1.img -rw-r--r--. 1 root root 408M May 11 15:20 dev_sdb1.img 范例:删除/dev/sdb1分区数据 下面的实验很危险,请使用虚拟机操作,并提前做好快照。 从/dev/zero设备读取数据,写入或覆盖/dev/sdb1的数据: [root@cs6 ~]# dd if=/dev/zero of=/dev/sdb1 #<==/dev/zero是一个特殊的设备,相当于什么都没有。 dd: writing to `/dev/sdb1': No space left on device #<==提示写满了。 835318+0 records in 835317+0 records out 427682304 bytes (428 MB) copied, 1.77188 s, 241 MB/s 说明:/dev/zero是0字符设备,可产生连续不断的特殊数据流,生成的文件为特殊格式的数据文件(二进制)。 [root@cs6 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_cs6-lv_root 26G 1.3G 24G 5% / tmpfs 931M 0 931M 0% /dev/shm /dev/sda1 477M 28M 424M 7% /boot /dev/sdb1 16Z 16Z 389M 100% /mnt/data1 [root@cs6 ~]# ls /mnt/data1 可以看到,上面的/mnt/data1分区被清空了,此时系统已经遭到破坏。 这种情况千万不要重启系统,/mnt/data1分区受损是无法启动系统的,应该继续下面的恢复操作。 范例:用上面的备份恢复删除的分区数据。 [root@cs6 ~]# dd if=dev_sdb1.img of=/dev/sdb1 835317+0 records in 835317+0 records out 427682304 bytes (428 MB) copied, 1.6525 s, 259 MB/s [root@cs6 ~]# ls /mnt/data1 1.html 2.html 3.html 4.html 5.html lost+found 要特别注意if、of参数,如果位置写反了,就会出大问题。 范例:生成任意大小的测试文件 从/dev/zero读取数据写入到test,dita,生成文件test,data的大小为bs*count=1M*2=2M [root@cs6 ~]# dd if=/dev/zero of=test.data bs=1M count=2 2+0 records in 2+0 records out 2097152 bytes (2.1 MB) copied, 0.11628 s, 18.0 MB/s [root@cs6 ~]# ll -h test.data -rw-r--r--. 1 root root 2.0M May 11 15:27 test.data 范例:制作Linux系统的ISO镜像 在Windows系统里制作光盘的ISO镜像,还需要安装其他软件。但在Linux系统中只需要dd命令就足够了。 在做实验时,如果需要将CentOS的完整系统镜像上传到Linux系统中,一般使用winSCP或Xshell等工具,但这是通过网络传输的方式,上传速度受限于网络带宽。 此时可以使用dd命令,将从光驱读取的镜像复制到系统中,相当于光驱与磁盘对拷。 将光盘放入光驱之后,需要确保光驱可以正常读取,然后执行如下命令即可实现将光盘复制到Linux硬盘的操作: [root@cs6 ~]# ls /dev/cdrom /dev/cdrom [root@cs6 ~]# dd if=/dev/cdrom of=centos6_10.iso 831488+0 records in 831488+0 records out 425721856 bytes (426 MB) copied, 49.5612 s, 8.6 MB/s #<==传输速度取决于光驱与磁盘之间的读写速度,可以看到这种方式的传输速度远远大于网络传输速度。 [root@cs6 ~]# ll -h centos6_10.iso -rw-r--r--. 1 root root 406M May 11 15:32 centos6_10.iso 范例:使用dd复制文件并进行格式转换的例子。 [root@cs6 ~]# cat test.txt I love linux www.wenyule.top [root@cs6 ~]# dd if=test.txt conv=ucase of=test.test_u 0+1 records in 0+1 records out 29 bytes (29 B) copied, 0.00036375 s, 79.7 kB/s [root@cs6 ~]# cat test.test_u I LOVE LINUX WWW.WENYULE.TOP