通常您可能会将数据放在分区上,有时您可能需要备份设备或其中的分区。RaspberryPi用户当然对可启动的SD卡有这个要求。其他小型计算机的用户也会发现这很有用。有时最好在设备看起来要出故障时进行快速备份。要执行本文中的实验,您需要一个名为dcfldd的工具。dcfldd工具该工具是coreutils包中dd工具的增强版。dcfldd是由NicholasHarbor在美国国防部计算机取证实验室(DCFL)工作时开发的。该工具的名称也基于他的工作地点-dcfldd。对于仍在使用CoreUtils8.23或更低版本的系统,没有可以轻松查看正在创建的副本进度的选项。有时看起来什么都没发生,您只想取消备份。注意:如果您使用8.24或更高版本的dd工具,则不需要使用dcfldd,只需将dcfldd替换为dd。所有其他参数仍然适用。在Debian系统上,您只需在包管理器中搜索dcfldd。您还可以打开终端并输入以下命令:sudoapt-getinstalldcfldd对于RedHat系统,使用以下命令:cd/tmpwgetdl.fedoraproject.org/pub/epel/6/i386/dcfldd-1.3.4.1-4。el6.i686.rpmsudoyuminstallldcfldd-1.3.4.1-4.el6.i686.rpmdcfldd--version注意:以上命令安装的是32位版本。对于64位版本,使用以下命令:cd/tmpwgetdl.fedoraproject.org/pub/epel/6/x86_64/dcfldd-1.3.4.1-4.el6.x86_64.rpmsudoyuminstalldcfldd-1.3.4.1-4.el6。x86_64。rpmdcfldd--version每组命令中的最后一条语句列出了dcfldd的版本并显示命令文件已加载。注意:确保以root用户身份执行dd或dcfldd命令。安装该工具后,您可以继续使用它来备份和恢复分区。备份分区备份设备时,您可以备份整个设备或只备份其中一个分区。如果设备有多个分区,我们可以单独备份每个分区。在进行备份之前,让我们先了解一下设备和分区之间的区别。假设我们有一张SD卡已被格式化为一个大磁盘。此SD卡只有一个分区。如果空间被分割使得SD卡看起来是两个设备,那么它有两个分区。假设我们在RaspberryPi中有一张SD卡。SD卡容量为8GB,有两个分区。第一个分区存储BerryBoot引导加载程序。第二个分区存放Kali(LCTT译注:KaliLinux是Debian派生的Linux发行版)。现在没有可用空间来安装第二个操作系统。我们使用第二张16GB的SD卡,但是在复制到第二张SD卡之前必须先备份第一张SD卡。要备份第一张SD卡,我们需要备份设备/dev/sdc。备份命令如下:dcflddif=/dev/sdcof=/tmp/SD-Card-Backup.img备份包括输入文件(if)和名为SD-Card-Backup.img的文件设置为/tmp目录输出文件(of)。dd和dcfldd都默认一次读取和写入一个块的文件。通过以上命令,默认一次可以读写512字节。请记住,副本是一个精确的副本-逐字节。可以使用块大小参数-bs=更改默认的512字节。比如一次读写1兆字节,参数为bs=1M。可以使用以下缩写设置不同的大小:b-512字节KB-1000字节K-1024字节MB-1000x1000字节M-1024x1024字节GB-1000x1000x1000字节G-1024x1024x1024字节您还可以单独指定读取和读取的块大小写。要指定读取块大小,请使用ibs=。要指定写入块大小,请使用obs=。我使用三种不同的块大小对120MB分区进行了备份测试。我第一次使用默认的512字节,用了7秒。第二个块大小为1024K,耗时2秒。第三个块大小为2048K,耗时3秒。时间因系统和其他硬件实现而异,但通常较大的块大小比默认值稍快。备份完成后,您还需要知道如何将数据恢复到设备。恢复分区现在我们有了一个备份点,假设数据可能会损坏或由于某种原因需要恢复。命令与备份时相同,只是源和目标位置相反。对于上面的示例,命令将变为:dcflddof=/dev/sdcif=/tmp/SD-Card-Backup.img这里,图像文件用作输入文件(if),设备(sdc)用作输出文件(的)。注意:请记住,输出设备将被覆盖并且其上的所有数据都将丢失。一般来说,恢复数据前最好用GParted删除SD卡上的所有分区。如果您使用多张SD卡,例如多张RaspberryPi板,您可以一次写入多张SD卡。为此,您需要知道卡在系统中的ID。例如,假设我们要将映像BerryBoot.img复制到两张SD卡。SD卡分别是/dev/sdc和/dev/sdd。以下命令在显示进度时一次读取和写入1MB块。命令如下:dcflddif=BerryBoot.imgbs=1Mstatus=progress|tee>(dcflddof=/dev/sdc)|dcflddof=/dev/sdd在这个命令中,第一个dcfldd指定了输入文件并设置块大小为1MB。状态参数设置为显示进度。然后通过管道传输输入|到命令发球台。tee用于将输入分发到多个地方。第一个输出是命令dcflddof=/dev/sdc。命令括在括号中,作为一个命令执行。我们还需要安装一个管道|,否则命令tee会将信息发送到stdout(屏幕)。因此,***输出被发送到命令dcflddof=/dev/sdd。如果您有第三张SD卡,甚至更多,只需添加另一个重定向和命令,例如>(dcflddof=/dev/sde。注意:记住***一个命令必须在管道|之后。必须验证写入data确保数据正确。验证数据创建镜像或恢复备份后,您可以验证写入的数据。要验证数据,您将使用一个名为diff的不同程序。要使用diff,您需要指定图像文件的位置和系统上要从中复制或写入的物理介质。您可以在创建备份或恢复映像后使用diff命令。该命令有两个参数。第一个是物理介质,第二个是图像文件名。例如dcflddof=/dev/sdcif=/tmp/SD-Card-Backup.img,对应的diff命令为:diff/dev/sdc/tmp/SD-Card-Backup.img如果有区别,你会被告知。如果什么都没有显示,则数据被验证为相同。确保数据完全一致是验证备份和恢复完整性的关键。进行备份时要注意的主要事项之一是图像大小。分割镜像假定您要备份16GBSD卡。图像文件的大小将大致相同。如果只能备份到FAT32分区怎么办?FAT32***文件大小限制为4GB。所要做的就是将文件分成4GB的碎片。管道|管道数据到拆分命令以拆分正在写入的图像文件。创建备份的方法相同,但命令包括管道和拆分命令。示例备份命令为dcflddif=/dev/sdcof=/tmp/SD-Card-Backup.img,新的文件拆分命令为:dcflddif=/dev/sdc|split-b4000MB-/tmp/SD-Card-Backup.img注意:大小后缀对于dd和dcfldd命令具有相同的含义。split命令中的破折号用于使用从dcfldd命令传输的数据填充输入文件。这些文件将保存为SD-Card-Backup.imgaa、SD-Card-Backup.imgab等。如果您担心太接近4GB限制,请尝试3500MB。将文件恢复到设备也很简单。您可以使用cat命令将它们连接起来,然后使用dcfldd写入输出,如下所示:cat/tmp/SD-Card-Backup.img*|dcflddof=/dev/sdc您可以在命令的dcfldd部分包含任何所需的参数。我希望您理解并能够执行任何必要的数据备份和恢复,就像SD卡和类似设备所要求的那样。(标题图片:Pixabay,CC0)
