與inode)
linux文件系統(tǒng)超級塊super block文件系統(tǒng)的全局信息文件系統(tǒng)的元數(shù)據(jù)是文件系統(tǒng)第一個塊所包含的重要信息文件系統(tǒng)大小塊大小inode表大小文件系統(tǒng)布局作用管理文件系統(tǒng)識別文件系統(tǒng)的類型、結(jié)構(gòu)、狀態(tài)提供文件系統(tǒng)的操作接口文件系統(tǒng)操作的函數(shù)指針維護狀態(tài)一致掛載狀態(tài)讀寫狀態(tài)structsuper_block{structlist_heads_list;/* 保持此字段在首位用于超級塊鏈表 */dev_ts_dev;/* 設(shè)備號用于查找索引 */unsignedchars_blocksize_bits;/* 塊大小的位數(shù)以2的對數(shù)表示 */unsignedlongs_blocksize;/* 塊大小字節(jié) */loff_ts_maxbytes;/* 文件最大大小 */structfile_system_type*s_type;/* 文件系統(tǒng)類型指針 */conststructsuper_operations*s_op;/* 超級塊操作函數(shù)集 */conststructdquot_operations*dq_op;/* 磁盤配額操作函數(shù)集 */conststructquotactl_ops*s_qcop;/* 配額控制操作函數(shù)集 */conststructexport_operations*s_export_op;/* 導(dǎo)出操作函數(shù)集用于NFS等 */unsignedlongs_flags;/* 超級塊標志位 */unsignedlongs_iflags;/* 內(nèi)部標志位 SB_I_* */unsignedlongs_magic;/* 文件系統(tǒng)魔數(shù)用于標識文件系統(tǒng)類型 */structdentry*s_root;/* 根目錄的dentry目錄項 */structrw_semaphores_umount;/* 卸載讀寫信號量控制卸載操作 */ints_count;/* 超級塊引用計數(shù) */atomic_ts_active;/* 活躍引用計數(shù)原子操作 */#ifdefCONFIG_SECURITYvoid*s_security;/* 安全模塊私有數(shù)據(jù) */#endifconststructxattr_handler**s_xattr;/* 擴展屬性處理函數(shù)數(shù)組 */#ifdefCONFIG_FS_ENCRYPTIONconststructfscrypt_operations*s_cop;/* 文件系統(tǒng)加密操作函數(shù)集 */structfscrypt_keyring*s_master_keys;/* 正在使用的加密主密鑰 */#endif#ifdefCONFIG_FS_VERITYconststructfsverity_operations*s_vop;/* 文系統(tǒng)完整性校驗操作函數(shù)集 */#endif#ifIS_ENABLED(CONFIG_UNICODE)structunicode_map*s_encoding;/* Unicode編碼映射表用于大小寫不敏感 */__u16 s_encoding_flags;/* Unicode編碼標志 */#endifstructhlist_bl_heads_roots;/* 備用根dentry鏈表用于NFS */structlist_heads_mounts;/* 掛載點鏈表僅供VFS使用 */structblock_device*s_bdev;/* 對應(yīng)的塊設(shè)備指針 */structbacking_dev_info*s_bdi;/* 后備設(shè)備信息用于回寫 */structmtd_info*s_mtd;/* MTD設(shè)備信息用于閃存文件系統(tǒng) */structhlist_nodes_instances;/* 文件系統(tǒng)實例鏈表節(jié)點 */unsignedints_quota_types;/* 支持的配額類型位掩碼 */structquota_infos_dquot;/* 磁盤配額相關(guān)選項 */structsb_writerss_writers;/* 超級塊寫入者計數(shù)凍結(jié)控制 *//* * 將 s_fs_info、s_time_gran、s_fsnotify_mask 和 * s_fsnotify_marks 放在一起以提高緩存效率。 * 它們被頻繁訪問但很少修改。 */void*s_fs_info;/* 文件系統(tǒng)私有信息 *//* 創(chuàng)建/修改/訪問時間戳的粒度納秒最粗為一秒 */u32 s_time_gran;/* 創(chuàng)建/修改/訪問時間戳的上下限秒 */time64_ts_time_min;time64_ts_time_max;#ifdefCONFIG_FSNOTIFY__u32 s_fsnotify_mask;/* 文件系統(tǒng)通知掩碼 */structfsnotify_mark_connector__rcu*s_fsnotify_marks;/* 文件系統(tǒng)通知標記 */#endifchars_id[32];/* 文件系統(tǒng)標識名稱如sda1 */uuid_ts_uuid;/* 文件系統(tǒng)的UUID */unsignedints_max_links;/* 最大硬鏈接數(shù) */fmode_ts_mode;/* 文件系統(tǒng)掛載模式 *//* * 以下字段僅供VFS使用文件系統(tǒng)實現(xiàn)不應(yīng)直接訪問。 */structmutexs_vfs_rename_mutex;/* VFS重命名互斥鎖防止跨目錄重命名沖突 *//* * 文件系統(tǒng)子類型。如果非空則 /proc/mounts 中的 * 文件系統(tǒng)類型字段將顯示為 type.subtype */constchar*s_subtype;/* 文件系統(tǒng)子類型名稱 */conststructdentry_operations*s_d_op;/* 默認的dentry操作函數(shù)集 */structshrinkers_shrink;/* 每個超級塊的shrinker句柄用于內(nèi)存回收 *//* 鏈接數(shù)為0但仍被引用的inode數(shù)量 */atomic_long_ts_remove_count;/* * 正在被監(jiān)視的inode/mount/sb對象數(shù)量 * 注意inode對象目前被重復(fù)計數(shù)。 */atomic_long_ts_fsnotify_connectors;/* 正在被重新掛載為只讀 */ints_readonly_remount;/* 每個超級塊的errseq_t用于通過syncfs報告回寫錯誤 */errseq_ts_wb_err;/* 從中斷上下文延遲的AIO完成工作隊列 */structworkqueue_struct*s_dio_done_wq;structhlist_heads_pins;/* 引腳鏈表用于fs核心 *//* * 所屬的用戶命名空間以及解釋文件系統(tǒng) * uid、gid、配額、設(shè)備節(jié)點、擴展屬性和安全標簽的默認上下文。 */structuser_namespace*s_user_ns;/* * list_lru結(jié)構(gòu)本質(zhì)上只是一個指向每節(jié)點LRU鏈表的指針 * 每個鏈表有自己的自旋鎖無需放入單獨的緩存行。 */structlist_lrus_dentry_lru;/* dentry的LRU鏈表 */structlist_lrus_inode_lru;/* inode的LRU鏈表 */structrcu_headrcu;/* RCU回調(diào)頭用于延遲釋放 */structwork_structdestroy_work;/* 銷毀工作項 */structmutexs_sync_lock;/* 同步序列化鎖 *//* * 表示此超級塊在文件系統(tǒng)堆棧中的深度 */ints_stack_depth;/* s_inode_list_lock 保護 s_inodes */spinlock_ts_inode_list_lock ____cacheline_aligned_in_smp;/* inode列表自旋鎖 */structlist_heads_inodes;/* 所有inode的鏈表 */spinlock_ts_inode_wblist_lock;/* inode回寫列表自旋鎖 */structlist_heads_inodes_wb;/* 需要回寫的inode鏈表 */}__randomize_layout;inode表inode table存儲文件/目錄的inode信息數(shù)據(jù)塊data blocks文件系統(tǒng)存取文件的最小單元由多個連續(xù)的扇區(qū)組成存儲文件/目錄的實際數(shù)據(jù)塊位圖多個比特位組成的數(shù)據(jù)結(jié)構(gòu)1表示占據(jù)0表示空閑inode文件的元數(shù)據(jù)數(shù)據(jù)結(jié)構(gòu)以數(shù)組的形式存儲作用跟蹤文件系統(tǒng)中所有的文件與目錄每個文件和目錄在文件系統(tǒng)都有唯一的inode對應(yīng)文件的原文件信息硬鏈接指向文件的數(shù)據(jù)塊指針鏈接數(shù)屬性記錄有多少個文件名指向同一個inode多個硬鏈接共享inode號和數(shù)據(jù)塊刪除一個不會影響只能指向相同的文件系統(tǒng)軟鏈接獨立文件指向另一個文件/目錄的路徑快捷方式可以指向不同的文件系統(tǒng)structinode{umode_ti_mode;/* 文件類型和訪問權(quán)限如0755 */unsignedshorti_opflags;/* inode操作標志 */kuid_ti_uid;/* 文件所有者的用戶ID */kgid_ti_gid;/* 文件所有者的組ID */unsignedinti_flags;/* inode標志位如同步、不可變等 */#ifdefCONFIG_FS_POSIX_ACLstructposix_acl*i_acl;/* 訪問控制列表ACL */structposix_acl*i_default_acl;/* 默認ACL用于目錄繼承 */#endifconststructinode_operations*i_op;/* inode操作函數(shù)集 */structsuper_block*i_sb;/* 所屬的超級塊指針 */structaddress_space*i_mapping;/* 地址空間映射用于頁面緩存 */#ifdefCONFIG_SECURITYvoid*i_security;/* 安全模塊私有數(shù)據(jù) */#endif/* 狀態(tài)數(shù)據(jù)路徑遍歷時不訪問 */unsignedlongi_ino;/* inode編號文件系統(tǒng)中唯一標識 *//* * 文件系統(tǒng)只能直接讀取 i_nlink修改時必須使用以下函數(shù) * * (set|clear|inc|drop)_nlink * inode_(inc|dec)_link_count */union{constunsignedinti_nlink;/* 硬鏈接計數(shù)只讀視圖 */unsignedint__i_nlink;/* 硬鏈接計數(shù)可寫視圖 */};dev_ti_rdev;/* 設(shè)備號僅對設(shè)備文件有效 */loff_ti_size;/* 文件大小字節(jié) */structtimespec64i_atime;/* 最后訪問時間 */structtimespec64i_mtime;/* 最后修改時間 */structtimespec64i_ctime;/* 最后狀態(tài)改變時間 */spinlock_ti_lock;/* 保護 i_blocks、i_bytes可能還有 i_size 的自旋鎖 */unsignedshorti_bytes;/* 文件末尾不足一個塊的字節(jié)數(shù) */u8 i_blkbits;/* 塊大小的位數(shù)以2的對數(shù)表示 */u8 i_write_hint;/* 寫入提示用于優(yōu)化寫入路徑 */blkcnt_ti_blocks;/* 文件占用的塊數(shù) */#ifdef__NEED_I_SIZE_ORDEREDseqcount_ti_size_seqcount;/* i_size的順序計數(shù)器保證讀取順序 */#endif/* 雜項 */unsignedlongi_state;/* inode狀態(tài)標志位 */structrw_semaphorei_rwsem;/* inode讀寫信號量 */unsignedlongdirtied_when;/* 首次被標記為臟的時間jiffies */unsignedlongdirtied_time_when;/* 臟時間戳被修改的時間jiffies */structhlist_nodei_hash;/* inode哈希表節(jié)點 */structlist_headi_io_list;/* 后備設(shè)備IO鏈表 */#ifdefCONFIG_CGROUP_WRITEBACKstructbdi_writeback*i_wb;/* 關(guān)聯(lián)的cgroup回寫設(shè)備 *//* 外部inode檢測參見 wbc_detach_inode() */inti_wb_frn_winner;/* 當前獲勝的外部回寫設(shè)備ID */u16 i_wb_frn_avg_time;/* 外部回寫平均時間 */u16 i_wb_frn_history;/* 外部回寫歷史記錄 */#endifstructlist_headi_lru;/* inode LRU鏈表用于內(nèi)存回收 */structlist_headi_sb_list;/* 所屬超級塊的inode鏈表 */structlist_headi_wb_list;/* 后備設(shè)備回寫鏈表 */union{structhlist_headi_dentry;/* 關(guān)聯(lián)的dentry鏈表頭 */structrcu_headi_rcu;/* RCU回調(diào)頭用于延遲釋放 */};atomic64_ti_version;/* inode版本號用于檢測變更 */atomic64_ti_sequence;/* 序列號用于futex */atomic_ti_count;/* inode引用計數(shù) */atomic_ti_dio_count;/* 直接IO引用計數(shù) */atomic_ti_writecount;/* 寫者計數(shù)用于寫者互斥 */#ifdefined(CONFIG_IMA)||defined(CONFIG_FILE_LOCKING)atomic_ti_readcount;/* 以只讀方式打開的struct files計數(shù) */#endifunion{conststructfile_operations*i_fop;/* 文件操作函數(shù)集默認文件操作 */void(*free_inode)(structinode*);/* 自定義inode釋放函數(shù) */};structfile_lock_context*i_flctx;/* 文件鎖上下文 */structaddress_spacei_data;/* inode的地址空間頁面緩存 */structlist_headi_devices;/* 設(shè)備鏈表用于塊設(shè)備/字符設(shè)備 */union{structpipe_inode_info*i_pipe;/* 管道信息僅對管道文件有效 */structcdev*i_cdev;/* 字符設(shè)備信息僅對字符設(shè)備有效 */char*i_link;/* 符號鏈接目標路徑 */unsignedi_dir_seq;/* 目錄序列號用于目錄并發(fā)控制 */};__u32 i_generation;/* inode世代號用于NFS文件句柄 */#ifdefCONFIG_FSNOTIFY__u32 i_fsnotify_mask;/* 此inode關(guān)注的所有事件掩碼 */structfsnotify_mark_connector__rcu*i_fsnotify_marks;/* 文件系統(tǒng)通知標記 */#endif#ifdefCONFIG_FS_ENCRYPTIONstructfscrypt_info*i_crypt_info;/* 加密信息 */#endif#ifdefCONFIG_FS_VERITYstructfsverity_info*i_verity_info;/* 文件完整性校驗信息 */#endifvoid*i_private;/* 文件系統(tǒng)或設(shè)備的私有指針 */}__randomize_layout;