相关疑难解决方法(0)

有没有办法确定 dd 的 bs 参数的最佳值?

有时我会在网上看到“确保你设置 'bs=' 因为默认值会花费太长时间”的评论,以及我自己非常不科学的经验,“这似乎比其他人花费的时间更长上周时间”似乎证明了这一点。因此,每当我使用“dd”(通常在 1-2GB 范围内)时,我都会确保指定 bytes 参数。大约有一半的时间我使用我从中复制的任何在线指南中指定的值;剩下的时间我会从'fdisk -l'列表中选择一些有意义的数字,我认为是较慢的媒体(例如我正在写入的SD卡)。

对于给定的情况(媒体类型、总线大小或其他重要事项),有没有办法确定“最佳”值?容易确定吗?如果没有,是否有一种简单的方法可以达到 90-95%?或者“只选择大于 512 的东西”甚至是正确答案?

我想过自己尝试这个实验,但是(除了工作量很大)我不确定哪些因素会影响答案,所以我不知道如何设计一个好的实验。

performance dd file-copy

81
推荐指数
3
解决办法
6万
查看次数

dd什么时候适合拷贝数据?(或者,什么时候 read() 和 write() 是部分的)

简短版本:在什么情况下可以dd安全地用于复制数据,安全意味着不存在由于部分读取或写入而导致损坏的风险?

长版本 — 序言: dd通常用于复制数据,尤其是从设备复制数据或向设备复制数据(示例)。有时将其归因于能够以比其他工具更低的级别访问设备的神秘特性(实际上是设备文件在发挥作用)——但dd if=/dev/sdacat /dev/sda. dd有时被认为更快,但cat在实践中可以击败它。尽管如此,它dd具有独特的特性,使其有时真正有用

问题: dd if=foo of=bar实际上与cat <foo >bar. 在大多数 unices¹ 上,ddread(). (我发现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有一个 …

io dd

73
推荐指数
2
解决办法
2万
查看次数

使用 dd 创建随机数据并获得“部分读取警告”。现在警告后的数据真的是随机的吗?

我创建了一个带有随机数据的 1TB 文件dd if=/dev/urandom of=file bs=1M count=1000000。现在我检查kill -SIGUSR1 <PID>进度并得到以下信息:

691581+0 Datensätze ein
691580+0 Datensätze aus
725174190080 Bytes (725 GB) kopiert, 86256,9 s, 8,4 MB/s
800950+1 Datensätze ein
800950+0 Datensätze aus
839856947200 Bytes (840 GB) kopiert, 99429,5 s, 8,4 MB/s
dd: warning: partial read (809620 bytes); suggest iflag=fullblock
803432+1 Datensätze ein
803431+1 Datensätze aus
842459273876 Bytes (842 GB) kopiert, 99791,3 s, 8,4 MB/s
Run Code Online (Sandbox Code Playgroud)

我无法解释警告。它说什么?警告后我的文件真的是随机的还是有问题?什么+ 0或+1的800950+1 Datensätze ein800950+0 Datensätze aus是什么意思?警告后为+1。它是一个错误计数吗?

dd random

21
推荐指数
2
解决办法
2万
查看次数

如何以合理的速度复制二进制文件的任意部分?

如何以合理的速度复制二进制文件的任意部分?

显然,ddwithbs=1非常慢,而设置bs为另一个值则无法复制任意部分。

这是错的吗?可以用 做吗dd?如果不是的话,那么工具是什么?

例如,这个命令,

dd if="$img" of=tail.bin bs=2147483648 skip=1 status=progress
Run Code Online (Sandbox Code Playgroud)

复制错误的尾部。

而这个命令,

dd if="$img" of=tail.bin bs=1 skip=2147483648 status=progress
Run Code Online (Sandbox Code Playgroud)

非常慢。

dd

9
推荐指数
2
解决办法
2632
查看次数

dd 删除字节范围

鉴于此文件

$ cat hello.txt
hello doge world
Run Code Online (Sandbox Code Playgroud)

我想删除一系列字节以结束这个

$ cat hello.txt
heorld
Run Code Online (Sandbox Code Playgroud)

dd如果可能的话,我想这样做。原因是因为我已经使用dd这种方式覆盖字节

printf '\x5E' | dd conv=notrunc of=hello.txt bs=1 seek=$((0xE))
Run Code Online (Sandbox Code Playgroud)

我更喜欢写回同一个文件,但不同的输出文件也可以。

dd shell-script

6
推荐指数
2
解决办法
2886
查看次数

使用 dd 提取文件的精确部分?

我有一个 588Ko 文件,我想提取从 0x7E8D6 到 0x8AD5D 的字节。我试过 :
dd if=file of=result bs=50311 count=1 skip=518358

  • 50311 代表 0x8AD5D - 0x7E8D6
  • 518358代表0x7E8D6(从我要剪切的地方)

dd 告诉我它无法跳到指定的偏移量。我能做些什么?还有其他实用程序可以做到这一点吗?

dd binary files

2
推荐指数
1
解决办法
2万
查看次数

标签 统计

dd ×6

binary ×1

file-copy ×1

files ×1

io ×1

performance ×1

random ×1

shell-script ×1