Welcome 微信登录

首页 / 操作系统 / Linux / Linux下omfs文件系统的硬盘布局

文件系统是linux内核的重要组成部分,涉及到vfs、块IO层的调度机制,块设备驱动以及具体文件系统所采用的数据结构。所使用linux内核版本是2.6.34.1。以fs/omfs为例,主要学习vfs的实现,omfs的硬盘布局,它所采用的数据结构为何能够优化MPEG文件系统。Omfs文件系统的具体文件读写又是如何实现的。OMFS:Optimized MPEG FilesystemOMFS是由SonicBlue公司创建的用于ReplayTV DVR和MP3 player的文件系统。该文件系统是基于extent的(现代很多文件系统都采用extent替代block来管理磁盘。Extent就是一些连续的block,可以有效减少元数据开销。),可用的block大小在2k到8k之间,目录结构是基于hash的。该文件系统在特定的流媒体设备中性能很好,但对于一般的应用,linux主流的文件系统应该性能更优。Omfs是如何针对MPEG做性能优化,这点还在探索中。相关阅读:Linux文件系统omfs的目录创建和删除 http://www.linuxidc.com/Linux/2012-02/54025.htm Linux文件系统omfs的目录创建和删除 http://www.linuxidc.com/Linux/2012-02/54025.htmLinux文件系统omfs的普通文件创建和删除 http://www.linuxidc.com/Linux/2012-02/54026.htm硬盘布局格式:Omfs区分sysblocks和一般的数据blocks。Sysblock group由superblock信息、文件的metadata元数据、目录结构和extents构成。每一个sysblock都有一个包含CRC校验的头,而且可以在硬盘上备份。Sysblock大小比一个数据block小,但是它们都用64位的块号寻址。Sysblock 头信息:struct omfs_header { __be64 h_self;                  /* FS block where this is located */ __be32 h_body_size;             /* size of useful data after header */ __be16 h_crc;                   /* crc-ccitt of body_size bytes */        char h_fill1[2];        u8 h_version;                   /* version, always 1 */        char h_type;                    /* OMFS_INODE_X */        u8 h_magic;                     /* OMFS_IMAGIC */        u8 h_check_xor;                 /* XOR of header bytes before this */ __be32 h_fill2; }; 文件和目录都由omfs_inode表示:struct omfs_inode { struct omfs_header i_head;      /* header */        __be64 i_parent;                /* parent containing this inode */ __be64 i_sibling;               /* next inode in hash bucket */        __be64 i_ctime;                 /* ctime, in milliseconds */ char i_fill1[35];        char i_type;                    /* OMFS_[DIR,FILE] */        __be32 i_fill2;        char i_fill3[64];        char i_name[OMFS_NAMELEN];      /* filename */        __be64 i_size;                  /* size of file, in bytes */ }; OMFS中的目录是一个大的hash表。文件名经过hash计算,然后放到以OMFS_DIR_START开始的桶中。查找的时候需要hash文件名,然后通过i_sibling指针查找到匹配的i_name。 文件以omfs_inode结构体开头,后面跟着在OMFS_EXTENT_START开始的extent table。 struct omfs_extent_entry { __be64 e_cluster;               /* start location of a set of blocks */ __be64 e_blocks;                /* number of blocks after e_cluster */ };struct omfs_extent { __be64 e_next;                  /* next extent table location */__be32 e_extent_count;          /* total # extents in this table */ __be32 e_fill;struct omfs_extent_entry e_entry;       /* start of extent entries */ };
  • 1
  • 2
  • 3
  • 下一页
Linux 文件系统模块的注册Linux如何挂载光驱和usb设备相关资讯      Linux基础知识 
  • Linux基础知识之文件权限详解  (08月09日)
  • Linux基础知识之ls与文件名通配详  (08月01日)
  • Linux基础知识之history的详细说明  (07月31日)
  • Linux基础知识之文件管理命令(cp、  (08月09日)
  • Linux基础知识之man手册的使用  (07月31日)
  • Linux基础知识之文件的时间戳及  (07月31日)
本文评论 查看全部评论 (0)
表情: 姓名: 字数