shell dd命令在bs参数太大的时候会出现异常

本文探讨了dd命令中bs参数过大导致的异常行为,通过实例说明了2147479552字节的dd操作限制,并揭示了/dev/zero实验中的规律。重点在于理解dd命令在处理大容量数据时的边界条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

shell dd命令在bs参数太大的时候会出现异常。

现有一个文件

$ ll
-rw-r--r-- 1 server server 2787518108  4月 11 14:13 filea

我们想用dd命令跳过开头16448字节,得到剩下的内容。

$ dd if=filea of=filea.23 bs=16448 skip=1;
169473+1 records in
169473+1 records out
2787501660 bytes (2.8 GB) copied, 3.80907 s, 732 MB/s

$ ll 
-rw-rw-r-- 1 server server 2787501660  4月 12 16:17 filea.23

2787518108 - 2787501660 = 16448
此时得到的filea.23大小是预期的。

如果我们想用dd命令得到开头2787501100 Byte大小的内容,

$ dd if=filea.23 of=filea.2 bs=2787501100 count=1;
0+1 records in
0+1 records out
2147479552 bytes (2.1 GB) copied, 2.96711 s, 724 MB/s

$ ll
-rw-rw-r-- 1 server server 2147479552  4月 12 16:19 filea.2

我们并没有得到大小2787501100的文件,只得到了大小2147479552的文件。
这个值2147479552是上限吗?

2147479552的十六进制是 0x7ffff000

继续实验:

$ dd if=/dev/zero of=zero.2147479551 bs=2147479551 count=1
$ dd if=/dev/zero of=zero.2147479552 bs=2147479552 count=1
$ dd if=/dev/zero of=zero.2147479553 bs=2147479553 count=1
$ dd if=/dev/zero of=zero.2G bs=2147483648 count=1
$ dd if=/dev/zero of=zero.2Gminus1 bs=2147483647 count=1

不同的bs,得到的image的size如下:

-rw-rw-r--  1 server server 2147479551 Apr 12 16:43 zero.2147479551
-rw-rw-r--  1 server server 2147479552 Apr 12 16:43 zero.2147479552
-rw-rw-r--  1 server server 2147479552 Apr 12 16:41 zero.2G
-rw-rw-r--  1 server server 2147479552 Apr 12 16:42 zero.2Gminus1  

其中
生成zero.2G时bs的参数为 1024 * 1024 * 1024 * 2
生成zero.2Gminux1时bs的参数为 1024 * 1024 * 1024 * 2 -1
即dd的bs的上限是2147479552

bs超过这个上限,就只能dd这么多了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值