生活随笔
收集整理的這篇文章主要介紹了
[文件系统]文件系统学习笔记(一)---基本概念以及inode
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1,文件系統基本概念
文件系統是一種用來存儲和組織計算機文件、目錄及其包含的數據的方法,它使文件、目錄以及數據的查找和訪問得到簡化。
2,硬鏈接和軟鏈接的區別
硬鏈接和軟鏈接的區別
–????????符號鏈接
–????????ln –s file1 file2
????????目錄項,內容為指向文件名的指針,并不存在其他數據。目標文件刪除時,符號鏈接仍然繼續保持。使用了一個獨立的inode。Inode的數據段包含了一個字符串,給出了鏈接目錄的路徑。(相當于windows中的快捷鍵)
–????????硬鏈接
–????????ln file1 file2
????????與原文件共用一個inode,增加引用計數。新建或者刪除硬鏈接,則相應的增加或減小該引用計數。為0時,刪除源文件;
????????dentry還是不一樣,inode是一樣
?
3,struct inode結構體
這里虛擬文件系統里的inode節點是指內存里的inode節點,包含了一些實際硬盤上的inode節點所沒有的信息。
?
[cpp]?view plaincopy
<pre?name="code"?class="cpp"><fs.h>??struct?inode?{??????struct?hlist_node?i_hash;??????struct?list_head?i_list;??????struct?list_head?i_sb_list;??????struct?list_head?i_dentry;??????unsigned?long?i_ino;????????atomic_t?i_count;<span?style="white-space:pre">???</span>????unsigned?int?i_nlink;<span?style="white-space:pre">???</span>????uid_t?i_uid;<span?style="white-space:pre">????????</span>????gid_t?i_gid;<span?style="white-space:pre">????????</span>????dev_t?i_rdev;<span?style="white-space:pre">???????</span>????unsigned?long?i_version;??????loff_t?i_size;???<span?style="white-space:pre">???????</span>????struct?timespec?i_atime;?????????struct?timespec?i_mtime;<span?style="white-space:pre">????</span>????struct?timespec?i_ctime;?????????????unsigned?int?i_blkbits;??????blkcnt_t?i_blocks;<span?style="white-space:pre">??????</span>????umode_t?i_mode;<span?style="white-space:pre">?????????</span>????struct?inode_operations?*i_op;<span?style="white-space:pre">??</span>????const?struct?file_operations?*i_fop;?????struct?super_block?*i_sb;??????struct?address_space?*i_mapping;??????struct?address_space?i_data;??????struct?dquot?*i_dquot[MAXQUOTAS];??????struct?list_head?i_devices;??????union?{??????struct?pipe_inode_info?*i_pipe;??????struct?block_device?*i_bdev;<span?style="white-space:pre">????</span>????struct?cdev?*i_cdev;<span?style="white-space:pre">????????</span>????};??????int?i_cindex;??????__u32?i_generation;??????unsigned?long?i_state;??????unsigned?long?dirtied_when;?????unsigned?int?i_flags;??????atomic_t?i_writecount;??????void?*i_security;??};??
i_mapping成員指向該文件所在的內存空間,要訪問該文件的實際內容則通過該成員訪問,address_space用于管理文件映射到內存的頁面。
inode結構中的i_mapping成員的目的是緩存文件的內容,對文件的讀寫操作首先在i_mapping包含的緩存里尋找文件的內容,如果有緩存,對文件讀寫操作可以直接從緩存中獲取,而不用再去物理硬盤讀取,寫操作也是首先寫到緩存,然后在合適時機由緩存寫到磁盤。
每個inode有一個i_list成員,用于將inode存儲在一個鏈表中,根據inode狀態,它有三種主要情況
(1)inode在內存中,未關聯到任何文件,處于非活動狀態
(2)inode在內存中,正在由一個或者多個進程使用,通常表示一個文件,此時i_count和i_nlink都大于0。
文件內容和底層元數據都于底層磁盤上的信息相同,
(3)inode處于活動使用狀態,其數據內容已經改變,與存儲介質上的內容不一樣,這種狀態的inode節點為臟的。
superblock是用于管理該文件系統中所有的inode相關信息的,比如增加inode,每個inode的起始地址等等。
如果一個分區大小為1GB,每個block為4KB,一個inode為128B,并假設平均每個文件占用2個block。那么inode的數量為1GB/(8KB+128B)=129055.5,即129055。那么inode table的大小為129055*128B=15.75MB。所以按照這樣的規劃,如果一個1GB的磁盤,那么格式化后,就已經有15.75MB被使用了。
3,查看文件inode信息的命令
stat命令
轉載于:https://www.cnblogs.com/zhiliao112/p/4067833.html
總結
以上是生活随笔為你收集整理的[文件系统]文件系统学习笔记(一)---基本概念以及inode的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。