技术解析

读取一个文件是否为顺序 io?
0
2021-06-22 07:49:29
idczone

这个文件可能在不同的时间都有过写入,或者说这个文件在间隔比较久后追加内容后在磁盘中是否连续?


剩余空间够大,磁盘碎片率不严重时,你可以认为它是近似连续的。

感谢回复,是否有相关原理的知识可以分享一下?感觉不可能是创建一个文件之后会预留一部分空间吧?

我理解是不连续的。
我是这么分析的:文件创建的时候,操作系统会预先分配几个 block,如果这时再创建一个新文件,系统会把后续几个 block 分给新文件,那第一个文件增长的时候只能再重新分配新的 block,这些 block 不能保证和之前的连续。要想 block 连续需要把之前的文件 move 到更连续的 block,这代价很大。
具体可以看看 linux 操作系统的实现。

根据文件系统的实现。
写入文件的时候可以预先提醒内核你要多大的空间,方便文件系统给你预留。

可以参考一下 ext4 文件系统的内核源码

感觉一直连续的话除非两个中间预留了很大一部分空间。。。但是之前了解到 ext 文件系统已经可以解决大部分的碎片问题了,看来还得看看相关文件系统的知识。。。
真的有这样的系统调用吗?

跟文件系统有关,你要是 ntfs 那种稀疏文件系统就更奇怪了

物理上一般不是连续的,以 ext2 为例,一个 inode 可以有多个不连续的 data block,data block 用于存储实际文件数据。

一般是使用 Preallocate 来预留的。

块很大时,浪费空间,但是文件的增加减少,不会导致文件碎片。
块小时,不浪费空间,但是文件碎块变多。
linux 不用整理磁盘是骗人的,是 ext3,是浪费空间的。
ext4,也需要整理碎块,也有整理碎块程序了。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服