相关疑难解决方法(0)

使用 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万
查看次数

我可以从 POSIX shell 中的 stdin 读取单个字符吗?

只有read -r通过POSIX规定; read -n NUM,用于读取NUM字符,不是。从标准输入读取给定数量的字符后,是否有一种可移植的方式自动返回?

我的用例正在打印这样的提示:

Do the thing? [y/n]
Run Code Online (Sandbox Code Playgroud)

如果可能,我希望程序在键入后自动运行yn,而无需用户随后按 Enter 键。

shell-script posix portability

7
推荐指数
1
解决办法
3480
查看次数

如何对 dd 进行精细控制?

我有一张 64GB 的 MicroSD 卡。我向其中写入了一个大小为 16GB 的图像:

$ sudo dd if=my_image.img of=/dev/sdb bs=4M
3798+1 records in
3798+1 records out
15931539456 bytes (16 GB, 15 GiB) copied, 657.848 s, 24.2 MB/s
Run Code Online (Sandbox Code Playgroud)

现在,我想使用 dd 拍摄同一张 64GB SD 卡的前 15931539456 字节 (16GB) 的图像,最终得到一个与我开始使用的图像具有相同校验和的图像。

据我了解,上面 dd 的结果(3798+1)表明,从源图像中有 3798 个完整读取,以及 1 个部分读取,因为源图像的大小没有均匀地分割成 4M 块。那么我如何告诉 dd 现在将 15931539456 字节从 SD 卡复制到一个新文件中,一次 4M?

我假设我可以做类似的事情:

sudo dd if=/dev/sdb of=new_image.img bs=1 count=15931539456
Run Code Online (Sandbox Code Playgroud)

但缓冲区这么小会使操作永远持续下去。有没有办法告诉它使用 4M 的缓冲区,但只复制 X 个字节,即使这会导致最后的读取很短?

dd

0
推荐指数
1
解决办法
279
查看次数

标签 统计

dd ×2

portability ×1

posix ×1

random ×1

shell-script ×1