栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

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

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 秒,36.1 MB/秒

    这仅在第二个设备与第一个设备一样大或大于第一个设备时才有效。否则,您会在第二个分区上得到截断且毫无价值的分区。这里,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 条记录

    500+0 条记录

    524288000 字节 (524 MB) 已复制,1.21755 秒,431 MB/秒

    该选项count是指要复制的输入块的数量。结合块大小值,它表示要复制的总大小。例如bs=1024k并count=500给出一个size=1024K*500 =524288000 bytes =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 兆字节的数据。

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

  • 转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/733267.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号