If you don\\\\\\\\\\\\\\\'t wanna do it, you find an EXCUSE; if you do, you\\\\\\\\\\\\\\\'ll find a WAY :-)
全部博文(235)
分类: LINUX
2011-02-16 10:29:10
Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-524, default 1): |
# df / (/dev/dsk/c0t3d0s0 ): 573548 blocks 226057 files /proc (/proc ): 0 blocks 3854 files /var (/dev/dsk/c0t3d0s1 ): 1897206 blocks 250028 files /var/run (swap ): 611424 blocks 26300 files /tmp (swap ): 611424 blocks 26300 files |
# df -g / (/dev/dsk/c0t3d0s0 ): 8192 block size 1024 frag size 2031084 total blocks 573548 free blocks 451684 available 253760 total files 226057 free files 35651584 filesys id ufs fstype 0x00000004 flag 255 filename length /proc (/proc ): 512 block size 512 frag size 0 total blocks 0 free blocks 0 available 3900 total files 3854 free files 66584576 filesys id /proc proc fstype 00000000 flag 64 filename length /etc/mnttab (mnttab ): 512 block size 512 frag size 0 total blocks 0 free blocks 0 available 1 total files 0 free files 68419584 filesys id /mnttab mntfs fstype 00000000 flag 64 filename length |
struct ext3_super_block { __u32 s_inodes_count; __u32 s_blocks_count; __u32 s_r_blocks_count; __u32 s_free_blocks_count; __u32 s_free_inodes_count; __u32 s_first_data_block; __u32 s_log_block_size; __s32 s_log_frag_size; __u32 s_blocks_per_group; block size和block group size都是固定的,都可定义 __u32 s_frags_per_group; __u32 s_inodes_per_group; __u32 s_mtime; __u32 s_wtime; __u16 s_mnt_count; __s16 s_max_mnt_count; __u16 s_magic; magic 签名,对于 ext2 和 ext3 文件系统来说,这个字段 的值应该正好都等于 0xEF53 显然,ext2 和 ext3 的兼容性一定是很强的 __u16 s_state; __u16 s_errors; __u16 s_minor_rev_level; __u32 s_lastcheck; __u32 s_checkinterval; __u32 s_creator_os; __u32 s_rev_level; __u16 s_def_resuid; __u16 s_def_resgid; __u32 s_first_ino; __u16 s_inode_size; __u16 s_block_group_nr; __u32 s_feature_compat; __u32 s_feature_incompat; __u32 s_feature_ro_compat; __u8 s_uuid[16]; char s_volume_name[16]; char s_last_mounted[64]; __u32 s_algorithm_usage_bitmap; __u8 s_prealloc_blocks; __u8 s_prealloc_dir_blocks; __u16 s_padding1; __u8 s_journal_uuid[16]; __u32 s_journal_inum; __u32 s_journal_dev; __u32 s_last_orphan; __u32 s_reserved[197]; }; |
struct ext3_group_desc { __u32 bg_block_bitmap; __u32 bg_inode_bitmap; __u32 bg_inode_table; __u16 bg_free_blocks_count; __u16 bg_free_inodes_count; __u16 bg_used_dirs_count; __u16 bg_pad; __u32 bg_reserved[3]; }; |
block bitmap指针 指向该block group 的block bitmap ( block bitmap介绍: block bitmap 中的每个 bit 表示一个 block,如果该 bit 为 0,表示该 block 中有数据,如果 bit 为 1,则表示该 block 是空闲的。 这个 block bitmap 本身也正好只有一个 block 那么大小 ) |
inode bitmap指针 指向该block group 的 inode bitmap ( inode bitmap介绍: inode bitmap里面的每一个 bit 相对应一个 inode 这个 inode bitmap 同样也是正好有一个 block 那么大 ) |
inode table指针 指向该block group 的inode table。 ( inode table介绍: inode table 不止一个 block 那么大了。 inode table 是 block group 中所聚集到的全部 inode 放在一起形成的。 { |
struct ext3_inode { __u16 i_mode; __u16 i_uid; __u32 i_size; __u32 i_atime; __u32 i_ctime; __u32 i_mtime; __u32 i_dtime; __u16 i_gid; __u16 i_links_count; __u32 i_blocks; __u32 i_flags; __u32 l_i_reserved1; __u32 i_block[EXT3_N_BLOCKS]; inode 里面可以存放 EXT3_N_BLOCKS(= 15)这么多个 block 指针。用户数据就从这些 block 里面获得。 15 个 blocks 不一定放得下全部的用户数据 前 12 个是所谓的 direct blocks,里面直接存放的就是用户数据。 第 13 个 block 是 indirect block,里面存放的全是 block 指针,这些 block 指针指向的 block 存放用户后面的数据 第 14 个 block 是 double indirect block,里面存放的全是 block 指针,这些 block 指针指向的 block被用来存放用户数据 第 15 个 block 是 triple indirect block,比上面说的 double indirect block 有多了一层 block 指针。 __u32 i_generation; __u32 i_file_acl; __u32 i_dir_acl; __u32 i_faddr; __u8 l_i_frag; __u8 l_i_fsize; __u16 i_pad1; __u16 l_i_uid_high; __u16 l_i_gid_high; __u32 l_i_reserved2; }; |
struct ext3_dir_entry_2 { __u32 inode; __u16 rec_len; __u8 name_len; __u8 file_type; char name[EXT3_NAME_LEN]; }; |