文件系统存储

参考:0.2秒居然复制了100G文件? (qq.com)

文件系统:存数据的一个容器,对外提供的就是存取服务

例如你到火车站使用寄存服务: 

        存行李的时候,需要登记名字+号码牌,来标识唯一的行李

        取行李的时候,报名字+出示号码牌,才能在特定位置找到行李

类比文件系统:

空间管理

对于一个连续的大磁盘空间

        如果将数据完整的放入:浪费空间、可能放不下

        解决:

        切分,这里放一点那里放一点。称为:小粒度的方式

        存数据:数据切分成Block 粒度后存到文件系统中磁盘的各个角落、把 Block 所在的各个位置保存起来,即inode

        取数据:读inode,找到各个 Block 的位置、读数据

  • 粒度:每个小粒度的物理块命名为 Block,每个 Block 一般是 4K 大小。
  • Block数组中每一项是4个字节

inode/block 概念

        inode有文件元数据+Block数组(长度是15),数组中前两项指向Block 3和Block 11,表示数据在这两个块中存着。 

图片

Block数组存储数据的最大 = 15个元素 * 每个Block大小4KB = 60 K 

问题1:但是一个最大的文件超过60K,怎么办?

解决:把这个Block数组长度给扩大

        比如:让文件系统支持1MB的文件,Block数组长度=(1MB* 1024) / 每个Block大小4KB = 256

        Block需要的数据空间 = (256*4【每一项是4字节)/ 1024 = 1KB

问题2:如果文件本身只有0.1K,存1MB的文件,Block数组本身需要1KB,造成浪费

解决:间接索引

间接索引

图片

直接索引

        能存 12 个 block 编号,每个 block 4K,就是 48K,

一级索引

        里存储的编号指向的 block 编号,  里面的编号指向用户数据。

        一个 block  4K,每个元素 4 字节,也就是有 1024 个编号位置 =  (4K【一个 block  4K】 * 1024)/ 4【每个元素 4 字节】 可以存储。

        一级索引能寻址到1024个bock,一个block是4K的空间,也就是一级索引能寻址4MB= 1024*4K 的空间

二级索引:

        有了 4M 的空间用来存储用户数据的编号。

        二级索引可寻址 1024 * 1024个block

        二级索引能寻址到1024*1024个bock,一个block是4K的空间,也就是一级索引能寻址4GB= 1024*1024*4K 的空间

三级索引:

        有了 4G 的空间来存储用户数据的 block 编号

        三级索引可寻址 1024 * 1024 * 1024个block

        三级索引能寻址到1024*1024*1024个bock,一个block是4K的空间,也就是一级索引能寻址4TB= 1024*1024*1024*4K 的空间

图片

在这种文件系统(如ext2)上,通过这种间接块索引的方式,最大能支撑的文件大小 = 48K + 4M + 4G + 4T ,约等于 4 T。

重点:文件 size 只是 inode 里面的一个属性,实际物理空间占用则是要看用户数据放了多少个 block ,没写数据的地方不用分配物理block块。 

        有些文件其实就是稀疏文件, 它的逻辑大小和实际物理空间是不相等的。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值