7.28_Linux_ext數據結構inode的原理淺析、軟硬鏈接的區別

inode表結構淺析

下圖以ext文件系統為參考,以4k塊大小分區,簡單描述一下ext文件系統的數據結構原理,如果有任何錯誤,煩請各位指出

wKioL1ea9qKwMA88AAQ0CV5awjQ474.png

inode 索引節點

硬盤上的每個磁道被等分為若干個弧段,這些弧段便是磁盤的扇區。硬盤的讀寫以扇區為基本單位。

扇區的大小,是2的N次方倍。分區的大小可以有多樣,1k、2k、4k…以4k塊大小來說明。4k塊大小分為8個扇區,每個扇區對應512字節。每一塊也稱為block,文件以block為單位進行存儲,并且每一個bolck只能屬于一個文件,若文件大小不足4k,也按照4k大小的塊來存儲。inode的數量是格式化的時候指定的,理論上來說,inode的數量和block的數量是越接近越好,但是在實際過程中一一對應是很難的,所以一般格式化的時候會按照服務器的用途來指定一定比例的inode數量。

#df 查看系統每個分區bolck的數量

#df -i 查看系統每個分區inode的數量

wKiom1ebAPKCPrmpAABYTLiUKfk558.png

每個分區都有一個獨立的inode table

元數據也是在inode里面,元數據也是會占用磁盤空間的。

指針:數據塊的路徑


直接指針:有12個指針,一個4k, 可以存儲4*12=48K的數據塊。

間接指針:第十三個指針,指向下一個文件塊的指針,也是4k塊大小,4k塊來說,可以劃分1024個指針,里面的指針才是指向真正的數據塊。一共可以存儲1024*4k=4M的數據塊,那么文件在4M左右范圍里面,可以用間接指針就可以完成。

兩重指針:第十四個指針。也是指向一個4k指針數據塊,4k指針塊再指向1024個指針數據塊,

每個指針可以存放1024個4k數據,所以可以存儲1024*1024*4k=4G的數據塊。

三重指針:跟兩重指針工作原理類似,最后可以存放1024*1024*1024*4k=4t的數據塊。


inode table是緩存在內存里面的,所以查詢速度還是很快的。一般來說,在系統里面刪掉文件的操作并不是刪掉數據塊,而是刪掉inode table里面的元數據,這里解釋一下元數據,元數據就是數據塊的屬性,例如:名字,身高等這些就可以理解為元數據。所以,這個就是為什么刪掉了文件以后,只要沒有新的文件覆蓋掉原有的數據塊,數據一般都可以恢復的原因。很多文件系統,例如windows下面的fat和ntfs也是同樣的原理。一般來說,在磁盤里面的數據都是連續寫入,由于有時候會刪除掉部分數據,使得磁道里面有些空位置并不能一下子連續的存儲下一個文件,一般這樣都是分散存儲在不同的磁道里面,當讀取這一部分的數據,磁盤的指針要來回轉多幾個圈,造成性能下降,這就是文件碎片的由來。所以隔一段時間進行碎片整理是必須的。但是現在一些新的硬盤,如SSD固態硬盤,就沒有磁道這些說法,所以就并不需要像傳統的機械硬盤一樣進行碎片整理。


磁盤里的數據塊有文件和目錄,這兩者的inode的存儲方式也是不同的。

在inode table里面文件是直接引用一個inode的號碼,而目錄則是在inode table里面的目錄項下面存儲文件名和文件inode之間的映射。


復制、刪除、移動對inode的影響

cp 復制:新的文件會分配一個空閑的inode號,在inode表中生成新條目

         在目錄中創建一個目錄項,將名稱與inode編號關聯

         拷貝數據生成新的文件,是兩個完全不相同的數據塊。


rm 刪除:鏈接數遞減,從而釋放的inode號可以被重用

         把數據塊放在空閑列表中

         刪除目錄項

         數據實際上不會馬上被刪除,但當另一個文件使用數據塊時將被覆蓋,如果恢復inode的元數據的時候文件就會馬上鏈接恢復。


mv 移動:如果mv命令的目標和源在相同的同一個分區下面,作為mv命令

         用新的文件名創建對應新的目錄項

         刪除舊目錄條目對應的舊的文件名

         不影響inode表(除時間戳)或磁盤上的數據位置:沒有數據被移動!所以在同一個分區里面移動文件的速度是非常的快的原因。

         如果目標和源在一個不同的文件系統,mv相當于cp和rm


硬鏈接和軟鏈接的區別


什么是硬鏈接?

硬鏈接:指向同一個inode的多個文件路徑。(簡單理解的意思就是一個人有兩個名字,例如張三,他的外號叫老張,又叫小三,其實都是同一個人)

特性:

1 目錄不支持硬鏈接

2 硬鏈接不能跨文件系統(不能跨分區)

3 創建硬鏈接會增加inode引用計數;


創建硬鏈接文件命令

ln 源文件 硬鏈接文件…

1
2
ln [OPTION]... [-T] TARGET LINK_NAME   (1st form)
ln make links between files

刪掉其中一個硬鏈接文件,其他硬鏈接文件不受影響


什么是軟鏈接(符號鏈接)

軟鏈接:指向同一個文件路徑的另一個文件路徑;

特性:

