Ext2 ÎļþϵͳµÄÓ²Å̲¼¾Ö
3.3 Inode
Ç°Ãæ¶¼×¼±¸ºÃÁËÒÔºó£¬ÎÒÃÇÏÖÔÚÖÕÓÚ¿ÉÒÔ¿ªÊ¼¶ÁÈ¡ÎļþÁË¡£Ê×ÏÈÒª¶ÁµÄ£¬µ±È»ÊÇÎļþϵͳµÄ¸ùĿ¼¡£×¢Ò⣬ÕâÀïËùνµÄ¸ùĿ¼£¬ÊÇÏà¶ÔÓÚÕâÒ»¸öÎļþϵͳ»òÕß˵ӲÅÌ·ÖÇø¶øÑԵģ¬Ëü²¢²»Ò»¶¨ÊÇÕû¸ö Linux ²Ù×÷ϵͳÉϵĸùĿ¼¡£ÕâÀïµÄÕâ¸ö root Ŀ¼´æ·ÅÔÚÒ»¸ö¹Ì¶¨µÄ inode ÖУ¬Õâ¾ÍÊÇÎļþϵͳÉ쵀 inode 2¡£ÐèÒªÌáµ½ inode ¼ÆÊýͬ block ¼ÆÊýÒ»Ñù£¬Ò²ÊÇÈ«¾ÖÐÔÖʵġ£ÕâÀïÐèÒªÌØ±ð×¢ÒâµÄÊÇ£¬inode ¼ÆÊýÊÇ´Ó 1 ¿ªÊ¼µÄ£¬¶øÇ°ÃæÎÒÃÇÌáµ½¹ý block ¼ÆÊýÊÇ´Ó 0 ¿ªÊ¼£¬Õâ¸ö²»Í¬ÔÚ¿ª·¢³ÌÐòµÄʱºòÒªÌØ±ðÁôÐÄ¡££¨ÕâÒ»Ææ¹ÖµÄ inode ¼ÆÊý·½·¨£¬Ôø¾Èñ¾ÎÄ×÷Õß´óÉËÄԽ£©
ÄÇô£¬ÎÒÃÇÏÈÀ´¿´Ò»Ïµõ½Ò»¸ö inode ºÅÊýÒÔºó£¬ÔõÑù¶ÁÈ¡Õâ¸ö inode ÖеÄÓû§Êý¾Ý¡£ÔÚ super block ÖÐÓÐÒ»¸ö×Ö¶Î s_inodes_per_group ¼ÇÔØÁËÿ¸ö block group ÖÐÓжàÉÙ¸ö inode¡£ÓÃÎÒÃǵõ½µÄ inode ºÅÊý³ýÒÔ s_inodes_per_group£¬ÎÒÃǾÍÖªµÀÁËÎÒÃÇÒªµÄÕâ¸ö inode ÊÇÔÚÄÄÒ»¸ö block group ÀïÃæ£¬Õâ¸ö³ý·¨µÄÓàÊýÒ²¸æËßÎÒÃÇ£¬ÎÒÃÇÒªµÄÕâ¸ö inode ÊÇÕâ¸ö block group ÀïÃæµÄµÚ¼¸¸ö inode£»È»ºó£¬ÎÒÃÇ¿ÉÒÔÏÈÕÒµ½Õâ¸ö block group µÄ group descriptor£¬´ÓÕâ¸ö descriptor£¬ÎÒÃÇÕÒµ½Õâ¸ö group µÄ inode table£¬ÔÙ´Ó inode table ÕÒµ½ÎÒÃÇÒªµÄµÚ¼¸¸ö inode£¬ÔÙÒÔºó£¬ÎÒÃǾͿÉÒÔ¿ªÊ¼¶ÁÈ¡ inode ÖеÄÓû§Êý¾ÝÁË¡£
Õâ¸ö¹«Ê½ÊÇÕâÑùµÄ£ºblock_group = (ino - 1) / s_inodes_per_group¡£ÕâÀï ino ¾ÍÊÇÎÒÃÇµÄ inode ºÅÊý¡£¶ø offset = (ino - 1) % s_inodes_per_group£¬Õâ¸ö offset ¾ÍÖ¸³öÁËÎÒÃÇÒªµÄ inode ÊÇÕâ¸ö block group ÀïÃæµÄµÚ¼¸¸ö inode¡£
ÕÒµ½Õâ¸ö inode Ö®ºó£¬ÎÒÃÇÀ´¾ßÌåµÄ¿´¿´ inode ÊÇʲôÑùµÄ¡£ struct ext3_inode {
__u16 i_mode; /* File mode */
__u16 i_uid; /* Low 16 bits of Owner Uid */
__u32 i_size; /* Îļþ´óС£¬µ¥Î»ÊÇ byte */
__u32 i_atime; /* Access time */
__u32 i_ctime; /* Creation time */
__u32 i_mtime; /* Modification time */
__u32 i_dtime; /* Deletion Time */
__u16 i_gid; /* Low 16 bits of Group Id */
__u16 i_links_count; /* Links count */
__u32 i_blocks; /* blocks ¼ÆÊý */
__u32 i_flags; /* File flags */
__u32 l_i_reserved1; /* ¿ÉÒÔºöÂÔ */
__u32 i_block[EXT3_N_BLOCKS]; /* Ò»×é 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; /* ¿ÉÒÔºöÂÔ */
};
ÎÒÃÇ¿´µ½ÔÚ inode ÀïÃæ¿ÉÒÔ´æ·Å EXT3_N_BLOCKS£¨= 15£©Õâô¶à¸ö block Ö¸Õë¡£Óû§Êý¾Ý¾Í´ÓÕâЩ block ÀïÃæ»ñµÃ¡£15 ¸ö blocks ²»Ò»¶¨·ÅµÃÏÂÈ«²¿µÄÓû§Êý¾Ý£¬ÔÚÕâÀï ext3 Îļþϵͳ²ÉÈ¡ÁËÒ»ÖÖ·Ö²ãµÄ½á¹¹¡£Õâ×é 15 ¸ö block Ö¸ÕëµÄǰ 12 ¸öÊÇËùνµÄ direct blocks£¬ÀïÃæÖ±½Ó´æ·ÅµÄ¾ÍÊÇÓû§Êý¾Ý¡£µÚ 13 ¸ö block£¬Ò²¾ÍÊÇËùνµÄ indirect block£¬ÀïÃæ´æ·ÅµÄÈ«²¿ÊÇ block Ö¸Õ룬ÕâЩ block Ö¸ÕëÖ¸ÏòµÄ block ²Å±»ÓÃÀ´´æ·ÅÓû§Êý¾Ý¡£µÚ 14 ¸ö block ÊÇËùνµÄ double indirect block£¬ÀïÃæ´æ·ÅµÄÈ«ÊÇ block Ö¸Õ룬ÕâЩ block Ö¸ÕëÖ¸ÏòµÄ block Ò²±»È«²¿ÓÃÀ´´æ·Å block Ö¸Õ룬¶øÕâЩ block Ö¸ÕëÖ¸ÏòµÄ block£¬²Å±»ÓÃÀ´´æ·ÅÓû§Êý¾Ý¡£µÚ 15 ¸ö block ÊÇËùνµÄ triple indirect block£¬±ÈÉÏÃæËµµÄ double indirect block ÓжàÁËÒ»²ã block Ö¸Õë¡£×÷ΪÁ·Ï°£¬¶ÁÕß¿ÉÒÔ¼ÆËãһϣ¬ÕâÑùµÄ·Ö²ã½á¹¹¿ÉÒÔʹһ¸ö inode ÖÐ×î¶à´æ·Å¶àÉÙ×Ö½ÚµÄÓû§Êý¾Ý¡££¨¼ÆËãËùÐèµÄÐÅÏ¢ÊÇ·ñÒѾ×ã¹»£¿»¹È±ÉÙÄÄÒ»¸ö¹Ø¼üÊý¾Ý£¿£© ±¾ÐÂÎŹ² 5Ò³,µ±Ç°ÔÚµÚ 4Ò³ 1 2 3 4 5 |