首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ibs/obs/bs在dd中的用途

ibs/obs/bs在dd中的用途
EN

Stack Overflow用户
提问于 2009-08-30 21:24:00
回答 4查看 11K关注 0票数 8

我有一个在linux机器上的文件中创建文件系统的脚本。我看到为了创建文件系统,它使用带有bs=x选项的'dd‘,从/dev/zero读取并写入文件。我认为通常指定ibs/obs/bs对于从真实硬件设备读取数据是很有用的,因为它们有特定的块大小限制。然而,在这种情况下,因为它是从虚拟设备读取和写入文件,所以我看不到使用'bs=x bytes‘选项的任何意义。我的理解是不是错了?(如果有帮助,这个文件系统稍后将用于引导qemu vm)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-08-30 21:49:41

块大小是一次读取和写入的字节数。假设有一个count=选项,它是以块大小为单位指定的。如果有skip=seek=选项,它们也将以块大小为单位。但是,如果您正在读写一个常规文件,并且没有磁盘错误,那么块大小实际上并不重要,只要您可以相应地缩放这些参数,并且它们仍然是整数。但是,某些大小可能比其他大小更有效。

票数 4
EN

Stack Overflow用户

发布于 2009-08-30 22:04:13

要了解块大小,您必须熟悉磁带机。如果您对磁带机不感兴趣-例如,您认为您永远不会使用磁带机-那么您现在可以继续睡眠。

还记得60年代、70年代,甚至80年代的电影中的磁带机吗?卷轴旋转的那些,等等?不是你的艾字节甚至是QIC四分之一英寸的盒式磁带;你是不是很好的老式盘对盘半英寸磁带驱动器?在这些方面,块大小很重要。

磁带上的数据是按块写入的。每个块与下一个块之间由记录间间隙分隔。

代码语言:javascript
运行
复制
----+-------+-----+-------+-----+----
... | block | IRG | block | IRG | ...
----+-------+-----+-------+-----+----

根据磁带机硬件和软件的不同,可能会出现各种问题。例如,如果磁带的块大小为5120字节,而您读取的磁带的块大小为512字节,则磁带机可能会读取第一个块,返回其中的512字节,然后丢弃剩余的数据;下一次读取将从下一个块开始。相反,如果磁带是以512字节的块大小写入的,而您请求的块是5120字节,那么您将获得较短的读取;每次读取将仅返回512字节,如果您的软件没有注意到这一点,您将读取垃圾数据。还有一个问题是,磁带机必须加快速度才能读取数据块,然后放慢速度。ASCII技术表明,IRG比数据块小;但事实并非如此。读取一个块,超出IRG,向后倒带到下一个块,然后再次开始向前移动,都需要时间。如果磁带机没有足够的内存来缓冲数据--廉价的磁带机没有--那么您可能会严重影响磁带机的性能。

战争故事:在更新的机器上准备工作,使用稍微更现代的磁带机。我使用tar编写了一盘磁带,但没有合理的块大小(因此默认大小为512字节)。这是一个很大的软件--哦,总共不到100MB(换句话说,很久以前)。磁带写得很好,因为这台机器足够现代化,而且只花了几秒钟就做到了。但是,我必须在一台没有任何板载缓冲的老式磁带机上从磁带上取出素材。因此,它读取材料,一次512字节,然后卷轴向前摇动,读取一个区块,然后向后摇动,可能只有半英寸,然后向前读到下一个区块,然后向后摇动,然后……嗯,你可以看到它是这样做的,因为它花了相当多的时间来读取每个512字节块,总花费的时间是可怕的。我的航班是由于leave...and的缘故,我也需要得到这些数据。(这是很久以前的事了,而且在一个足够遥远的地方,在最后一刻改变航班也不是一个好的选择。)长话短说,它确实被阅读了-但如果我使用了合理的块大小(例如5120字节而不是默认的512字节),我就会完成得多,快得多,错过飞机的危险也小得多(但我确实赶上了飞机,大约还有20分钟的空闲时间,尽管我在高峰时间乘坐出租车穿过巴黎)。

对于更现代的磁带机,磁带机上有足够的内存来进行缓冲,让磁带机连续流写入而不反转是可行的。过去,我会使用256KB这样的块大小来使QIC磁带流式传输。我最近没有做太多关于磁带驱动器的事情--让我看看,这个千禧年没有做太多,在那之前的几年里也没有做太多;当然,自从CD和DVD成为软件分发机制的选择以来(当时还没有使用电子下载)。

但在过去,块大小确实很重要。dd为它提供了很好的支持。您甚至可以通过指定与obs (输出块大小)分开的ibs (输入块大小),将数据从使用4 KB块写入的磁带机传输到您想要写入的另一个磁带机(例如16 KB块)。非常有用!

此外,count参数以(输入)块大小为单位。说'dd bs=1024 count=1024 if=/dev/zero of=/my/file/of/zeroes‘来复制1MB的零是很有用的。或复制1MB的文件。

dd的重要性大大降低;对于十年前或更久以前使用磁带机的任何人来说,它都是必不可少的一部分。

票数 12
EN

Stack Overflow用户

发布于 2009-08-30 21:48:52

对于从/dev/zero读取数据,这无关紧要。ibs/obs/bs指定一次将读取多少字节。根据操作系统中读/写字节的方式选择一个数字是很有帮助的。例如,Linux通常以4096字节块的形式从硬盘读取数据。如果您至少对底层硬件如何读/写有所了解,那么指定ibs/obs/bs可能是个好主意。顺便说一句,如果您指定bs,它将覆盖您为ibs和obs指定的任何内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1354938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档