系统相关
首页 > 系统相关> > linux – 为什么在复制有限大小的设备时指定块大小?

linux – 为什么在复制有限大小的设备时指定块大小?

作者:互联网

在在线教程中,通常建议使用以下命令将CDROM复制到iso映像:

$dd if=/dev/dvd of=foobar.iso bs=2048

为什么必须指定字节大小?我注意到事实上2048是standard byte size for CDROM images,但似乎没有指定bs =或count =的dd也可以.

从有限大小的设备复制时,在什么情况下不指定bs =或count =会有问题?

解决方法:

When is dd suitable for copying data? (or, when are read() and write() partial)在使用count时指出了一个重要的警告:dd可以复制部分块,因此当给定计数时,它将在给定的块数之后停止,即使某些块不完整.因此,除非指定iflag = fullblock,否则最终复制的字节数少于bs * count个字节.

dd的默认块大小为512字节.数是一个限制;正如您的问题提示,在复制有限大小的设备时不需要它,并且实际上只是要复制设备的一部分.

我认为这里有两个方面需要考虑:性能和数据恢复.

就性能而言,理想情况下,您希望块大小至少等于基础物理块大小和倍数(因此在读取CD-ROM时为2048字节).实际上,现在您可以指定更大的块大小,以便为底层缓存系统提供缓冲内容的机会.但是增加块大小意味着dd必须使用更多的内存,如果由于数据包碎片而在网络上进行复制,则可能会适得其反.

就数据恢复而言,如果使用较小的块大小,则可以从发生故障的硬盘中检索更多数据;这就是dd-rescue等程序自动执行的操作:它们最初会读取大块,但如果块失败,则会以较小的块大小重新读取它. dd不会这样做,它只会在整个块中失败.

标签:cloning,linux,dd,hard-disk
来源: https://codeday.me/bug/20190809/1628486.html