我还没有使用dd那么多,但到目前为止它还没有让我失望。现在,我已经dd进行了 12 多个小时 - 我正在将图像写回它来自的磁盘 - 我有点担心,因为我能够dd从磁盘到图像大约7小时。
我在配备 Core 2 Duo 的 MacBook 上运行 OSX 10.6.6,频率为 2.1ghz/core,内存为 4gb。我正在从 7200rpm 硬盘驱动器(引导驱动器)上的 .dmg 中读取数据,并且正在写入通过 SATA-to-USB 连接器连接的 7200rpm 驱动器。我默认保留了块大小,图像大约为 160GB。
编辑:而且,经过 14 小时的纯压力,dd毕竟工作得很好。不过,下一次,我将运行它pv并使用strace. 感谢大家的帮助。
我最近意识到我们可以使用cat尽可能多的dd,而且它实际上比dd
我知道这dd在处理块大小实际上影响正确性而不仅仅是性能的磁带时很有用。然而,在这些日子里,是否存在dd可以做一些cat不能做的事情?(在这里,我认为不到 20% 的性能差异无关紧要。)
具体的例子会很好!
这是我经常遇到的情况:
我想将 320GB 的数据从源服务器传输到目标服务器(特别是来自 的数据/dev/sda)。
我在网上搜索了这个问题,并测试了几个命令。出现频率最高的就是这个:
ssh user@192.168.1.100 'dd bs=16M if=/dev/sda | gzip' > backup_sda.gz
Run Code Online (Sandbox Code Playgroud)
这个命令被证明太慢了(它运行了一个小时,只得到了大约 80GB 的数据)。1GB 的测试数据包大约需要 1 分 22 秒,最终在未压缩时速度是原来的两倍。结果也可能因传输的文件小于源系统上的 RAM 量而产生偏差。
此外(这是在 1GB 测试片上测试的),如果我使用gzip命令和dd; 与直接通过管道传输相比,在目标上提取的结果文件具有不同的校验和。我仍在试图弄清楚为什么会发生这种情况。
如何在本地计算机上使用 SSH 创建远程磁盘的备份并将其保存到本地磁盘?
我尝试了以下方法:
ssh hostname@my.ip.address "sudo dd if=/dev/sdX " | \
dd of=/home/username/Documents/filename.image`
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
不存在 tty 且未指定 askpass 程序
我喜欢在第一次备份系统时创建映像备份。在第一次之后,我使用 rsync 进行增量备份。
我平时的镜像备份如下:
安装并清零空白空间:
dd if=/dev/zero of=temp.dd bs=1M
rm temp.dd
在压缩驱动器的同时卸载并添加驱动器
dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c > /mnt/sda1/hda.ddimg.gz
为了让系统恢复正常,我通常会做一个
gunzip -c /mnt/sda1/hda.img.gz | dd of=/dev/hda conv=sync,noerror bs=64K
这真的很简单,允许我保存“整个驱动器”,但实际上只是节省了已用空间。
这是问题所在。假设我执行了上述操作,但不是在干净的系统上执行,并且没有足够快地进行 rsync 备份,并且我想访问映像上的文件。假设我没有存储空间来实际解压缩图像并将其 dd 到驱动器,但想挂载图像以从中获取单个文件......这可能吗?
通常情况下,人们不会压缩 dd 图像,这将允许您仅使用-o loop...挂载图像,但这不是我的情况...
有什么建议可以即时安装压缩的 img 吗?
是否会使用AVFS来“挂载”gz 文件然后挂载内部 dd.img 工作(我不这么认为......但需要验证......)?
有时我会在网上看到“确保你设置 'bs=' 因为默认值会花费太长时间”的评论,以及我自己非常不科学的经验,“这似乎比其他人花费的时间更长上周时间”似乎证明了这一点。因此,每当我使用“dd”(通常在 1-2GB 范围内)时,我都会确保指定 bytes 参数。大约有一半的时间我使用我从中复制的任何在线指南中指定的值;剩下的时间我会从'fdisk -l'列表中选择一些有意义的数字,我认为是较慢的媒体(例如我正在写入的SD卡)。
对于给定的情况(媒体类型、总线大小或其他重要事项),有没有办法确定“最佳”值?容易确定吗?如果没有,是否有一种简单的方法可以达到 90-95%?或者“只选择大于 512 的东西”甚至是正确答案?
我想过自己尝试这个实验,但是(除了工作量很大)我不确定哪些因素会影响答案,所以我不知道如何设计一个好的实验。
今天我不得不从一个 800MB 的混合文本/二进制文件中删除前 1131 个字节,我正在为一个新的存储库进行过滤的颠覆转储。做到这一点的最佳方法是什么?
首先我试过
dd bs=1 skip=1131 if=filtered.dump of=trimmed.dump
Run Code Online (Sandbox Code Playgroud)
但是在跳过之后,它一次一个字节地复制文件的其余部分,即非常慢。最后我计算出我需要 405 个字节来将其四舍五入为三个 512 块,我可以跳过
dd if=/dev/zero of=405zeros bs=1 count=405
cat 405zeros filtered.dump | dd bs=512 skip=3 of=trimmed.dump
Run Code Online (Sandbox Code Playgroud)
哪个完成得相当快,但一定有更简单/更好的方法?有没有我忘记的另一个工具?
简短版本:在什么情况下可以dd安全地用于复制数据,安全意味着不存在由于部分读取或写入而导致损坏的风险?
长版本 — 序言: dd通常用于复制数据,尤其是从设备复制数据或向设备复制数据(示例)。有时将其归因于能够以比其他工具更低的级别访问设备的神秘特性(实际上是设备文件在发挥作用)——但dd if=/dev/sda与cat /dev/sda. dd有时被认为更快,但cat在实践中可以击败它。尽管如此,它dd具有独特的特性,使其有时真正有用。
问题: dd if=foo of=bar实际上与cat <foo >bar. 在大多数 unices¹ 上,dd对read(). (我发现POSIX在什么构成“读取输入块”方面很模糊dd。)如果read()返回部分结果(根据 POSIX 和其他参考文档,除非实现文档另有说明,否则允许这样做),则复制部分块。存在完全相同的问题write()。
观察:在实践中,我发现dd可以处理块设备和常规文件,但这可能只是我没有太多练习。说到管道,不难找dd错;例如试试这个代码:
yes | dd of=out bs=1024k count=10
Run Code Online (Sandbox Code Playgroud)
并检查out文件的大小(它可能远低于 10MB)。
问题:在什么情况下可以dd安全地用于复制数据?换句话说,在块大小、实现、文件类型等方面的哪些条件可以确保dd将复制所有数据?
(GNU dd有一个 …
我正在将一些数据 CD/DVD 复制到 ISO 文件中,以便以后在驱动器中不需要它们的情况下使用它们。
我在网上寻找程序,我发现了很多:
使用的cat复制介质:http://www.yolinux.com/TUTORIALS/LinuxTutorialCDBurn.html
cat /dev/sr0 > image.iso
Run Code Online (Sandbox Code Playgroud)dd这样做的用途(显然是最广泛使用的):http : //www.linuxjournal.com/content/archiving-cds-iso-commandline
dd if=/dev/cdrom bs=blocksize count=count of=/path/to/isoimage.iso
Run Code Online (Sandbox Code Playgroud)使用 justpv来完成此操作:有关man pv更多信息,请参阅此处,但这里有一个摘录:
Taking an image of a disk, skipping errors:
pv -EE /dev/sda > disk-image.img
Writing an image back to a disk:
pv disk-image.img > /dev/sda
Zeroing a disk:
pv < /dev/zero > /dev/sda
Run Code Online (Sandbox Code Playgroud)我不知道是不是所有的人都应该是等价的,虽然我测试了其中的一些(使用md5sum工具)和,至少,dd并且pv是不等价的。以下是md5sum使用每个过程的驱动器和生成的文件:
dd程序的md5: 71b676875b0194495060b38f35237c3c
光伏程序的md5: f3524d81fdeeef962b01e1d86e6acc04
编辑: …
我非常清楚该命令的作用,但是man dd,请info dd告诉我:“转换和复制文件”,GNU Coreutils 也是如此。
谷歌说它是医学和网络聊天俚语之间一切的缩写;除了有人说这意味着“数据破坏者”,在 PC 取证中使用的东西 - 如果我的 dd 破坏了我的数据,我会感到震惊!
任何见解?:-)
更新:当然我必须检查行话文件:
Unix dd(1) 设计有一个奇怪的、明显非 Unixy 关键字选项语法,让人联想到 IBM System/360 JCL(它有一个针对 I/O 设备的精心设计的 DD 'Dataset Definition' 规范)
听起来仍然很模棱两可,但它说:
尽管命令满足了需求,但界面设计显然是个恶作剧。
呵呵:-)
dd ×10
backup ×2
cat ×2
hard-disk ×2
cloning ×1
command-line ×1
compression ×1
disk-image ×1
file-copy ×1
io ×1
linux ×1
mount ×1
networking ×1
osx ×1
performance ×1
pv ×1
remote ×1
ssh ×1