相关疑难解决方法(0)

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

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

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

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

performance dd file-copy

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

强制 dd 不缓存或不从缓存中读取

我正在使用 dd 的 busybox 版本开发嵌入式系统。我正在尝试从某个外部实用程序测试对驱动器的擦除,但是 dd 在擦除后不会再次从光盘读取,而是向我显示缓存的数据。

我已经将它缩小到 dd ,因为当我执行初始 dd,查看数据,重新启动系统以刷新缓存,进行擦除,然后再次运行 dd 时,它出现了全零。

但是,如果我在出厂设置上执行 dd,擦除驱动器,然后在不重新启动的情况下再次执行 dd,则在重新启动之前不会显示全为零。

我在 GNU 联机帮助页中读到 dd 支持带有 nocache 标志的 iflag opt,但 busybox 不支持该选项,所以这是不可能的。

我的问题是如何强制 dd 再次从磁盘而不是从缓存中读取?

linux dd

25
推荐指数
4
解决办法
4万
查看次数

为什么到 dd 管道的 gunzip 最终会变慢?

我的命令:

gunzip -c serial2udp.image.gz |
sudo dd of=/dev/mmcblk0 conv=fsync,notrunc status=progress bs=4M
Run Code Online (Sandbox Code Playgroud)

我的输出:

15930949632 bytes (16 GB, 15 GiB) copied, 1049 s, 15.2 MB/s    

0+331128 records in
0+331128 records out
15931539456 bytes (16 GB, 15 GiB) copied, 1995.2 s, 8.0 MB/s
Run Code Online (Sandbox Code Playgroud)

卡:SanDisk Ultra 32GB MicroSDHC Class 10 UHS 存储卡速度高达 30MB/s
发行版:16.0.4 xenial with xfce
内核版本:4.13.0.37-generic

我知道从我读过的内容来看,花 17 分钟似乎是合理的。玩块大小似乎并没有太大区别(bs=100M 仍然表现出类似时间戳的这种行为)。为什么更新挂起,并且在 16 分钟内没有生成完成的报告?

iotop 告诉我 mmcqd/0 此时仍在后台运行(以 99% IO),所以我认为某处有一个缓存占用了最后的 5MB,但我认为 fsync 应该确保不会发生iotop 显示此时 dd 也没有交通路口。ctrl-c 几乎没用,我不想在写入后损坏我的驱动器。

linux gzip dd sd-card iotop

5
推荐指数
1
解决办法
4695
查看次数

标签 统计

dd ×3

linux ×2

file-copy ×1

gzip ×1

iotop ×1

performance ×1

sd-card ×1