?? 前言
本章我們將學(xué)習(xí)學(xué)習(xí)認(rèn)識(shí)一下磁盤的的物理結(jié)構(gòu),理解磁盤分區(qū)分塊,如何對區(qū)塊進(jìn)行管理。學(xué)習(xí)認(rèn)識(shí)inode和軟硬連接。目標(biāo)已經(jīng)確定,接下來就要搬好小板凳,準(zhǔn)備開講了…????????
1. 文件系統(tǒng)
1.1 磁盤的物理結(jié)構(gòu):
前面我們學(xué)到的所有的東西,全部都是在內(nèi)存中。但是并不是所有的文件都被打開了。
大量的文件,就在磁盤上,靜靜的躺著,這批文件非常多,雜,亂。
視角,從內(nèi)存中移開,視角,遷移到磁盤上。
磁盤基本的文件管理,本質(zhì)工作:就和快遞站的老板做的工作是一樣的!
磁盤是我們電腦上的唯一的一個(gè)機(jī)械設(shè)備目前,我們筆記本上,可能已經(jīng)不用磁盤了而是SSD(固態(tài)硬盤)。磁盤更加的便宜,公司的服務(wù)器大部分都是磁盤式的服務(wù)器,SSD的耐用性不如磁盤。
存儲(chǔ)數(shù)據(jù)原理:
磁盤存儲(chǔ)數(shù)據(jù)的原理是基于磁性材料和磁場相互作用的物理過程。在硬盤和磁帶等磁介質(zhì)上,數(shù)據(jù)以磁場的形式進(jìn)行存儲(chǔ)和讀取。
磁性,改變N/S
極,就是改變了0/1
。
當(dāng)我們改變磁盤上某一個(gè)位置的N/S
極,就好比更改了此處保存的數(shù)據(jù)0/1
。
- 一個(gè)面,一個(gè)磁頭。
- 機(jī)械式 + 外設(shè) = 磁盤一定是很慢的(相比于CPU,內(nèi)存)
磁盤存儲(chǔ)結(jié)構(gòu)由多個(gè)組件組成,每個(gè)組件都有不同的功能和作用。以下是磁盤存儲(chǔ)結(jié)構(gòu)中常見的組件及其解釋:
-
盤片(Platters):盤片是磁盤存儲(chǔ)結(jié)構(gòu)的主要部分,通常由金屬或玻璃材料制成。它們被堆疊在一起,并通過主軸旋轉(zhuǎn)。數(shù)據(jù)存儲(chǔ)在盤片的表面上,每個(gè)盤片的兩個(gè)面都可以用于數(shù)據(jù)存儲(chǔ)。
-
磁頭(Heads):磁頭是用于讀取和寫入數(shù)據(jù)的裝置,通常由電磁部件組成。磁頭位于盤片的表面上方或下方,能夠浮動(dòng)在非常接近盤片表面的位置,并通過微小的電流產(chǎn)生磁場,與盤片上的磁場相互作用。
-
臂(Arm):臂是磁頭的支撐結(jié)構(gòu),也被稱為尋道臂。臂一端連接著磁頭,另一端連接到驅(qū)動(dòng)器的位置控制系統(tǒng)。臂可以在盤片的邊緣上移動(dòng),將磁頭定位到指定的磁道上。
-
磁道(Track):磁道是盤片上的一個(gè)圓環(huán)形區(qū)域,被劃分為多個(gè)同心圓。每個(gè)磁道上可以存儲(chǔ)一定容量的數(shù)據(jù),磁頭通過臂將其定位到指定磁道上進(jìn)行讀寫操作。
-
柱面(Cylinder): 柱面是指位于多個(gè)盤片上同一徑向位置的磁道的集合。換句話說,柱面由多個(gè)盤片上相同編號(hào)的磁道組成,這些磁道在垂直方向上對齊形成一個(gè)柱狀結(jié)構(gòu)。每個(gè)盤片都有多個(gè)柱面,且每個(gè)柱面上的磁道數(shù)量相同。使用柱面編號(hào)的方式可以簡化磁頭的尋道操作。
-
扇區(qū)(Sector):扇區(qū)是磁道上的最小單位,用于存儲(chǔ)數(shù)據(jù)。通常情況下,每個(gè)扇區(qū)的大小為512字節(jié)或4KB。數(shù)據(jù)的讀取和寫入以扇區(qū)為單位進(jìn)行。
-
主軸(Spindle):主軸是盤片的旋轉(zhuǎn)中心軸,通過電機(jī)驅(qū)動(dòng)使盤片高速旋轉(zhuǎn)。主軸的旋轉(zhuǎn)速度通常以每分鐘轉(zhuǎn)數(shù)(RPM)來衡量,例如7,200 RPM或10,000 RPM。
-
驅(qū)動(dòng)器控制器(Drive Controller):驅(qū)動(dòng)器控制器是磁盤驅(qū)動(dòng)器上的電路板,負(fù)責(zé)控制整個(gè)磁盤存儲(chǔ)系統(tǒng)的操作。它連接到計(jì)算機(jī)系統(tǒng),并根據(jù)計(jì)算機(jī)的指令控制磁頭的移動(dòng)、數(shù)據(jù)讀取和寫入等操作。
這些組件共同協(xié)作,實(shí)現(xiàn)了數(shù)據(jù)在磁盤上的存儲(chǔ)和訪問過程。通過磁頭的移動(dòng)和盤片的旋轉(zhuǎn),可以精確地讀取和寫入數(shù)據(jù),從而實(shí)現(xiàn)高效的數(shù)據(jù)存儲(chǔ)和檢索。
讀寫磁盤的時(shí)候,磁頭找的是某一個(gè)面的某一個(gè)磁道的某一個(gè)扇區(qū):
- 盤面(有兩面)有自己對應(yīng)的磁頭
- 磁道 是由距離圓心的半徑?jīng)Q定的
- 扇區(qū)是由盤面旋轉(zhuǎn)決定的
操作系統(tǒng)的文件系統(tǒng)所作的工作,便是將文件和其對應(yīng)的扇區(qū)聯(lián)系起來。用上面提到的辦法,便可以查找到每一個(gè)扇區(qū)!
- 只要我們能找到磁盤上的盤面,柱面(磁道),扇區(qū),就能找到一個(gè)存儲(chǔ)單元!
- 用同樣的方法,我們可以找到所有的基本單元??!
這種查找數(shù)據(jù)位置的操作,被稱為CHS
尋址,CHS
分別對應(yīng)磁柱、磁面、扇區(qū)。
1.2 CSH和LBA:
CHS的尋址方式:
- 如何確定數(shù)據(jù)被寫到盤面對的哪些位置呢?
- 先確定某一個(gè)柱面或者磁道,再確定是哪個(gè)面。
- 接下來是確定在哪個(gè)扇區(qū),然后某一個(gè)存儲(chǔ)單元就能確定了。
- 就能找到任意一個(gè)指定的扇區(qū)。
相信我們都見過磁帶,卷起來是一盤,拉直了是一個(gè)長條。而我們的磁盤也可以看作將每個(gè)磁道拉直了,連起來就是個(gè)長條,我們可以看作是一個(gè)大數(shù)組。
- 此時(shí),對磁盤文件的修改,就可以抽象成對內(nèi)核中一個(gè)數(shù)組的增刪查改操作!
- 將每一小塊管好,整個(gè)也就管好了,對磁盤的管理就想象成了對數(shù)組的管理。
這種抽象之后的磁盤,被稱為LBA邏輯塊地址
方式。
通過整除 + 取模等操作,就可以將LBA邏輯塊地址
轉(zhuǎn)換成CHS地址
來確定具體位置。
具體計(jì)算過程參考:學(xué)習(xí)傳送門
修改了數(shù)組中的數(shù)據(jù)之后,操作系統(tǒng)將LBA對應(yīng)的CHS地址算出來交給磁盤,讓磁盤來修改指定扇區(qū)的數(shù)據(jù),便實(shí)現(xiàn)了保存數(shù)據(jù)到磁盤中的操作。
1.3 IO的基本單位:
對于操作系統(tǒng)而言,一次IO的基本單位通常是塊(block),通常情況下,一個(gè)塊的大小等于一個(gè)扇區(qū)的大小。扇區(qū)是磁盤存儲(chǔ)的最小單位,一般為512字節(jié)或者4KB。
磁盤訪問的基本單位是扇區(qū),不代表磁盤將來就必須以扇區(qū)為單位訪問。我們可以以多個(gè)扇區(qū)為單位去訪問。
為什么通常是4KB呢?
IO基本單位一般選擇4KB的原因有幾個(gè)方面的考慮:
- 存儲(chǔ)介質(zhì)特性:傳統(tǒng)硬盤(磁盤)的扇區(qū)大小通常是512字節(jié),而一個(gè)4KB的塊恰好包含了8個(gè)扇區(qū)。以4KB作為IO基本單位可以更好地匹配硬盤的物理組織結(jié)構(gòu),減少讀取和寫入時(shí)的尋道開銷,提高存儲(chǔ)設(shè)備的讀寫效率。
- 緩存效果:較大的塊大小有助于提高IO操作的緩存效果。當(dāng)系統(tǒng)進(jìn)行IO操作時(shí),會(huì)將整個(gè)塊加載到內(nèi)存緩存中。較大的塊大小可以最大程度地利用內(nèi)存的緩存能力,減少頻繁的磁盤訪問,從而提高整體的讀寫性能。
- 文件系統(tǒng)的塊大?。涸S多文件系統(tǒng)以4KB作為默認(rèn)的塊大小,選擇與文件系統(tǒng)塊大小一致的IO單位可以更好地與文件系統(tǒng)進(jìn)行協(xié)作。這樣可以避免額外的轉(zhuǎn)換和管理開銷,提高數(shù)據(jù)讀寫的效率。
其中我個(gè)人認(rèn)為最重要的一點(diǎn)就是:
- 不要讓軟件(OS)設(shè)計(jì)和硬件(磁盤)具有強(qiáng)相關(guān)性,換句話說,就是解耦合!
- 內(nèi)存也要以申請4KB的空間來接收。
需要注意的是,IO基本單位的選擇也會(huì)受到具體應(yīng)用場景、硬件限制以及性能需求的影響。對于某些特定應(yīng)用,可能會(huì)使用其他大小的塊來滿足特定的需求。因此,選擇IO基本單位的最佳大小需要綜合考慮各種因素,并進(jìn)行實(shí)際測試和評估。
1.4 文件系統(tǒng)結(jié)構(gòu):
上述我們講到,將磁盤看作是一個(gè)大的數(shù)組,將大數(shù)組分塊,只要將每一塊管理好,那么整個(gè)磁盤也就管理到位了。
假設(shè)分區(qū)有100GB,我們分了20個(gè)小組,接下來再分組,分了五個(gè)組,所以最后要想把磁盤管好,就要把塊組管好,也就是最后把1GB管好。
Boot Block與開機(jī)有關(guān):
一般計(jì)算機(jī)在剛開始啟動(dòng)的時(shí)候,首先加電自檢,然后找主板上的一個(gè)設(shè)備
Base 10 System
,它是硬件,里面大概有五百多字節(jié)的存儲(chǔ)空間,里面就存儲(chǔ)了磁盤設(shè)備,當(dāng)它啟動(dòng)之后定要去找計(jì)算機(jī)里面,操作系統(tǒng)在什么地方,所以它啟動(dòng)之后一定要讀取一個(gè)分區(qū)里面的Boot Block
,這個(gè)當(dāng)中就表明了一個(gè)機(jī)器的開機(jī)信息,包括分區(qū)表,同時(shí)還告訴我們操作系統(tǒng)中軟件在什么地方。
所以硬件層面上,系統(tǒng)啟動(dòng)時(shí),讀取這一小塊數(shù)據(jù)就可以直接找到操作系統(tǒng),然后加載操作系統(tǒng),俗稱:開機(jī)。
Linux采用的是文件內(nèi)容、文件屬性分開存放的存儲(chǔ)方式:
- 文件的屬性是穩(wěn)定的
- 文件的內(nèi)容在不斷增多
1.5 認(rèn)識(shí)inode:
Linux中文件的屬性信息(如權(quán)限、所有者、大小等)是通過inode來存儲(chǔ)和管理的:
- 每個(gè)文件都有一個(gè)唯一的inode號(hào)碼,用于標(biāo)識(shí)該文件。
- inode是文件系統(tǒng)中的一個(gè)數(shù)據(jù)結(jié)構(gòu),它包含了文件的元數(shù)據(jù)信息。
- 包括文件的權(quán)限、時(shí)間戳、大小等。
- 當(dāng)然也有一些文件沒有inode。
文件名是用戶給文件分配的可識(shí)別和易記的名稱,而inode是文件系統(tǒng)內(nèi)部用來唯一標(biāo)識(shí)和管理文件的數(shù)據(jù)結(jié)構(gòu)。
- Data blocks: 以塊為單位,進(jìn)行文件內(nèi)容的保存!
- inode table:以128字節(jié)為單位,進(jìn)行inode屬性的保存!
- 如何標(biāo)定文件的唯一性?
-
- inode屬性里面有一個(gè)inode編號(hào)!
- 一個(gè)分區(qū)內(nèi),一個(gè)inode是具有唯一性的。
-
- 一般而言,一個(gè)文件,一個(gè)inode,一個(gè)文件,一個(gè)inode號(hào) !
- Block Bitmap: 標(biāo)識(shí)每個(gè)塊是否已經(jīng)被使用了。用比特位的內(nèi)容,來表示對應(yīng)的塊是否被占用。用比特位的位置,來表示哪個(gè)數(shù)據(jù)塊。
- inode Bitmap: 用比特位的位置來代表是第幾個(gè)inode,用對應(yīng)位置比特位是0還是1來表示,inode表里的inode是否被占用。
- GDT(Group Descriptor Table): 管理分區(qū)內(nèi)的一個(gè)組,有多少inode,起始的inode編號(hào),有多少個(gè)inode被使用,有多少block被使用,還剩多少,總的group大小是多少…
- SB(super block) : 就是我們文件系統(tǒng)的項(xiàng)層數(shù)據(jù)結(jié)構(gòu)了!
-
- 表示整個(gè)分區(qū),一共有多少個(gè)塊,一共有多少個(gè)Block group。
-
- 每一個(gè)塊組inode使用情況是什么,每一個(gè)塊組Date Block使用情況是什么。
-
- 整個(gè)分區(qū)是多大,整個(gè)分區(qū)在磁盤中是從幾號(hào)到幾號(hào),整個(gè)分區(qū)是什么樣的文件系統(tǒng)。
-
- 文件系統(tǒng)種類是什么,全部屬性都寫在了Super Block,所以是一個(gè)頂層的數(shù)據(jù)結(jié)構(gòu)。
- 一個(gè)inode(文件,屬性)如何和屬子自己的內(nèi)容關(guān)聯(lián)起來呢?
-
- data block,4KB,也叫以保存其他塊的編號(hào)!
-
- 直接在自己的塊內(nèi)找到其他的塊,找到文件的inode就能找到文件的所有內(nèi)容了。
- 文件名,算文件的屬性嗎?算!
-
- 但是,inode里面,并不保存文件名??!
-
- Linux下,底層實(shí)際都是通過inode編號(hào)標(biāo)識(shí)文件的,沒有文件名的概念。
Linux下一切皆文件,那么目錄是文件嗎?
- 答案是肯定的,目錄也是文件??!
- 文件 = 內(nèi)容(blocks) + 屬性(inode)
- 文件名和inode的映射關(guān)系是存儲(chǔ)在目錄的數(shù)據(jù)塊(block)中的。
為什么要讀取目錄下文件名時(shí),查看文件名時(shí)必須要有讀權(quán)限:
- 讀取文件名就是在讀取目錄的內(nèi)容。
- 讀取目錄的內(nèi)容就必須要有讀權(quán)限。
- 這和讀一個(gè)普通文件沒區(qū)別。
當(dāng)想在目錄下創(chuàng)建一個(gè)文件時(shí),創(chuàng)建文件時(shí)必須要有寫權(quán)限:
- 最后要將文件名和inode映射關(guān)系寫到目錄的data block當(dāng)中。
- 如果沒有寫權(quán)限,怎么寫入呢?
Linux同一個(gè)目錄下,可以創(chuàng)建多個(gè)同名文件嗎??不會(huì)!
- 文件名本身就是一個(gè)具有Key值的東西!
- 通過文件名找inode一定是一對一的關(guān)系,不存在多個(gè)文件名重復(fù)的問題。
- 目錄里保存的是文件名和inode的映射關(guān)系。
補(bǔ)充:
- 目錄實(shí)際上是一種特殊的文件,它包含了一個(gè)或多個(gè)數(shù)據(jù)塊,用于存儲(chǔ)文件名和對應(yīng)的inode號(hào)碼的映射。
- 每個(gè)目錄數(shù)據(jù)塊中都保存著一系列的目錄項(xiàng)(directory entry),每個(gè)目錄項(xiàng)由文件名和對應(yīng)的inode號(hào)碼組成。系統(tǒng)通過遍歷這些目錄項(xiàng),就能夠根據(jù)文件名找到相應(yīng)的inode,進(jìn)而操作文件。
- 當(dāng)文件系統(tǒng)需要?jiǎng)?chuàng)建、刪除、重命名或移動(dòng)文件時(shí),它會(huì)更新目錄數(shù)據(jù)塊中的目錄項(xiàng),以反映文件名與inode之間的變化。
- 因此,目錄的數(shù)據(jù)塊承載了文件名和inode之間的映射關(guān)系,它起到了連接文件名和inode的橋梁作用。通過查找目錄數(shù)據(jù)塊,系統(tǒng)可以快速定位并操作特定的文件。
通過ls -l -i
來查看文件的inode:
當(dāng)我們創(chuàng)建一個(gè)文件,操作系統(tǒng)做了什么?
- 找到自己的目錄,找到目錄的inode,然后找到目錄的Date Block。
- 這里有文件名和inode的映射關(guān)系,文件名在該目錄下的唯一性,根據(jù)文件名做查找,找到了inode編號(hào)。
- 根據(jù)inode編號(hào)找到block group,然后只要把該文件對應(yīng)的inode Bitmap由1置0。
- 將這個(gè)文件對應(yīng)的Block Bitmap數(shù)據(jù)塊由1置0,此時(shí)就完成了文件刪除。
請問刪除一個(gè)文件,OS做了什么??
- Linux并沒有真正的清除數(shù)據(jù):
- 刪除的時(shí)候,只是將標(biāo)記該文件對應(yīng)的屬性和數(shù)據(jù)塊的相關(guān)位圖結(jié)構(gòu)由1置0,就完成了刪除。
- 最后在文件所處的目錄當(dāng)中,把該文件對應(yīng)的inode映射關(guān)系去掉,此時(shí)這個(gè)文件就被刪除了。
ls的工作過程:
-
ls
找到目錄對應(yīng)的inode編號(hào),根據(jù)inode編號(hào)找到inode。 - inode里面有屬性,屬性里面有數(shù)據(jù)塊和inode的映射關(guān)系。
- 找到數(shù)據(jù)塊,只把數(shù)據(jù)塊中文件名列出來就完了。
ls -l工作過程:
-
ls -l
是找到目錄對應(yīng)的數(shù)據(jù)塊,找到了對應(yīng)的內(nèi)容。 - 內(nèi)容里面文件名和inode映射關(guān)系就有了,拿著每個(gè)文件的inode,去查找每個(gè)文件它自己的inode,將屬性全部讀取。
- 此時(shí)再拼接文件名,就構(gòu)成了ls -l的信息。
2. 軟硬連接
在我們Linux剛開始學(xué)習(xí)的時(shí)候,我們有一個(gè)連接數(shù)
是沒有講的:
文件硬連接數(shù):
文件硬連接個(gè)數(shù)指的是特定文件的硬鏈接數(shù)量。在Linux系統(tǒng)中,多個(gè)文件名可以指向相同的數(shù)據(jù)塊,這些文件名被稱為文件的硬鏈接。 硬鏈接是文件系統(tǒng)中的鏈接,它們具有相同的inode號(hào),并且它們引用相同的文件內(nèi)容。
每當(dāng)創(chuàng)建一個(gè)硬鏈接時(shí),文件的硬鏈接計(jì)數(shù)增加1。相反,當(dāng)刪除一個(gè)硬鏈接時(shí),硬鏈接計(jì)數(shù)減少1。只有在硬鏈接計(jì)數(shù)為0時(shí),文件才被真正刪除,釋放相關(guān)的存儲(chǔ)空間。
因此,文件的硬鏈接個(gè)數(shù)表示有多少個(gè)文件名指向同一份數(shù)據(jù)。當(dāng)硬鏈接計(jì)數(shù)為1時(shí),說明該文件沒有其他硬鏈接,即它是唯一指向該數(shù)據(jù)的文件。
2.1 目錄和文件的硬連接數(shù):
當(dāng)我們創(chuàng)建目錄或文件時(shí),我們看到的是:目錄默認(rèn)的硬鏈接數(shù)是2,而文件默認(rèn)的硬鏈接數(shù)是1。
- 這是什么原因?
- 在Linux系統(tǒng)中,目錄是一種特殊類型的文件,它包含了文件名和對應(yīng)文件索引節(jié)點(diǎn)的映射關(guān)系。
- 目錄的硬鏈接數(shù)指的是指向該目錄的硬鏈接數(shù)量,也就是有多少個(gè)目錄項(xiàng)指向該目錄。
-
- 一個(gè)目錄至少有兩個(gè)硬鏈接,一個(gè)是它自己的記錄(“.”),另一個(gè)是指向該目錄的父目錄的記錄(“. .”)。
-
- 這樣設(shè)計(jì)的目的是為了在文件系統(tǒng)中建立層次結(jié)構(gòu),并保證文件系統(tǒng)的完整性。
- 文件的硬鏈接數(shù)指的是指向該文件的硬鏈接數(shù)量,也就是有多少個(gè)文件名指向該文件。
-
- 默認(rèn)情況下,文件在創(chuàng)建時(shí)只會(huì)有一個(gè)硬鏈接,即它的原始文件名。
-
- 這是因?yàn)槲募ǔ1徽J(rèn)為是唯一的,沒有必要有其他文件名指向同一個(gè)文件。
-
- 如果需要?jiǎng)?chuàng)建文件的硬鏈接,可以使用特定的命令進(jìn)行創(chuàng)建。
總之,目錄的默認(rèn)硬鏈接數(shù)是2,是為了維護(hù)文件系統(tǒng)的結(jié)構(gòu)和完整性;而文件的默認(rèn)硬鏈接數(shù)是1,因?yàn)槲募ǔ1徽J(rèn)為是唯一的。
2.2 軟連接:
ln -s 源 目標(biāo) #創(chuàng)建軟連接
軟連接就相當(dāng)于Linux下的快捷方式(ln: link的簡稱):
Linux中軟連接(快捷方式)的用法:
現(xiàn)在是連接可執(zhí)行程序,未來可能是連接頭文件,連接庫文件(動(dòng)靜態(tài)庫)不用我們很冗余的去找這些庫。
2.3 硬連接:
ln 源 目標(biāo) #創(chuàng)建硬鏈接
建立一個(gè)硬連接:
inode對比:
我們發(fā)現(xiàn)軟連接的inode和原來的inode不同,而硬連接的inode則是與原來相同。
硬連接數(shù):一旦建立好映射關(guān)系,就從1變成了2。
- 在當(dāng)前目錄下重新建立了文件名和inode之間的映射關(guān)系
- 這兩個(gè)文件名經(jīng)過該目錄映射的是同一個(gè)inode。
軟連接的連接數(shù)沒有變化的原因是:這是個(gè)獨(dú)立文件,因?yàn)樗歇?dú)立inode。
引用計(jì)數(shù)沒有變化,就證明了,軟連接不是單純的拿文件名和文件inode建立映射關(guān)系,要不然和硬
連接沒區(qū)別了。
2.4 軟硬連接的區(qū)別:
軟連接:文章來源:http://www.zghlxwxcb.cn/news/detail-596996.html
- 軟連接是一個(gè)獨(dú)立文件,有自己獨(dú)立的inode和inode編號(hào)。
- Linux下的快捷方式!
- 既然是一個(gè)獨(dú)立文件,inode是獨(dú)立的,軟連接的文件內(nèi)容是什么呢??
-
- 保存的是指向的文件的所在路徑!!
-
- 在系統(tǒng)級(jí)別保存的,我們開是看不到的。
硬連接:文章來源地址http://www.zghlxwxcb.cn/news/detail-596996.html
- 硬鏈接不是一個(gè)獨(dú)立文件,他和目標(biāo)文件使用的是同一個(gè)inode!
-
- 硬鏈接不是一個(gè)獨(dú)立的文件,它是與原始文件共享相同的inode和數(shù)據(jù)塊。
-
- 硬鏈接與原始文件在文件系統(tǒng)中指向同一個(gè)數(shù)據(jù)塊,它們是同一個(gè)文件的多個(gè)文件名。
-
- 當(dāng)你創(chuàng)建一個(gè)硬鏈接時(shí),實(shí)際上是將一個(gè)新的文件名關(guān)聯(lián)到原始文件的inode上。
-
- 因此,硬鏈接并不會(huì)占用額外的磁盤空間,也不會(huì)存在獨(dú)立的文件實(shí)體。
-
- 對于文件系統(tǒng)來說,無論是原始文件還是硬鏈接,都只有一個(gè)實(shí)際的數(shù)據(jù)塊。
- 由于硬鏈接與原始文件共享相同的inode,它們具有相同的權(quán)限、時(shí)間戳等元數(shù)據(jù)信息。
-
- 如果修改了原始文件的內(nèi)容或?qū)傩裕信c之相關(guān)聯(lián)的硬鏈接文件都會(huì)反映這些更改。
- 注意細(xì)節(jié):
- 需要注意的是,硬鏈接只能在同一個(gè)文件系統(tǒng)中創(chuàng)建,并且不能關(guān)聯(lián)到目錄。
- 刪除一個(gè)硬鏈接只會(huì)減少硬鏈接計(jì)數(shù),當(dāng)硬鏈接計(jì)數(shù)降為零時(shí),文件才會(huì)被真正刪除,釋放相應(yīng)的磁盤空間。
- 什么是硬鏈接數(shù)?
- inode編號(hào),不就是一個(gè) “指針” 的概念嗎?
- 本質(zhì)就是改文件inode屬性中的一個(gè)計(jì)數(shù)器,count,標(biāo)識(shí)有幾個(gè)文件名和我的inode建立了映射關(guān)系。
- 簡言之,就是有幾個(gè)文件名指向我的inode(文件本身)。
- 硬連接的作用:
- 路徑間切換。
到了這里,關(guān)于【Linux】inode軟硬連接的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!