1 符號鏈接于文件是兩人各自獨立的文件,各有自己的inode;對原文件創建符號鏈接

 不回增加引用計數;

2 支持對目錄創建符號鏈接,可以跨文件系統;

3 刪除符號鏈接文件不影響原文件;但刪除原文件,符號指定的路徑即使不存在,此時會

 變成無效鏈接。


注意:符號鏈接文件的大小是其指定的文件的路徑字符串的字節數


創建軟鏈接文件命令

1
2
3
4
#ln -s 原始文件路徑文件1 軟鏈接文件1..2..創建軟鏈接 
 
-s, --symbolic
              make symbolic links instead of hard links

創建軟鏈接的時候,必須要用絕對路徑!

原始文件相對于軟鏈接文件路徑,而不是相對于當前工作目錄。


兩者區別:

這里以個人理解做了一個小表格

wKiom1edagqDeu7mAAB4bq3JH9s031.png




練習題


1、顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間出現至少一位數字的文件或目錄

1
# ls -ld /var/l*[0-9]*[[:lower:]]

2、顯示/etc目錄下以任意一位數字開頭,且以非數字結尾的文件或目錄

1
# ls -ld /etc/[0-9]*[^0-9]

3、顯示/etc/目錄下以非字母開頭,后面跟了一個字母及其它任意長度任意字符的文件或目錄

1
# ls -ld /etc/[^[:alpha:]][[:alpha:]]*

4、顯示/etc目錄下所有以m開頭以非數字結尾的文件或目錄

1
# ls -ld /m*[^0-9]

5、顯示/etc目錄下,所有以.d結尾的文件或目錄

1
# ls -ld /etc/*.d

6、顯示/etc目錄下,所有.conf結尾,且以m,n,r,p開頭的文件或目錄

1
# ls -ld /etc/[mnrp]*.conf

7、使用別名命令,每日將/etc/目錄下所有文件,備份到/testdir/下獨立的新目錄下,并要求新目錄格式為backupYYYY-mm-dd,備份過程可見

1
2
# alias bkday='cp -av /etc/ /testdir/backup`date +%F`'
# bkday

8、先創建/testdir/rootdir目錄,再復制/root所有下文件到該目錄內,并要求保留原有權限

1
#cp -av /root /testdir/rootdir

9、如何創建/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b, /testdir/dir1/y/a, /testdir/dir1/y/b

1
# mkdir -p /testdir/dir1/{x,y}/{a,b}

10、如何創建/testdir/dir2/x,/testdir/dir2/y,/testdir/dir2/x/a,/testdir/dir2/x/b

1
# mkdir -pv /testdir/dir2/{x/{a,b},y}

11、如何創建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7

1
# mkdir -p /testdir/dir{3,4,5/dir{6,7}}

原創文章,作者:~微風~,如若轉載,請注明出處:http://www.www58058.com/28244

(0)
~微風~~微風~
上一篇 2016-08-03
下一篇 2016-08-03

相關推薦

  • N26第五周博客作業

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行;grep “^[[:space:]]+” /boot/grub/grub.conf 2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行;grep “^#[[:space:…

    Linux干貨 2017-03-06
  • Linux 中cp 、rm和mv與inode之間的關系

    1.cp和inode          當文件不存在時,分配一個新的inode號,創建新文件;          當文件存在時,則inode號采用被覆蓋之前的目標文件的inode號。 2.rm和ino…

    2017-07-21
  • 刪除boot,同時刪除/etc/fstab,如何恢復

    刪除boot,同時刪除/etc/fstab,如何恢復 /etc/fstab文件丟失的時候,得光盤啟動進入linux rescue下。 掛載好cdrom后,按ctrl+alt+del,然后按f2,進入bios,調整為cdrom啟動,然后reboot,進入linux?rescue急救模式/etc/fstab配置文件決定了linux系統在啟動后如何加載各個分區,如…

    2017-09-23
  • iptables實驗3 關于內網外網的地址轉換及端口轉換

    地址屬于內核,而不屬于網卡?。。?!     網絡防火墻的實現(主要是forward鏈) 172.16.100.68(A)和172.16.100.67(B) 192.168.12.10(B)和192.168.12.77(C)(VNET2) B作為C的網關   配置B主機的網卡一個為192.168.1.72,另一個為172.16.2…

    Linux干貨 2016-10-30
  • HAProxy初探及簡單案例_Net21_第二周

    前言 隨著互聯網業務的迅猛發展,大型電商平臺和門戶網站對系統的可用性和可靠性的要求越來越高,高可用集群、負載均衡集群成為一種熱門的系統架構解決方案。在眾多的負載均衡解決方案中,有基于硬件的負載均衡設備,例如F5、Big-IP等,也有基于軟件的負載均衡產品,如LVS、Nginx以及本文介紹的HAProxy等。在軟件的負載均衡產品中,又分為兩種實現方式,分別是基…

    Linux干貨 2016-07-22
  • grep簡述

    grep(Globel Search Regular Expression and Printing out the line) 它能使用正則表達式搜索文本,并把匹配的行打印出來。 grep包括grep、egrep和fgrep。 egrep表示擴展的grep,相比grep支持更多的匹配模式, “grep -E”相當于egrep。 fgrep是fast gre…

    2017-04-06
欧美性久久久久