Linux磁盤文件系統(tǒng)

硬盤是由一個個圓形的盤片組全起來的汁汗,從物理特性上看衷畦,硬盤盤片的轉(zhuǎn)速越快,它的性能就越好知牌,而且我們的磁道越靠外部祈争,它的讀寫性能就越高,這是因為角寸,磁道越靠外部菩混,單位時間內(nèi)讀到的信息越多忿墅,所以一般把系統(tǒng)裝在硬盤的最外層分區(qū)中。

為了更直觀了解硬盤的分區(qū)及內(nèi)容沮峡,我們先看如下一張圖:


磁盤文件系統(tǒng).png

如下是對圖中每個字段的含義解釋

一個硬盤從外面到圓心畫一個個同心圓疚脐,不同的同心圓就是不同的磁道,一個磁道按512字節(jié)為單位邢疙,劃分為一個個的扇區(qū)棍弄,多個盤片的同一位置的同心圓組成一個柱面,分區(qū)時以柱面為單位
扇區(qū):一個扇區(qū)為512節(jié)疟游,為最小的物理存儲單位
磁道:磁盤的同心圓
block:用文件系統(tǒng)格式化后呼畸,一個塊的大小,一般有1k颁虐,2k蛮原,4k為單位。

第0個盤面聪廉,0個柱面瞬痘,0個扇區(qū)
MBR
硬盤的第0個盤面,第0磁道板熊,第0扇區(qū)框全,這一個512字節(jié)最重要,MBR和操作系統(tǒng)無關(guān)干签,它是獨立于操作系統(tǒng)之外獨立存在的津辩。它分為三段:
A.Bootloader,占前面446字節(jié)容劳,是引導(dǎo)程序喘沿,引導(dǎo)你硬盤上的操作系統(tǒng)進行啟動
B.接下來64字節(jié)存儲分區(qū)表(partition table)信息,每16字節(jié)標(biāo)識一個分區(qū)
C.Magic number,占兩個字節(jié)竭贩,用來標(biāo)識此MBR是否有效

partition table:
因為這個只占64byte蚜印,每個分區(qū)占16byte,所以可以有四條分區(qū)記錄留量,這四條記錄為主分區(qū)或擴展分區(qū)窄赋,其中擴展分區(qū)還可以再分出邏輯分區(qū)
主分區(qū)與擴展分區(qū)之和最多是4個(硬盤的分區(qū)表64byte限制)
擴展分區(qū)最多只能有一個(操作系統(tǒng)限制)
邏輯分區(qū)是由擴展分區(qū)再分出來的分區(qū)

boot sector
一個分區(qū)的最前面1024個字節(jié)為boot sector,后面才是接superblock楼熄,它可以安裝引導(dǎo)裝載程序忆绰,利用它可以作出多重引導(dǎo)的環(huán)境

super block
記錄整個文件系統(tǒng)的整體信息,包括inode/block的總量可岂,使用量错敢,剩余量,以及文件系統(tǒng)的格式與相關(guān)信息

File system Description
描述每個block group的開始與結(jié)束的block號碼

block bitmap
通過block bitmap來記錄每個block的狀態(tài)缕粹,如是否被使用稚茅,這樣操作系統(tǒng)可以很快去找到空的block分配給新文件纸淮,刪除文件的過程只是標(biāo)記這個block沒有并使用,實際的文件內(nèi)容還是在的峰锁。

inode bitmap
與block bitmap類似萎馅,記錄每個inode的狀態(tài),如是否已經(jīng)被使用虹蒋,這樣操作系統(tǒng)可以很快去找到空的inode分配給新文件糜芳,刪除文件的過程只是標(biāo)記該inode為未使用

