ubifs - superblock

来源:互联网 发布:华为批量配置端口 编辑:程序博客网 时间:2024/06/05 06:12

ubifs superblock

- 1 superblock node.

- store system data

- superblock node be rewritten only if an automatic resize occurs. (image size < volume size -> resizing)

ubi对LEB的操作是原子操作,以保证数据更新成功。


superblock数据定义在下面这个文件中。

fs/ubifs/ubifs-media.h

这个文件描述了ubifs的格式及相关的数据结构和常量的定义。

所有ubifs on-flash objects都是以节点的形式存放的。

所有节点都是以ubifs node magic number开始,并具有相同的的header。

Nodes是8-byte aligned. Node header sizes也是8-byte aligned,(除了indexing node与padding node)。


在看superblock前,记住下面的结构。

/* UBIFS node magic number (must not have the padding byte first or last) */
#define UBIFS_NODE_MAGIC  0x06101831


/**
 * struct ubifs_ch - common header node.

 * 每个ubifs node都是以common part开始的,如果有key,那么key会紧随common header
 */
struct ubifs_ch {
__le32 magic;       // * @magic: UBIFS node magic number (%UBIFS_NODE_MAGIC)
__le32 crc;             // * @crc: CRC-32 checksum of the node header
__le64 sqnum;     // * @sqnum: sequence number
__le32 len;             //* @len: full node length
__u8 node_type;   // * @node_type: node type
__u8 group_type;  // * @group_type: node group type
__u8 padding[2];   // * @padding: reserved for future, zeroes
} __packed;


struct ubifs_sb_node {
struct ubifs_ch ch;                     // * @ch: common header
__u8 padding[2];                       // * @padding: reserved for future, zeroes
__u8 key_hash;                         // * @key_hash: type of hash function used in keys
__u8 key_fmt;                             // * @key_fmt: format of the key
__le32 flags;                              // * @flags: file-system flags:  UBIFS_FLG_BIGLPT or UBIFS_FLG_SPACE_FIXUP???
__le32 min_io_size;                 // 最小读写单元
__le32 leb_size;                        // LEB大小,单位字节

__le32 leb_cnt;                          //系统使用的的leb 数量
__le32 max_leb_cnt;                //系统使用的最大leb数量
__le64 max_bud_bytes;          // * @max_bud_bytes: maximum amount of data stored in buds ???
__le32 log_lebs;                       // log area占用的leb数量
__le32 lpt_lebs;                        // lpt area 占用的leb数量
__le32 orph_lebs;                    //orphon area占用的leb数量

__le32 jhead_cnt;                     //journal header 数量
__le32 fanout;                           // * @fanout: tree fanout (max. number of links per indexing node) ???
__le32 lsave_cnt;                     // LPT save table中LEB Numbers的数目,LEB saved table用来在mount时加快查找LPT中空闲eraseblocks的速度.
__le32 fmt_version;                 // * @fmt_version: UBIFS on-flash format version
__le16 default_compr;            //默认压缩算法
__u8 padding1[2];                    // * @padding1: reserved for future, zeroes
__le32 rp_uid;                           // * @rp_uid: reserve pool UID
__le32 rp_gid;                           // * @rp_gid: reserve pool GID
__le64 rp_size;                         // * @rp_size: size of the reserved pool in bytes
__le32 time_gran;                    // * @time_gran: time granularity in nanoseconds
__u8 uuid[16];                            // * @uuid: UUID (全局唯一标示符)generated when the file system image was created
__le32 ro_compat_version;   // * @ro_compat_version: UBIFS R/O compatibility version
__u8 padding2[3968];             // * @padding2: reserved for future, zeroes
} __packed;


super block的数据很少改动,除了resize的时候。

0 0
原创粉丝点击