IP Address: 54.147.142.16


dd命令(Disk Duplication)在Linux系统中非常有用,主要是用于文件的转换与拷贝。

这个命令有着非常庞大的参数表,几乎可以完成你想做的做的所有磁盘文件操作。主要的参数有以下几个:

bs=xxx  块文件的大小,是指每次读写数据块的大小xxx,以byte为单位
count=n 计数,指拷贝数据块的数量n
if=FILE 输入文件,指从哪个文件读取
of=FILE 输出文件,指向哪个文件输出

下面就举例说明 dd 命令的用法

1] 使用 dd 命令备份整个磁盘

如何想把一块磁盘的所有文件拷贝到另一块磁盘,那么使用 dd 命令就非常方便。你只需要设置读取的磁盘和写入的磁盘即可,示例如下:

# dd if=/dev/xvdf of=/dev/xvdg
4194304+0 records in
4194304+0 records out
2147483648 bytes (2.1 GB) copied, 181.495 s, 11.8 MB/s

示例命令是将 /dev/xvdf 的所有内容拷贝到 /dev/xvdg,命令执行完成后会显示数据拷贝的数量、所用时间以及速度信息。

2] 使用 dd 命令识别物理磁盘

当系统挂载了很多块磁盘的时候,使用 dd  命令就可以很容易的区分它们。你可以从其中一块磁盘读取数据,然后再将数据写入一个空值,这时,想要区分的磁盘指示灯就会常亮,直到全部数据读取过一次:

# dd  if=/dev/xvdf of=/dev/null

通常磁盘在有读写操作的时候就会的指示灯亮起,这样就很容易识别系统中挂载的磁盘。但是使用这条命令时要十分小心,因为如果 IF 和 OF 参数使用错误的话,会造成磁盘数据全部丢失。

3] 使用 dd 命令创建磁盘镜像文件

使用 dd 命令很容易创建一个磁盘的镜像文件,这与磁盘拷贝有点类似,只是在 OF 参数中指定镜像文件名:

# dd if=/dev/xvdf of=/xvdf_disk.img
4194304+0 records in
4194304+0 records out
2147483648 bytes (2.1 GB) copied, 32.9723 s, 65.1 MB/s

# ls -lh /xvdf_disk.img
-rw-r--r--. 1 root root 2.0G Jan 15 14:36 /xvdf_disk.img

通过上面的例子,我们在 / 目录下创建了一个 /dev/xvdf 磁盘的镜像文件 xvdf_disk.img。

如果想将镜像文件进行压缩,那么可以把 gzip 命令同 dd 命令联合使用,示例如下:

# dd if=/dev/xvdf |gzip -c >/xvdf_disk.img.gz
4194304+0 records in
4194304+0 records out
2147483648 bytes (2.1 GB) copied, 32.6262 s, 65.8 MB/s
# ls -lh /xvdf_disk.img.gz
-rw-r--r--. 1 root root 2.0M Jan 15 14:31 /xvdf_disk.img.gz

可以实际比较一下两个镜像文件大小的差异,可以肯定的是压缩过的文件要小得多。

4] 使用 dd 命令将镜像文件恢复至磁盘

dd 命令可以制作镜像,当然也可以通过镜像文件恢复磁盘内容,示例如下:

# dd if=/xvdf_disk.img of=/dev/xvdg
4194304+0 records in
4194304+0 records out
2147483648 bytes (2.1 GB) copied, 175.748 s, 12.2 MB/s

当然,如果镜像文件为压缩文件,那么又要用到 gzip 命令和 dd 命令合作恢复了:

# gzip -dc /xvdf_disk.img.gz | dd of=/dev/xvdg
4194304+0 records in
4194304+0 records out
2147483648 bytes (2.1 GB) copied, 177.272 s, 12.1 MB/s

5] 使用 dd 命令制作光盘镜像

dd 命令另一个常用应用就是将 CD/DVD 光盘制作成 ISO镜像文件。使用 dd 命令将挂载到系统的光盘内容输出到一个ISO文件中,示例如下:

dd if=/dev/dvd of=/dvd_disc.iso bs=4096

这里,我们通过 bs 参数将读写块的大小设置为4096 bytes,也就是4k。注意在执行这个命令过程中不能有其它用户或应用继续访问光盘,当然,你可以通过使用 fuser 命令来加以检查。

6] 使用 dd 命令创建一个特定大小的空白文件

系统管理员很多情况下会需要创建一个特定大小的文件,例如设置交换空间文件等。使用 dd 命令就可以非常方便的创建特定大小的文件:

 # dd if=/dev/sda of=/testfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 13.0623 s, 82.2 MB/s

# ls -lh /testfile
-rw-r--r--. 1 root root 1.0G Jan 15 14:29 /testfile

上面的例子就是在 / 目录生成一个 testfile 文件,这个文件是从 /dev/sda 中划出。通过 bs 参数和 count 参数的配合,可以很准确的生成特定大小的文件。

7] 使用 dd 命令将文件内容进行大小写转换

之前的参数大多用于数据读取和写入,这里再介绍使用 dd 命令的 conv 参数进行文件内容转换。

# cat /root/testdata
This is test data file on www.daehub.com test server.

# dd if=/root/testdata of=/root/testdata_upper conv=ucase
0+1 records in
0+1 records out
55 bytes (55 B) copied, 0.000138394 s, 397 kB/s

# cat /root/testdata_upper
THIS IS TEST DATA FILE ON WWW.DAEHUB.COM TEST SERVER.

可以看到,原来所有小写的内容都被转换成大写了,当然如果想转换成小写,就需要将上面的 conv=ucase 改成 conv=lcase 即可。

以上就是几种常用的 dd 命令示例,可以通过查看命令手册来了解更多内容,以便可以发挥它强大的功能。

发表评论

电子邮件地址不会被公开。 必填项已用*标注