linux中dd命令的15个例子

linux中dd命令的15个例子

Linux dd命令是功能最强大的实用程序之一,可以通过多种方式使用。该工具主要用于复制和转换数据,因此它代表数据复制器。该工具可用于:

备份和还原整个硬盘驱动器或分区

创建虚拟文件系统以及称为ISO文件的CD或DVD的备份映像

复制原始设备文件的区域,例如备份MBR(主启动记录)。

将ASCII等数据格式转换为EBCDIC。

将小写转换为大写,反之亦然。

注意:仅超级用户可以执行此命令。使用此命令时应格外小心,因为使用不当可能会导致大量数据丢失。因此,有些人将此工具视为数据破坏者。

一、dd命令的语法

dd命令的基本用法非常简单,因为它只接受两个参数:if =指定输入文件,of =指定输出文件。这些选项的参数可以是文件或块设备。但是,我不建议您使用dd复制文件,因为cp以一种更简单的方式进行复制。但是,您可以使用它来克隆硬盘。语法是

dd if = <源文件名> of = <目标文件名> [选项]
我们将通过dd命令示例学习各种选项。

1.备份和还原整个磁盘或分区

可以将所有数据从整个磁盘/分区保存到另一个磁盘/分区。不是简单的cp命令副本,而是块大小的副本。

a、将整个磁盘备份到磁盘

您可以将所有数据(整个磁盘)从磁盘复制/dev/sda到/dev/sdb。dd对文件系统或分区一无所知;它只会将所有内容从复制/dev/sda到/dev/sdb。您需要使用bs选项指定要复制的块大小。因此,这将在相同分区上使用相同数据克隆磁盘。

#dd if = / dev / sda of = / dev / sdb bs = 4096 conv = noerror,sync
97281 + 0条记录在
97280 + 0条记录
复制了99614720字节(100 MB),2.75838 s,36.1 MB / s


仅当第二个设备与第一个设备一样大或更大时,这才起作用。否则,第二个分区将被截断且毫无价值的分区。在这里,如果代表输入文件,则代表输出文件,而bs代表块大小(一次要读取/写入的字节数)。确保您使用的块大小为1024字节的倍数,等于1KB。如果未指定块大小,则dd使用默认块大小512字节。该conv 值参数NOERROR允许工具继续复制数据,即使它遇到的任何错误。sync选项允许使用同步的I / O。

b、创建dd磁盘映像(文件映像)

您可以创建磁盘映像或文件映像。将磁盘备份到映像比复制精确数据要快。同样,磁盘映像使恢复更加容易。

#dd if = / dev / sda of = / tmp / sdadisk.img

您可以将输出文件存储在所需的位置,但必须提供一个.img以上述扩展名结尾的文件名。除了/tmp/sdadisk.img,您可以根据需要将其存储在例如/sdadisk.img。

c、创建压缩磁盘映像

因为dd会创建整个磁盘的确切内容,所以这意味着它会占用太大的空间。您可以决定使用以下命令压缩磁盘映像

#dd if = / dev / vda | gzip -c> /tmp/vdadisk.img.gz

管子| 运算符使左命令的输出成为右命令的输入。该-c选项将输出写在标准输出上,并使原始文件保持不变。

d、备份分区或将一个分区克隆到另一个分区
只能备份一个简单的分区,而不是整个磁盘。您只需要在输入文件中指定分区名称,如下所示

#dd if = / dev / sda1 of = / dev / sdb1 bs = 4096 conv = noerror,sync

这会将分区同步/dev/sda1到/dev/sdb1。您必须验证的大小/dev/sdb1应大于/dev/sda1。或者您可以如下创建分区图像

#dd if = / dev / sda1 of = / tmp / sda1.img

e、还原磁盘或分区映像
如果原始驱动器有任何问题,则保存磁盘或分区有助于恢复所有数据。要还原,您需要按如下所示将输入文件与在备份操作期间指示的输出文件反向。

#dd if = / tmp / sdadisk.img of = / dev / sda
您将检索备份操作之前而不是操作之后的数据

f、恢复压缩图像
您需要首先指示压缩文件和之前已压缩的磁盘的输出文件。

#gzip -dc /tmp/vdadisk.img.gz | dd = / dev / vda
这里的-d选项用于解压缩。注意输出文件。您可以挂载还原的磁盘以查看内容。请注意,您将在上一次压缩备份操作之后添加数据。

2.将虚拟文件系统/ CD或DVD的备份映像创建为iso文件

由于某些原因,您可能需要在Linux上创建虚拟文件系统,例如在Linux主机上创建虚拟机。您还可能需要创建CD或DVD的备份iso映像

a、创建一个虚拟文件系统
虚拟文件系统是文件中存在的文件系统,而文件又存在于物理磁盘上。您可能需要它来创建例如其他交换或循环设备或虚拟机。我们需要/dev/zero哪个文件用于创建没有数据但具有所需大小的文件(一个全零的文件)。换句话说,这将创建一个数据文件,文件中的全零将为文件提供大小。

#dd if = / dev / zero of = / file bs = 1024K count = 500
500 + 0条记录
500 + 0条记录
复制524288000字节(524 MB),1.21755 s,431 MB / s
该选项count是指要复制的输入块的数量。结合块大小值,它指示要复制的总大小。例如bs=1024k,count=500给定大小= 1024K * 500 = 524288000字节= 524MB

现在让我们检查文件的大小

#ls -lh /文件
-rw-r--r-- 1个根500M 5月17日18:57 / file
您可以看到我们已经创建了具有指定大小的虚拟文件系统。现在,您可以使用它来创建循环设备或虚拟磁盘或其他任何东西。