inode table
由多個inode組成,一個文件占用一個inode魄衅,一個inode占用128byte峭竣,記錄文件的屬性,如
對應(yīng)文件的權(quán)限晃虫,對應(yīng)文件的屬主屬組皆撩,對應(yīng)文件的時間戳,對應(yīng)文件的大小哲银,
對應(yīng)文件內(nèi)容所存儲的block號碼
inode記錄一個block號需要花掉4byte扛吞,有12個直接指向block號碼,一個指向間接荆责,一個指向雙間接和一個指向三間接
所以如果一個block有1k滥比,它的文件內(nèi)容最大值為:
12個直接指向:121k=12K
一個間接:1k
256=256k (記錄一個block需要4byte,故一個block能記錄256個block)
雙間接:1K256256=256^2K
三間接:1K256256*256=256^3k
所以總額為12+256+2562+2563=16843020K=16G

注意: 這面的inode并沒有保存文件名做院,文件名保存在目錄文件的inode所對應(yīng)的block中盲泛,目錄也是一種文件。
block的大小有1k键耕,2k寺滚,4k等,它實際記錄文件的內(nèi)容屈雄,大文件會占用多個block

用dumpe2fs命令可以查看superblock及每個block group的信息村视,如下:

Inode count: 128016
Block count: 512000
Free blocks: 453079
Free inodes: 127977
Block size: 1024
Inode size: 128

Group 0: (Blocks 1-8192) [ITABLE_ZEROED]
Checksum 0x5210, unused inodes 2014
Primary superblock at 1, Group descriptors at 2-3
Reserved GDT blocks at 4-259
Block bitmap at 260 (+259), Inode bitmap at 276 (+275)
Inode table at 292-545 (+291)
3820 free blocks, 2014 free inodes, 2 directories, 2014 unused inodes
Free blocks: 4373-8192
Free inodes: 19-2032
Group 1: (Blocks 8193-16384) [INODE_UNINIT, ITABLE_ZEROED]
Checksum 0x7f25, unused inodes 2032
Backup superblock at 8193, Group descriptors at 8194-8195
Reserved GDT blocks at 8196-8451
Block bitmap at 261 (+4294959364), Inode bitmap at 277 (+4294959380)
Inode table at 546-799 (+4294959649)
1090 free blocks, 2032 free inodes, 0 directories, 2032 unused inodes
Free blocks: 15295-16384
Free inodes: 2033-4064
Group 2: (Blocks 16385-24576) [INODE_UNINIT, ITABLE_ZEROED]
Checksum 0x1d68, unused inodes 2032
Block bitmap at 262 (+4294951173), Inode bitmap at 278 (+4294951189)
Inode table at 800-1053 (+4294951711)
0 free blocks, 2032 free inodes, 0 directories, 2032 unused inodes
Free blocks:
Free inodes: 4065-6096
Group 3: (Blocks 24577-32768) [INODE_UNINIT, ITABLE_ZEROED]
Checksum 0x4ef8, unused inodes 2032
Backup superblock at 24577, Group descriptors at 24578-24579
Reserved GDT blocks at 24580-24835
Block bitmap at 263 (+4294942982), Inode bitmap at 279 (+4294942998)
Inode table at 1054-1307 (+4294943773)
1789 free blocks, 2032 free inodes, 0 directories, 2032 unused inodes
Free blocks: 24836-26624
Free inodes: 6097-8128

因為super block損壞的話相當(dāng)于整個分區(qū)都用不了,所以可以看到superblock不僅在第一個block group有存在酒奶,它也同時備份在其它的block group中蚁孔,達(dá)到更安全的備份機制。

目錄樹
Linux是樹狀的文件結(jié)構(gòu)讥蟆,每個都從根開始,當(dāng)我們創(chuàng)建一個目錄時纺阔,系統(tǒng)會分配給它一個inode瘸彤,及一個data block,inode記錄了文件的屬性及data block的位置笛钝,而目錄data block則記錄著目錄下文件的inode及文件名對照表质况,大約如下

clipboard.png

