首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
华为云
V2EX  ›  Linux

读取一个文件是否为顺序 io?

  •  1
     
  •   puritania · 56 天前 · 1004 次点击
    这是一个创建于 56 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    10 回复  |  直到 2018-09-21 17:21:33 +08:00
        1
    sagaxu   56 天前 via Android
    剩余空间够大,磁盘碎片率不严重时,你可以认为它是近似连续的。
        2
    puritania   56 天前
    @sagaxu 感谢回复,是否有相关原理的知识可以分享一下?感觉不可能是创建一个文件之后会预留一部分空间吧?
        3
    simonliu2018   56 天前   ♥ 1
    我理解是不连续的。

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

    具体可以看看 linux 操作系统的实现。
        4
    msg7086   56 天前
    根据文件系统的实现。
    写入文件的时候可以预先提醒内核你要多大的空间,方便文件系统给你预留。
        5
    sagaxu   56 天前 via Android
    @puritania 可以参考一下 ext4 文件系统的内核源码
        6
    puritania   56 天前
    @simonliu2018 感觉一直连续的话除非两个中间预留了很大一部分空间。。。但是之前了解到 ext 文件系统已经可以解决大部分的碎片问题了,看来还得看看相关文件系统的知识。。。
    @msg7086 真的有这样的系统调用吗?
        7
    kfchyc   56 天前 via iPhone
    跟文件系统有关,你要是 ntfs 那种稀疏文件系统就更奇怪了
        8
    liuxu   56 天前
    物理上一般不是连续的,以 ext2 为例,一个 inode 可以有多个不连续的 data block,data block 用于存储实际文件数据。
        9
    msg7086   56 天前
    @puritania 一般是使用 Preallocate 来预留的。
        10
    ps1aniuge   53 天前
    块很大时,浪费空间,但是文件的增加减少,不会导致文件碎片。
    块小时,不浪费空间,但是文件碎块变多。
    linux 不用整理磁盘是骗人的,是 ext3,是浪费空间的。
    ext4,也需要整理碎块,也有整理碎块程序了。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3363 人在线   最高记录 3821   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 18ms · UTC 01:23 · PVG 09:23 · LAX 17:23 · JFK 20:23
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1