块设备写入

时间:2011-12-05 20:44:40

标签: device block

我试图了解块设备写入的工作原理。我的理解是所有写入都需要与行业一致。因此,如果扇区大小为512字节,则所有写入的大小为512字节。现在让我们说我创建一个文件并开始按顺序写入它(在应用程序端没有缓冲)。现在假设我开始在文件的偏移零处写入16个字节。这如何转化为块级写入?它是否被缓冲,直到我写了“扇区大小”数量的数据,然后推出到磁盘?如果调用fsync,则填充剩余的字节然后写出?理解是正确还是我离开了。

后续问题如下。如果我有一个64K大小的文件。假设我在偏移64处执行16字节的随机写入。然后读取512字节的相应扇区,将16字节写入偏移64处的缓冲区,然后将512字节写入磁盘。理解是否正确?

1 个答案:

答案 0 :(得分:0)

它被称为读 - 修改 - 写:您必须首先读取扇区,更改请求的字节,然后将其写回。
只有在全扇区写入的情况下才能忽略此步骤。

我不知道Linux,但在Windows的情况下,它通常执行缓冲,如前所述,直到缓冲区已满(缓冲区可能是扇区大小的倍数),或者它完全避免缓冲并抛出如果写入未对齐或不是完整扇区,则取决于您是否请求缓冲。