當(dāng)我們ll -d 目錄時愕宋,會發(fā)現(xiàn)很多目錄的大小都寫著4096
[root@zejin240 /]# ll -d / /bin/ /etc/ /usr/ /boot
dr-xr-xr-x. 23 root root 4096 Oct 12 09:13 /
dr-xr-xr-x. 2 root root 4096 Oct 22 03:39 /bin/
dr-xr-xr-x. 5 root root 1024 Jul 15 2015 /boot
drwxr-xr-x. 124 root root 12288 Oct 31 10:48 /etc/
drwxr-xr-x. 14 root root 4096 Jun 23 17:40 /usr/

我們發(fā)現(xiàn)/boot目錄是1024,那是因為這個分區(qū)的塊大小為1k结榄,而其它目錄的分區(qū)大小為4k的緣故中贝,而/etc的大小為12288,說明這個目錄下文件很多臼朗,系統(tǒng)分配了三個block給它存存儲inode-文件名對照表邻寿。

那么當(dāng)我們讀取一個文件時,系統(tǒng)是怎樣找到我們的文件的呢视哑?
[root@zejin240 /]# ll -id /
2 dr-xr-xr-x. 23 root root 4096 Oct 12 09:13 /
[root@zejin240 /]# ll -id /var/
912129 drwxr-xr-x. 22 root root 4096 Jun 12 11:18 /var/
[root@zejin240 /]# ll -id /var/log/
913100 drwxr-xr-x. 15 root root 4096 Oct 31 10:48 /var/log/
[root@zejin240 /]# ll -id /var/log/messages
924361 -rw-------. 1 root root 147 Oct 31 10:48 /var/log/messages

例如當(dāng)我們要訪問/var/log/message這個文件時
首先系統(tǒng)通過掛載點找到/dev/sda2根目錄/的inode绣否,讀取到它的inode為2,然后查找inode為2對應(yīng)的data block塊挡毅,查找/var對應(yīng)的inode為912129
接下去讀取912129這個inode對應(yīng)的datablock蒜撮,發(fā)現(xiàn)/var/log這個文件的inode為913100,
接下再去讀取913100這個inode對應(yīng)的datablock跪呈,發(fā)現(xiàn)/var/log/message對應(yīng)的inode為924361段磨,接著讀取inode為924361對應(yīng)的datablock,最終獲得文件的內(nèi)容耗绿,
當(dāng)然每步在讀取inode對應(yīng)的datablock前都會驗證用戶的權(quán)限信息苹支。

當(dāng)我們創(chuàng)建一個文件時
系統(tǒng)會去分區(qū)中的inode bitmap找到一個未使用的inode,然后再掃描block bitmap找到一個示使用的data block缭乘,將兩者的對應(yīng)關(guān)系存儲在目錄的data block中沐序,供文件系統(tǒng)查詢調(diào)用

當(dāng)我們復(fù)制一個文件時
首先創(chuàng)建一個新的文件,并將原文件的data block的數(shù)據(jù)復(fù)制一份到新的文件的data block中

當(dāng)我們移動一個文件時
文件的移動只是路徑名改動了堕绩,如果在同一個分區(qū)中策幼,文件的inode及對應(yīng)的data block都沒有變動,所以速度極快奴紧。當(dāng)然如果跨不同的文件系統(tǒng)移動就會很慢了特姐。

當(dāng)我們刪除一個文件時
只是將目錄對inode-文件名對應(yīng)關(guān)系刪除,并且在inode bitmap及block bitmap標(biāo)記相應(yīng)的inode及block未使用黍氮,實際的data block內(nèi)容并沒有刪除唐含,這也是為什么刪除的文件能夠找回的原因。

當(dāng)我們硬鏈接一個文件時
只是在鏈接文件所在的目錄下多增加一條inode-文件對應(yīng)記錄沫浆,inode與原文件的inode一樣捷枯,并不會分配新的data block給硬鏈接文件。
特性:
1.不能跨文件系統(tǒng)創(chuàng)建
[root@localhost src]# ln redis-3.0.6.tar.gz /home/chenzejin/aa
ln: creating hard link /home/chenzejin/aa' =>redis-3.0.6.tar.gz': Invalid cross-device link