b、用空数据修改文件的前512个字节
如果在操作过程中指出现有的输出文件,则将丢失其数据。由于某些原因,您可能需要替换输出文件的块大小。

dd if = / dev / zero of = file1 bs = 512 count = 1 conv = notrunc
该notrunc选项表示不截断文件,仅替换前512个字节(如果存在)。否则,您将得到一个512字节的文件

c、创建CD或DVD的备份iso映像
您可能想知道为什么不只将CD的内容复制到目录中。您将如何处理CD的启动扇区?在设备上找不到该文件,因为它只是第一个扇区。另一方面,由于dd逐扇区复制,因此它也会复制该信息。

#dd if = / dev / cdrom of = / mycd.iso

您需要知道必须使用该-o loop选项,该选项允许您像安装任何普通设备一样挂载文件。因此,要挂载/mycd.iso在/mnt/cd目录上,请执行以下操作

#mount -o loop /mycd.iso / mnt / cd

d、创建可启动的USB驱动器

假设我们已将centos iso映像下载到此目录“〜/ Downloads /”。

if =〜/ Downloads / CentOS-8-x86_64-1905-dvd1.iso       -输入文件位于路径'〜/ Downloads / CentOS-8-x86_64-1905-dvd1.iso'

of = / dev / sdb     -输出文件位于路径'/ dev / sdb'中

bs = 1M       -从'〜/ Downloads / CentOS-8-x86_64-1905-dvd1.iso'中读取并一次写入'/ dev / sdb'1 MB数据。

## dd if=~/Downloads/CentOS-8-x86_64-1905-dvd1.iso of=/dev/sdb bs=1M

3.备份和还原MBR

该GRUB引导装载程序是最常见的存储在可引导驱动器的MBR。MBR构成了磁盘的前512个字节,从而为引导加载程序提供了多达466个字节的存储空间。额外的空间将用于存储该驱动器的分区表。如果MBR损坏,我们将无法启动到Linux。

a、备份MBR

因为MBR构成了磁盘的前512个字节,所以我们只需要复制该块大小

#dd if = / dev / sda of = / tmp / sdambr.img bs = 512 count = 1

使用count=1和bs=512,将仅复制512个字节,这与我们的MBR的大小相对应。

您可以使用od命令显示保存的MBR,该命令以八进制和其他格式转储文件,如下所示

#od -xa /tmp/sdambr.img
0000000 bf52 81f4 8b66 832d 087d 0f00 e284 8000
?t soh f vt-etx} bs nul si eot b nul nul
0000020 ff7c 7400 6646 1d8b 8b66 044d 3166 b0c0
| del nul t F f vt gs f vt M eot f 1 @ 0
-a选项选择命名字符并-x选择十六进制2字节单位

b、备份MBR的启动数据(分区表除外)

MBR 512字节数据位于硬盘的第一个扇区。它由446字节引导程序,64字节分区表和2字节签名组成。这意味着在备份MBR时,我们可以排除分区表和字节签名,而仅保留等于引导程序大小的块大小。

#dd if = / dev / sda of = / tmp / sdambr2.img bs = 446 count = 1

c、从MBR映像还原MBR

您可以使用以下命令还原MBR,如先前的命令所示:

#dd if = / tmp / sdambr.img of = / dev / sda

3.转换数据格式

如果输入文件使用的字符集不是主机的本机字符集,则导入操作员必须执行转换。例如,如果ASCII是主机计算机上字符串的本机格式,但是输入数据文件使用EBCDIC表示字符串,则必须将EBCDIC转换为ASCII,反之亦然。

a、将文件的数据格式从EBCDIC转换为ASCII

如果您有一个ebcdic文件(通常是从大型机系统中检索到的),那么您希望将其转换为ASCII,以便使用UNIX服务器上的文本编辑器进行修改。

#dd if = textfile.ebcdic of = textfile.ascii conv = ascii

该conv 值参数现在是 ASCII ,因为我们转换从EBCDIC到ASCII

b、将文件的数据格式从ASCII转换为EBCDIC

修改ASCII版本并完成后,您可以将其转换回EBCDIC,以供您的应用程序使用。

#dd if = textfile.ascii of = textfile.ebcdic conv = ebcdic

该conv 值参数现在是Ë bcdic 因为我们从ASCII转换到EBCDIC。如果仅用具有不同字符的等效字节替换特定数量的字节,则转换将很顺利,并且读取文件的应用程序应该没有任何问题。

4.转换文件大小写

DD命令也可以用于令人惊奇的事情。它可以将文件中的所有文本(字母)转换为大写或小写,反之亦然。对于下面的示例,我们将有一个测试文件。

# cat file10
test dd convert

a、将文件转换为大写

因为我们的文本文件示例是小写的,所以我们将其转换为大写

#dd if =〜/ file10 of =〜/ file20 conv = ucase

该命令将创建指示的新文件。看到现在conv选项具有ucase值。让我们检查一下结果

# cat file20
TEST DD CONVERT

b。将文件转换为小写

现在我们将执行反向操作,它将转换为小写

#dd if =〜/ file20 of =〜/ file30 conv = lcase

看到我们使用LCASE 的conv选项从大写转换为小写。

# cat file30
test dd convert

dd命令不转换文件名,仅转换其内容。

二、结论

dd命令尽管在技术上不是归档命令,但在某些方面相似,因为它可以将整个分区或磁盘复制到文件中,反之亦然。

{{collectdata}}

网友评论0