Inode
? ? ? ? ?首先需要明白的是,在Unix操作系統中的任何資源都被當作文件來管理。如目錄、光驅、終端設備等等,都被當作是一種文件。從這方面來說,Unix操作系統中的所有的目錄、硬件設備跟普通文件一樣,具有共同的屬性。而這些屬性的話,就是保存在inode塊中。
? ? ? ? Inode塊中保存了一個文件系統中的全部Inode節點。也就是說,當系統創建了一個文件(或者添加了一個新設備)時,系統就會從這個塊中給 這個文件分配一個Inode結點。在這個結點中存儲了這個文件的大部分屬性,如創建、修改時間等等。但是需要注意的是,有兩個屬性不包含在這個inode 結點中,分別為文件名與結點號。這主要是因為inode節點按順序排列,所以系統內核就可以采用簡單的算法,就可以得出inode節點號。
索引節點
- inode(index node)表中包含文件系統所有文件列表
- 一個節點 (索引節點)是在一個表項,包含有關文件的信息(元數據 ),包括:
? ? ? ? ? ? ? ? ? ? ? ? ? ?文件類型,權限,UID,GID
鏈接數(指向這個文件名路徑名稱個數)
該文件的大小和不同的時間戳
指向磁盤上文件的數據塊指針
有關文件的其他數據
文件分為兩部分:
- 元數據:大小、權限、所有者atime、ctime、mtime……
- 數據本身:文件的內容
- 存放的位置不是集中存放的,文件的索引信息和數據本身是分開存放的。索引信息(元數據)和數據本身是分開存放的
inode表結構
節點表
有很多元數據的信息:Mode、Owner info、Size……
直接指針:直接指向數據的位置。(指向的位置就是數據塊)
一個數據塊的大小:4K = 4096字節
? ? ? ? ?有12個直接指針,能表示的空間總大小為:12個 * 每個4K = 48K
如果一個指針放不下數據的內容,就是用兩個指針指向數據的位置,用來標識文件的位置
只要數據低于12*4K以內,都可以用直接指針找到(低于48K,用直接指針就可以找到);如果超過48k,就使用間接指針
間接指針:【一級指針】
間接指針直接指向的不是數據塊,是一個指針塊,不是存數據的地方,是一個指針塊,通過指針塊,指向數據塊;指針塊也是4k大小,里面記錄了數據塊的路徑,每個數據塊占用的指針塊的空間是4個字節(也就是說數據塊在什么位置要消耗4個字節倆描述)
指針塊:4k 4096個字節,可以指向1024個數據塊
? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?表示的空間總大小為:
間接指針1 ?* ?指針塊4K大小指向的1024個數據塊?(每個數據塊的位置用4個字? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? 節表示) * ?每個數據塊的大小4K = 4M
二級指針:【間接指針的間接指針】
?二級指針 —-> ?指向間接指針(2),間接指針在指向另外一個指針表(3),通過另外一個指針表(3)指向數據的位置。
每個指針塊同樣是4k大小,指向的三級指針塊同樣占用4個字節表示
總大小為:
三級指針1個*二級指針快1個表示1024個三級指針 * 3級指針1024個,指向 1024個數據塊? ? ? ? ?? ? ? ? ?? ? ? ? ?? ? ? 1*1024*1024*4K=4G
指針大小計算
1.前12個直接指針,直接指向內存存儲的數據區域1.前12個直接指針,直接指向內存存儲的數據區域 如Books大小為4096,則前12個直解指針可以保存48KB的文件。
2.一級指針可存儲文件大小計算 保存每個指針,估計占4個字節,則以及指針指向的Block可保存4096/4個指針可以指向1024個 Block塊,一級指針可存儲文件數量大小為1024個指針指向的數據塊*每個數據塊4096K=4M
3.二級指針可存儲文件大小計算 同樣按照數據塊(Black)大小為4096,則二級指針可保存的數據塊指針數量為(4096/4)*(4096/4)= 1024 * 1024,則二級指針可保存的文件數量的大小為(1024*1024)*4096K=4GB
4.三級指針可存儲文文件大小計算 以一級、二級指針計算方法類推,三級指針可存儲的文件數據大小為(1024*1024*1024)*4096K=4TB
EXT4表示的數據可以超過4T的空間,每個指針的路徑占4個字節,一個字節是8位,4個字節32位,2的32次方個字節就是4T
EXT4在存放數據的時候,指針的數據塊占用的是48位(6個字節),48位就是2的48次方個字節,也就是:281474976710656字節=256T
1K=1024字節
1M=1024K
1G=1024M
1T=1024G
查看節點號:
[root@localhost ~]# ll -i
total 8
100663362?-rw——-. 1 root root 1908 Nov ?7 16:15 anaconda-ks.cfg
100663373?-rw-r–r–. 1 root root 1939 Nov ?7 16:23 initial-setup-ks.cfg
[root@localhost ~]# df -i
Filesystem ??????Inodes ?IUsed ???IFree IUse% Mounted on
/dev/sda2 ?????26214400 120596 26093804 ???1% /
devtmpfs ????????250313 ???398 ??249915 ???1% /dev
tmpfs ???????????253989 ?????1 ??253988 ???1% /dev/shm
tmpfs ???????????253989 ???592 ??253397 ???1% /run
tmpfs ???????????253989 ????16 ??253973 ???1% /sys/fs/cgroup
/dev/sda3 ?????10485760 ?????6 10485754 ???1% /app
/dev/sda1 ???????524288 ???329 ??523959 ???1% /boot
tmpfs ???????????253989 ????17 ??253972 ???1% /run/user/1000
/dev/sr0 ?????????????0 ?????0 ???????0 ????– /run/media/ding/CentOS 7 x86_64
tmpfs ???????????253989 ?????1 ??253988 ???1% /run/user/0
節點編號會被重復利用,改文件名不會改變節點編號。在一個分區上節點編號是有范圍的,每個文件消耗一個節點編號。節點編號用完就不能創建文件了
ps:部分內容來自百度百科
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88463