在Linux中使用dd工具安全可靠地制作驱动器、分区和文件系统的完整映像。本文摘自ManningPress出版的《LinuxinAction》一书第4章。无论您是从即将发生故障的存储驱动器中抢救数据,还是想要远程备份本地存档,或者在其他地方制作活动分区的完整副本,您都需要知道如何安全可靠地复制驱动器和文件系统。幸运的是,dd是一个简单但功能强大的镜像复制命令,您可以使用它,并且在未来很长一段时间内永远不会有比dd更好的工具,也许永远。完整复制驱动器和分区后,您会发现可以使用dd执行各种任务,但它最重要的功能是处理磁盘分区。当然,你可以使用tar命令或者scp命令,从一台计算机上复制整个文件系统的文件,然后将这些文件原样粘贴到另一台刚刚安装了Linux操作系统的计算机上。但是,由于那些文件系统档案并不是完整的映像文件,所以复制文件的过程需要以计算机操作系统的运行为基础。另一方面,使用dd可以完美地对任何数字信息进行逐字节镜像。但是无论何时何地,只要你想对分区进行操作,我就告诉你,早期的Unix管理员曾经这样开玩笑:“ddmeansdiskdestroyer”(LCTT译注:dd原意为磁盘复制磁盘转储)。使用dd命令时,即使输入一个字母,它也可能立即断然清除整个磁盘驱动器上的所有重要数据。因此,一定要注意命令的拼写格式规范。切记:在按回车执行dd命令之前,先停下来仔细想一想。dd命令的基本操作既然已经正确地提醒了您,我们将从一些简单的事情开始。假设您想要创建名为/dev/sda的整个磁盘数据的精确映像,您已经插入了一个空磁盘驱动器(最好与代号为/dev/sda的磁盘驱动器具有相同的容量)。语法很简单:if=定义源驱动器,of=定义你想要保存数据的文件或位置:#ddif=/dev/sdaof=/dev/sdb下面的例子将创建/dev/sdadrives一个.img镜像文件,然后将该文件保存在你的用户帐户主目录中:#ddif=/dev/sdaof=/home/username/sdadisk.img上面的命令为整个驱动器创建了一个镜像文件,并且您还可以对驱动器上的各个分区执行操作。以下示例对驱动器的单个分区进行操作,并使用bs参数设置一次要复制的字节数(在本例中为4096)。设置bs参数的值可能会影响dd命令的整体运行速度。此参数的理想设置取决于您的硬件配置和其他考虑因素。#ddif=/dev/sda2of=/home/username/partition2.imgbs=4096数据恢复非常简单:将if和of参数取反即可有效完成任务。在此示例中,if=使用您要恢复的映像,of=使用您要将映像写入的驱动器:#ddif=sdadisk.imgof=/dev/sdb您也可以在一个命令中执行这两项操作并复制任务。以下示例将使用SSH从远程驱动器创建压缩图像文件并将文件保存到本地计算机:#sshusername@54.98.132.10"ddif=/dev/sda|gzip-1-"|ddof=backup.gz你应该经常测试你的档案以确保它们有效。如果它是您创建的启动驱动器,请将其粘贴到您的计算机中并查看它是否按预期启动。如果是普通分区的数据,挂载该分区,确保文件存在并可以正常访问。使用dd擦磁盘数据很多年前,我一个负责政府驻外使馆安全的朋友曾告诉我,在他任职期间,政府会给每个大使馆提供一个正式版的锤子。为什么?一旦大使馆设施可能被不友好的人员占领,这把锤子就会用来摧毁所有的硬盘驱动器。为什么要这样做?为什么不直接删除数据?你在开玩笑吧?众所周知,从存储设备中删除包含敏感信息的文件并不会真正删除数据。如果有足够的时间和动力,几乎可以从任何数字存储介质中检索几乎所有内容,除非该介质被锤子完全破坏。但是,您可以使用dd命令让坏人很难获得您的旧数据。该命令需要一些时间在/dev/sda1分区上的每个扇区写入数百万个0(LCTT译注:指的是0x0字节,表示NUL,而不是数字0):#ddif=/dev/zeroof=/dev/sda1有更好的方法。通过使用/dev/urandom作为源文件,你可以在磁盘上写入随机字符:#ddif=/dev/urandomof=/dev/sda1监控dd作为磁盘或磁盘分区的存档的操作可能需要很长一段时间,因此您可能需要向命令添加进度查看器。安装管道查看器(在Ubuntu系统上使用sudoaptinstallpv),然后将pv命令与dd命令结合使用。对于pv,最终命令如下所示:#ddif=/dev/urandom|光伏|ddof=/dev/sda14,14MB0:00:05[98kB/s][<=>]想推迟备份和磁盘管理工作?使用dd工具,您将不会有太多借口。这真的很简单,但要小心。祝你好运!
