linux ext2文件系统

Ext4文件系统也是由相关数据结构组成,按照数据结构存放位置可以分为Ext4磁盘数据结构和Ext4内存数据结构.

Ext 磁盘数据结构

  • 标准块
    在这里插入图片描述

弹性块

从ext4开始,有一个新功能称为弹性块组(flex_bg)。在flex_bg中,几个块组绑在一起,成为一个逻辑块组。flex_bg的第一个块组中的位图空间和inode表空间被扩展为包括flex_bg中所有其他块组的位图和inode表。例如,如果flex_bg大小为4,则组0将包含(按顺序)超级块,组描述符,组0-3的数据块位图,组0-3的inode位图,组0-3的inode表,组0中的剩余空间用于文件数据。这样的效果是将块元数据紧密地分组在一起,以加快加载速度,并使大文件在磁盘上连续。超级块和组描述符的备份副本始终位于块组的开头,即使启用了flex_bg。组成flex_bg的块组的数量由 2 s b . s _ l o g _ g r o u p s _ p e r _ f l e x 2 ^{sb.s\_{} log\_{}groups\_{}per\_{}flex} 2sb.s_log_groups_per_flex

block 相关计算

  • block size 在 磁盘格式化的时候就固定下来,使用mke2fs工具进行格式化时,可以指定 block size 等参数
    • block-size: 只能为 1K/2K/4K bytes.一般不用指定,会采用/etc/mke2fs.conf 中的配置
磁盘容量mke2fs.conf中的配置block-size(K)inode-size(byte)inode-ratio(byte)file system type
V < 3Mfloppy11288192ext2
3M < V < 512small11284096ext2
4T< V < 16Tbig425632768ext4
V > 16Thug425665536ext4
otherdefault425616384ext4

在这里插入图片描述

  • inode-ratio: bytes-per-inode,即 多少个字节的数据可以分配到一个inode,根据该信息和磁盘容量就可以计算出inode count
  • 默认块大小为4KiB,每个组将包含32,768个块,长度为128MiB
  • 如果用32bit来存储block count,则默认情况下,文件系统可以存 2 32 ∗ 4 K = 16 T 2^{32}*4K=16T 2324K=16T数据
  • 如果用64bit来存储block count,则默认清空下,文件系统可以存 2 64 ∗ 4 K = 2 36 T 2^{64}*4K=2^{36}T 2644K=236T数据
  • 假设磁盘容量222G,采用default config,可以计算:
    已 知 : V = 222 G , b l o c k s i z e = 4 K , i n o d e s i z e = 256 b y t e , i n o d e r a t i o = 16384 b y t e = 16 K 已知:V = 222G,block size = 4K,inodesize = 256byte,inoderatio=16384byte=16K\\ V=222Gblocksize=4K,inodesize=256byte,inoderatio=16384byte=16K
    可 得 : 可得:
    b l o c k   s i z e = V / b l o c k s i z e = 58195968 个 b l o c k s   p e r   g r o u p = b l o c k s i z e ∗ 8 = 32768 个 g r o u p   c o u n t = b l o c k   s i z e / b l o c k   p e r   g r o u p = 1776 个 I n o d e s   p e r   g r o u p = b l o c k s   p e r   g r o u p / 4 = 8192 个 i n o d e   c o u n t = I n o d e s   p e r   g r o u p ∗ g r o u p   c o u n t = 14548992 , 当 然 实 际 的 会 比 该 数 稍 等 大 i n o d e   b l o c k s   p e r   g r o u p = I n o d e s   p e r   g r o u p ∗ 256 b y t e = I n o d e s   p e r   g r o u p ∗ 4 K / 16 = 512 个 b l o c k block \,size = V / blocksize = 58195968 个 \\ blocks \, per\, group = blocksize * 8 = 32768 个\\ group\, count = block\,size / block\,per\,group = 1776 个\\ Inodes\, per\, group = blocks \, per\, group / 4 = 8192 个 \\ inode\, count = Inodes\, per\, group * group\, count =14548992,当然实际的会比该数稍等大\\ inode\, blocks\, per\, group = Inodes\, per\, group * 256byte = Inodes\, per\, group * 4K / 16 = 512 个 block blocksize=V/blocksize=58195968blockspergroup=blocksize8=32768groupcount=blocksize/blockpergroup=1776Inodespergroup=blockspergroup/4=8192inodecount=Inodespergroupgroupcount=14548992,inodeblockspergroup=Inodespergroup256byte=Inodespergroup4K/16=512block
  • group 可能的排列
indexsuper blockgroup descriptorreserved GDTBlock bitmapInode bitmapInode table
group 001-1415-1024102510411057-1568
group 13276832769-3278232783-33792102610421569-2080
group2102710432081-2592
group39830498305-9831898319-99328102810442593-3104
group4102910453105-3616

struct

  • super block
  • group descriptor
  • inode
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值