2.不能鏈接目錄
3.創(chuàng)建硬鏈接增加文件被硬鏈接的次數(shù)

當(dāng)我們軟鏈接一個文件時
在文件下新建一個文件专执,會分配一個inode及data block給新文件淮捆,而在data block中存放著原文件的路徑名,故該鏈接文件的大小為原文件路徑命名的字節(jié)大小。符號鏈接的數(shù)字權(quán)限都為777攀痊,這樣是為了保證任何用戶都可以找到該鏈接桐腌,但不是任何人都可以訪問它所指向的文件,由原文件的權(quán)限限定苟径。
特性:
1.可以應(yīng)用于目錄
2.可以跨文件系統(tǒng)創(chuàng)建
3.不會增加被鏈接文件的鏈接次數(shù)
4.其大小為指向的路徑所包含的字符個數(shù)

其它總結(jié)

文件系統(tǒng)
分區(qū)后我們需要對它進行管理操作案站,它是由文件系統(tǒng)這個軟件來完成的,用來管理磁盤上的內(nèi)容棘街,包括怎么寫蟆盐,如何讀的問題,一個分區(qū)對應(yīng)一個文件系統(tǒng)蹬碧,或者說一個文件系統(tǒng)就是一個分區(qū)舱禽。

磁盤分區(qū)
告訴操作系統(tǒng)該分區(qū)是在A柱面到B柱面之間的塊

各種接口在Linux的文件名為:
/dev/sd[a-p][1-15] 為SCSI,SATA,USB,FLASH等接口的磁盤文件名
/dev/hd[a-d][1-63] 為IDE接口的磁盤文件名

文件的block記錄文件的實際數(shù)據(jù)
目錄的block記錄該目錄下面文件名與其inode號碼對照表

硬鏈接只是在該目錄對應(yīng)的block增加一條記錄,記錄該文件名與鏈接文件的inode號碼恩沽,該inode與原文件相同誊稚,不會消耗新的block

軟鏈接也是在該目錄新建一個文件,這個文件的inode與原文件不同罗心,該文件對應(yīng)的data block存儲了原文件名里伯,所以軟件鏈接文件的大小就是原文件路徑名的長度

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市渤闷,隨后出現(xiàn)的幾起案子疾瓮,更是在濱河造成了極大的恐慌,老刑警劉巖飒箭,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狼电,死亡現(xiàn)場離奇詭異,居然都是意外死亡弦蹂,警方通過查閱死者的電腦和手機肩碟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凸椿,“玉大人削祈,你說我怎么就攤上這事∧月” “怎么了髓抑?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長优幸。 經(jīng)常有香客問我吨拍,道長,這世上最難降的妖魔是什么网杆? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任羹饰,我火速辦了婚禮握爷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘严里。我一直安慰自己,他們只是感情好追城,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布刹碾。 她就那樣靜靜地躺著,像睡著了一般座柱。 火紅的嫁衣襯著肌膚如雪迷帜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天色洞,我揣著相機與錄音戏锹,去河邊找鬼。 笑死火诸,一個胖子當(dāng)著我的面吹牛锦针,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播置蜀,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼奈搜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了盯荤?” 一聲冷哼從身側(cè)響起馋吗,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎秋秤,沒想到半個月后宏粤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡灼卢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年绍哎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芥玉。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡蛇摸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出灿巧,到底是詐尸還是另有隱情赶袄,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布抠藕,位于F島的核電站饿肺,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏盾似。R本人自食惡果不足惜敬辣,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一雪标、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧溉跃,春花似錦村刨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至龄糊,卻和暖如春逆粹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背炫惩。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工僻弹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人他嚷。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓蹋绽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親筋蓖。 傳聞我的和親對象是個殘疾皇子蟋字,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容