Linux dd 命令 - 15 个包含所有选项的示例

37 篇文章 0 订阅

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

  • 备份和恢复整个硬盘驱动器或分区。
  • 创建称为 ISO 文件的 CD 或 DVD 的虚拟文件系统和备份映像
  • 复制原始设备文件的区域,例如备份 MBR(主引导记录)。
  • 将 ASCII 等数据格式转换为 EBCDIC。
  • 将小写转换为大写,反之亦然。

只有超级用户才能执行此命令。使用此命令时应非常小心,因为使用不当可能会导致大量数据丢失。所以,有些人认为这个工具是数据破坏者。

dd 命令的语法

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

dd if=<source file name> of=<target file name> [Options]

们将通过 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 records in

97280+0 records out

99614720 bytes (100 MB) copied, 2.75838 s, 36.1 MB/s

仅在第二个设备与第一个设备一样大或大于第一个设备时才有效。否则,您会在第二个分区上得到截断且毫无价值的分区。这里,if 代表输入文件,of 代表输出文件,bs 代表块大小(一次要读取/写入的字节数)。确保您使用的块大小为 1024 字节的倍数,即 1KB。如果不指定块大小,则 dd 使用 512 字节的默认块大小。conv 值参数noerror允许工具在遇到任何错误时继续复制数据。同步选项允许使用同步 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

您将检索备份操作之前而不是操作之后存在的数据

e. 恢复压缩图像

您需要先指明压缩文件和输出文件是之前压缩过的磁盘。

# gzip -dc /tmp/vdadisk.img.gz | dd of=/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 records in

500+0 records out

524288000 bytes (524 MB) copied, 1.21755 s, 431 MB/s

选项count是指要复制的输入块的数量。结合块大小值,它表示要复制的总大小。例如bs=1024kcount=500给出一个size=1024K*500 =524288000 bytes =524MB

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

# ls -lh /file

-rw-r--r-- 1 root root 500M May 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 兆字节的数据。

#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=1and bs=512,只会复制与我们的 MBR 大小相对应的 512 个字节。

您可以使用 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 Meot 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 value 参数现在是 ascii  因为我们从 EBCDIC 转换为 ASCII

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

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

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

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

4.转换文件大小写

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

# cat file10
test dd convert

a。将文件转换为大写

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

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

该命令将创建指定的新文件。看到 nowconv选项采用ucase值。让我们检查一下结果

# cat file20 
TEST DD CONVERT

b。将文件转换为小写

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

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

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

# cat file30 
test dd convert

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

结论

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太极淘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值