硬盤是由一個個圓形的盤片組全起來的汁汗,從物理特性上看衷畦,硬盤盤片的轉(zhuǎn)速越快,它的性能就越好知牌,而且我們的磁道越靠外部祈争,它的讀寫性能就越高,這是因為角寸,磁道越靠外部菩混,單位時間內(nèi)讀到的信息越多忿墅,所以一般把系統(tǒng)裝在硬盤的最外層分區(qū)中。
為了更直觀了解硬盤的分區(qū)及內(nèi)容沮峡,我們先看如下一張圖:
如下是對圖中每個字段的含義解釋
一個硬盤從外面到圓心畫一個個同心圓疚脐,不同的同心圓就是不同的磁道,一個磁道按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
一個間接:1k256=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及文件名對照表质况,大約如下
當(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存儲了原文件名里伯,所以軟件鏈接文件的大小就是原文件路徑名的長度