0

我想知道是否有某些版本的 dd 不理解乘法后缀。从 dd 手册页中它说:

bs=BYTES
    read and write BYTES bytes at a time (also see ibs=,obs=) 
BLOCKS and BYTES may be followed by the following multiplicative suffixes: c =1, w =2, b =512, kB =1000, K =1024, MB =1000*1000, M =1024*1024, xM =M GB =1000*1000*1000, G =1024*1024*1024, and so on for T, P, E, Z, Y.

但是当我在 bs 参数上运行带有 G 后缀的 dd 时,我收到一个关于无法理解的数字的错误:

bash $ dd if=/dev/urandom of=largeMovie.avi count=1024 bs=75G
dd: invalid number `75G'

dd的版本如下:

bash $ dd --version
dd (coreutils) 5.97

一个

4

2 回答 2

1

G不是标准后缀。因此行为是未定义的。

唯一的标准后缀是k(1024) 和b(512)。如果你想要其他任何东西,你可以x在几个带后缀的数字之间使用来相乘:

dd bs=1024 count=75x1024x1024x1024

(您的示例尝试分配 75GiB 的 RAM,这很少可以,所以我切换了bsand count

这是POSIX所说的:

对于 bs=、cbs=、ibs= 和 obs= 操作数,应用程序应提供指定字节大小的表达式。表达式 expr 可以是:

正十进制数

一个正十进制数,后跟 k,指定乘以 1024

一个正十进制数后跟 b,指定乘以 512

两个或多个以 x 分隔的正十进制数(带或不带 k 或 b),指定指示值的乘积

于 2016-01-08T00:27:15.553 回答
0

我认为您使用的是 32 位,并且 75G 比 size_t 大。即使在 64 位上,您至少需要可用的内存量,因为 dd 将分配 bs 指定大小的缓冲区。

于 2016-01-08T00:15:34.747 回答