Liunx文件系統詳解

目錄

1.磁盤

1.1 概念

1.2?磁盤物理結構

1.3?磁盤的存儲結構

1.4?磁盤的邏輯結構

1.5?CHS && LBA地址

2.基礎文件系統

2.1 塊

?編輯

2.2?分區

2.3?inode

3.ext2 ?件系統

3.1?宏觀認識

3.2?Block Group

3.3塊組內部構成

3.3.1?超級塊(Super Block)

3.3.2?GDT(Group Descriptor Table)

3.3.3?塊位圖(Block Bitmap)

3.3.4?inode位圖(Inode Bitmap)

3.3.5?i節點表(Inode Table)

3.3.6?Data Block

3.4?inode和datablock映射

3.5??錄與?件名

3.6?路徑解析

3.7?路徑緩存

3.8?掛載分區

3.9 總結圖

4.軟硬連接

4.1 硬鏈接

4.2 軟鏈接

4.3?軟硬連接對?及用途


1.磁盤

在Linux中,打開的文件保存在內存中,對于沒有打開的文件則保存在磁盤里

1.1 概念

磁盤(disk)是指利用磁記錄技術存儲數據的存儲器。

1.2?磁盤物理結構

磁盤的物理結構由磁盤,磁頭,馬達....組成,這里的磁盤稱為盤片,一般有三個盤片,六個面,同樣也有每個盤面對應一個磁頭,一共六個磁頭,這六個磁頭由于綁定在一個機械臂上,因此只能共同運行(你走哪,我就走哪)

1.3?磁盤的存儲結構

磁盤的存儲結構和飛鏢盤差不多,每一面盤片中圓形代表一個磁道,磁道中又被分為許多扇區

扇區:是磁盤存儲數據的基本單位,512字節,塊設備

對于一個磁盤來說有三個盤片,對于一個磁道,從上往下看就相當一個圓柱體

如何定位?個扇區呢?
可以先定位磁頭(header)
確定磁頭要訪問哪?個柱?(磁道)(cylinder)
定位?個扇區(sector)

而這三步就被稱為CHS地址定位

扇區是從磁盤讀出和寫?信息的最?單位,通常??為 512 字節。
磁頭(head)數:每個盤??般有上下兩?,分別對應1個磁頭,共2個磁頭
磁道(track)數:磁道是從盤?外圈往內圈編號0磁道,1磁道...,靠近主軸的同?圓?于停靠磁頭,不存儲數據
柱?(cylinder)數:磁道構成柱?,數量上等同于磁道個數
扇區(sector)數:每個磁道都被切分成很多扇形區域,每道的扇區數量相同
圓盤(platter)數:就是盤?的數量
磁盤容量=磁頭數 × 磁道(柱?)數 × 每道扇區數 × 每扇區字節數

1.4?磁盤的邏輯結構

在上文敘述過,由于盤片中的磁道是一個圓形,就可以把這個圓形剪開,形成一個線性結構

某?盤?的某?個磁道展開:
即:?維數組
同理對于一面的盤片中某一磁道展開,也可以對多面盤片中磁道展開
整個磁盤所有盤?的同?個磁道,即柱?展開:
柱?上的每個磁道,扇區個數是?樣的,就是?維數組嗎

一樣也可以對多個磁道展開

整個磁盤就是多張?維的扇區數組表,也就是三維數組,對于三維數組,也可以像一維數組展開,所以,每?個扇區都有?個下標,我們叫做 LBA(Logical Block Address) 地址,其實就是線性地址

在OS只需要使?LBA就可以了,對于LBA地址轉成CHS地址,這步操作由磁盤??來做

1.5?CHS && LBA地址

CHS轉成LBA:
磁頭數*每磁道扇區數 = 單個柱?的扇區總數
LBA = 柱?號C*單個柱?的扇區總數 + 磁頭號H*每磁道扇區數 + 扇區號S - 1
即:LBA = 柱?號C*(磁頭數*每磁道扇區數) + 磁頭號H*每磁道扇區數 + 扇區號S - 1
扇區號通常是從1開始的,?在LBA中,地址是從0開始的
柱?和磁道都是從0開始編號的
總柱?,磁道個數,扇區總數等信息,在磁盤內部會?動維護,上層開機的時候,會獲取到這些參數。
LBA轉成CHS:
柱?號C = LBA // (磁頭數*每磁道扇區數)【就是單個柱?的扇區總數】
磁頭號H = (LBA % (磁頭數*每磁道扇區數)) // 每磁道扇區數
扇區號S = (LBA % 每磁道扇區數) + 1
"//": 表?除取整
所以:從此往后,在磁盤使?者看來,根本就不關?CHS地址,?是直接使?LBA地址,磁盤內部??轉換。所以: 磁盤就是?個 元素為扇區 的?維數組,數組的下標就是每?個扇區的LBA地址。OS使?磁盤,就可以??個數字訪問磁盤扇區了。

2.基礎文件系統

2.1 塊

其實硬盤是典型的“塊”設備,操作系統讀取硬盤數據的時候,其實是不會?個個扇區地讀取,這樣效率太低,?是?次性連續讀取多個扇區,即?次性讀取?個”塊”(block)。 硬盤的每個分區是被劃分為?個個的”塊”。?個”塊”的??是由格式化的時候確定的,并且不可以更改,最常?的是4KB,即連續?個扇區組成?個 ”塊”。”塊”是?件存取的最?單位。

2.2?分區

其實磁盤是可以被分成多個分區(partition)的,以Windows觀點來看,對于?塊磁盤將它分區成C,D,E盤。那個C,D,E就是分區。分區從實質上說就是對硬盤的?種格式化。但是Linux的設備都是以?件形式存在,那是怎么分區的呢?柱?是分區的最?單位,利?參考柱?號碼的?式來進?分區,其本質就是設置每個區的起始柱?和結束柱?號碼。 此時可以將硬盤上的柱?(分區)進?平鋪,將其想象成?個?的平?

2.3?inode

?件=數據+屬性 ,使? ls -l 的時候看到的除了看到?件名,還能看到?件元數據(屬性)。

每?包含7列:
模式
硬鏈接數
?件所有者
??
最后修改時間
?件名
stat命令能夠看到更多信息
對于?件數據它都儲存在”塊”中,這種儲存?件屬性信息的區域就叫做inode,每?個?件都有對應的inode,??包含了與該?件有關的?些信息。
注意:
Linux下?件的存儲是屬性和內容分離存儲的
Linux下,保存?件屬性的集合叫做inode,?個?件
?件名屬性并未納?到inode數據結構內部
inode的???般是128字節或者256
任何?件的內容??可以不同,但是屬性???定是相同的

3.ext2 ?件系統

3.1?宏觀認識

想要在硬盤上儲?件,必須先把硬盤格式化為某種格式的?件系統,才能存儲?件。?件系統的?的就是組織和管理硬盤中的?件。在Linux 系統中,最常?的是 ext2 系列的?件系統。其早期版本為 ext2,后來?發展出 ext3 和 ext4。ext3 和 ext4 雖然對 ext2 進?了增強,但是其核?設計并沒有發?變化,這里仍是以較?的 ext2 作為演?對象。
ext2?件系統將整個分區劃分成若?個同樣??的塊組 (Block Group),如下圖所?。只要能管理?個分區就能管理所有分區,也就能管理所有磁盤?件。
上圖中啟動塊(Boot Block/Sector)的??是確定的,為1KB,由PC標準規定,?來存儲磁盤分區信息和啟動信息,任何?件系統都不能修改啟動塊。啟動塊之后才是ext2?件系統的開始。

3.2?Block Group

ext2?件系統會根據分區的??劃分為數個Block Group。?每個Block Group都有著相同的結構組成

3.3塊組內部構成

3.3.1?超級塊(Super Block)

存放?件系統本?的結構信息,描述整個分區的?件系統信息。記錄的信息主要有:bolck 和 inode的總量,未使?的block和inode的數量,?個block和inode的??,最近?次掛載的時間,最近?次寫?數據的時間,最近?次檢驗磁盤的時間等其他?件系統的相關信息。Super Block的信息被破壞,可以說整個?件系統結構就被破壞了
超級塊在每個塊組的開頭都有?份拷?(第?個塊組必須有,后?的塊組可以沒有)。 為了保證?件系統在磁盤部分扇區出現物理問題的情況下還能正常?作,就必須保證?件系統的super block信息在這種情況下也能正常訪問。所以?個?件系統的super block會在多個block group中進?備份,這些super block區域的數據保持?致

3.3.2?GDT(Group Descriptor Table)

塊組描述符表,描述塊組屬性信息,整個分區分成多個塊組就對應有多少個塊組描述符。每個塊組描述符存儲?個塊組的描述信息,如:在這個塊組中從哪?開始是inode Table,從哪?開始是Data Blocks,空閑的inode和數據塊還有多少個等等。塊組描述符在每個塊組的開頭都有?份拷?。

3.3.3?塊位圖(Block Bitmap)

Block Bitmap中記錄著Data Block中哪個數據塊已經被占?,哪個數據塊沒有被占?
利用比特位記錄

3.3.4?inode位圖(Inode Bitmap)

表??個inode是否空閑可?。

利用比特位記錄

3.3.5?i節點表(Inode Table)

存放?件屬性 如 ?件??,所有者,最近修改時間等
當前分組所有Inode屬性的集合
inode編號以分區為單位,整體劃分,不可跨分區,可以跨組

3.3.6?Data Block

數據區:存放?件內容,也就是?個?個的Block。根據不同的?件類型有以下?種情況:

對于普通?件,?件的數據存儲在數據塊中。
對于?錄,該?錄下的所有?件名和?錄名存儲在所在?錄的數據塊中,除了?件名外,ls -l命令看到的其它信息保存在該?件的inode中。
Block 號按照分區劃分,不可跨分區

3.4?inode和datablock映射

inode內部存在
__le32 i_block[EXT2_N_BLOCKS];
/* Pointers to blocks */ ,
EXT2_N_BLOCKS =15
就是?來進?inode和block映射的
這樣?件=內容+屬性,就都能找到了

分區之后的格式化操作,就是對分區進?分組,在每個分組中寫?SB、GDT、Block Bitmap、Inode Bitmap等管理信息,這些管理信息統稱: ?件系統
只要知道?件的inode號,就能在指定分區中確定是哪?個分組,進?在哪?個分組確定是哪?個inode
拿到inode?件屬性和內容就全部都有了
創建?個新?件主要有以下4個操作:
1. 存儲屬性
內核先找到?個空閑的i節點(這?是263466)。內核把?件信息記錄到其中。
2. 存儲數據
該?件需要存儲在三個磁盤塊,內核找到了三個空閑塊:300,500,800。將內核緩沖區的第?塊數據復制到300,下?塊復制到500,以此類推。
3. 記錄分配情況
?件內容按順序300,500,800存放。內核在inode上的磁盤分布區記錄了上述塊列表。
4. 添加?件名到?錄
新的?件名abc。內核將??(263466,abc)添加到?錄?件。?件名和inode之間的對應關系將?件名和?件的內容及屬性連接起來。

3.5??錄與?件名

對于目錄也有inode和數據內容,它的保存方式和文件一樣,對于文件名保存在所屬目錄的數據內容中
在Linux中用戶訪問?件,為什么可以通過?件名來訪問對應文件?
訪問?件,必須打開當前?錄,根據?件名,獲得對應的inode號,然后進??件訪問 ,所以,訪問?件必須要知道當前?作?錄,本質是必須能打開當前?作?錄?件,查看?錄?件的內容!

3.6?路徑解析

打開當前?作?錄?件,查看當前?作?錄?件的內容?當前?作?錄不也是?件嗎?訪問當前?作?錄不也是只知道當前?作?錄的?件名嗎?要訪問它,不也得知道當前?作?錄的inode
嗎?
所以類似"遞歸",需要把路徑中所有的?錄全部解析,出?是"/"根?錄。
?實際上,任何?件,都有路徑,訪問?標?件,?如:
/home/Azusa/code/test/test/test.c
都要從根?錄開始,依次打開每?個?錄,根據?錄名,依次訪問每個?錄下指定的?錄,直到訪問 到test.c。這個過程叫做Linux路徑解析。
注意:
訪問?件必須要有?錄+?件名=路徑的原因
根?錄固定?件名,inode號,?需查找,系統開機之后就必須知道

路徑誰提供?

訪問?件,都是指令/?具訪問,本質是進程訪問,進程有CWD!進程提供路徑。
open?件,提供了路徑?

可是最開始的路徑從哪?來??

本質就是在磁盤?件系統中,新建?錄?件。?新建的任何?件,都在系統指定的?錄下新建,此時就有路徑了
系統+??共同構建Linux路徑結構.

3.7?路徑緩存

對于一個文件,每次訪問都要進行路徑解析,而這樣效率很低,因此Linux中OS在進行路徑解析的時候會把歷史訪問的所有目錄形成一顆多叉樹保存,而這個結構struct dentry
注意:
每個?件其實都要有對應的dentry結構,包括普通?件。這樣所有被打開的?件,就可以在內存中形成整個樹形結構
整個樹形節點也同時會?屬于LRU(Least Recently Used,最近最少使?)結構中,進?節點淘汰
整個樹形節點也同時會?屬于Hash,?便快速查找
更重要的是,這個樹形結構,整體構成了Linux的路徑緩存結構,打開訪問任何?件,都在先在這棵樹下根據路徑進?查找,找到就返回屬性inode和內容,沒找到就從磁盤加載路徑,添加dentry結構,緩存新路徑

3.8?掛載分區

在上文能夠根據inode號在指定分區找?件了,也已經能根據?錄?件內容,找指定的inode了,怎么找到自己所在的分區?

此時就需要一個特定的目錄來進行關聯,而這個目錄就是就需要掛載才能使用

怎么利用Linux進行掛載這里就不做敘述

3.9 總結圖

4.軟硬連接

4.1 硬鏈接

在上文了解到真正找到磁盤上?件的并不是?件名,?是inode。其實在linux中可以讓多個?件名對應于同?個inode。
這兩個鏈接狀態完全相同,他們被稱為指向?件的硬鏈接。內核記錄了這個連接數,inode
789401的硬連接數為2。
刪除?件時?了兩件事情:1.在?錄中將對應的記錄刪除,2.將硬連接數-1,如果為0,則
將對應的磁盤釋放。
硬鏈接本質不是一個獨立的文件,因為沒有獨立的inode,其實就是一組新的文件名和目標inode number映射關系,主要的作用就是用來對文件進行備份
目錄下這兩個隱藏文件.和.. 是硬鏈接

4.2 軟鏈接

硬鏈接是通過inode引?另外?個?件,軟鏈接是通過名字引?另外?個?件,但實際上,新的?件和被引?的?件的inode不同,應?常?上可以想象成?個快捷?式

4.3?軟硬連接對?及用途

軟連接是獨??件
硬鏈接只是?件名和?標?件inode的映射關系
?途:
硬鏈接:?件備份
軟連接:類似快捷?式

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93001.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93001.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93001.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Mac如何安裝telnet命令

Mac如何安裝telnet命令_mac telnet-CSDN博客

【SpringBoot】持久層 sql 注入問題

目錄 概述 #{} 與 ${} 概述 前端惡意傳參,改變后端 sql 語句的語法結構,從而使后端給前端返回一些私密的數據。這種安全問題往往是因為沒有嚴格過濾參數,或者后端代碼不嚴謹導致的。 #{} 與 ${} 在 MyBatis 框架中,#{} 與 ${} 都…

怎么寫好漢語言文學專業的論文?

磨刀不誤砍柴功, 前期多看文章和文獻,吸取寫作經驗,寫作過程會更加順利噢!看到最后,相信你能得到收獲! 寫漢語言專業論文并不難,從選題、資料準備、框架搭建、正文寫作、修改定稿五個核心環節展…

MySQL User表入門教程

一、User表概述 MySQL的user表位于mysql系統數據庫中,是MySQL權限系統的核心,用于存儲用戶賬戶信息、認證方式和全局權限。通過操作此表,可實現用戶創建、權限分配及安全審計。 二、User表核心字段解析字段名作用示例值Host用戶允許連接的主機…

[NPUCTF2020]這是什么覓

題目是一個文件,我們先以記事本打開一下,開頭就是PK,基本可以確定這是一個 ZIP 格式的壓縮包?,不確定可以用winhex打開:?50 4B 03 04開頭則 100% 是 ZIP 文件。改一下后綴之后解壓得到一張圖片上面是日期&#xff0c…

每日任務day0812:小小勇者成長記之擠牛奶

清晨,薄霧還繚繞在草地上,小小勇者背著編織籃子來到農場。奶牛們低頭咀嚼,尾巴輕輕拍打著蒼白的露珠。老人微笑著遞給他一只溫熱的牛奶罐,說:“第一次要慢,別驚擾它們。”勇者學著老人彎下身,溫…

IIS 多用戶環境中判斷服務器是否為開發用電腦,數據狀態比較

如果只需要在 IIS 多用戶環境中判斷服務器是否為開發用電腦(一個固定狀態,通常不會動態切換),代碼可以進一步簡化。這種場景下,狀態一般是啟動時確定的(如通過配置文件或環境變量),后…

P2865 [USACO06NOV] Roadblocks G

思路:嚴格次短路,在任何情況下如果發現一條從1到i的路,都有以下情況:1.該路徑小于當前1到i的最短路,將最短路替換2.該路徑長度等于當前最短路,舍去3.該路徑大于最短路且小于次短路,將此路徑替換…

基于Hadoop的汽車價格預測分析及評論情感分析可視化系統

文章目錄有需要本項目的代碼或文檔以及全部資源,或者部署調試可以私信博主一、項目背景二、項目目標三、系統架構四、功能模塊五、創新點六、應用價值與前景每文一語有需要本項目的代碼或文檔以及全部資源,或者部署調試可以私信博主 一、項目背景 近年…

gpt-5與gpt-5-fast

簡單來說: GPT-5 → 追求最高質量的推理,輸出會更細致、更準確,尤其適合需要深度思考、長鏈推理、嚴謹分析的任務(比如復雜代碼調試、長文檔推理、系統設計)。速度相對慢一些。GPT-5-fast → 追求更高的響應速度&#…

Mybatis源碼解讀-SqlSession 會話源碼和Executor SQL操作執行器源碼

相關流程圖整理元數據簡略圖執行流程圖一級緩存、二級緩存設計與查詢流程分析圖一級緩存設計-類圖一級緩存工作流程圖二級緩存設計-類圖二級緩存工作流程圖元數據簡略圖 執行流程圖 一級緩存、二級緩存設計與查詢流程分析圖 一級緩存設計-類圖 一級緩存工作流程圖 二級緩存設計…

使用Excel制作甘特圖

最終效果:專業的項目管理團隊通常會使用project制作甘特圖,但是很多人沒接觸過這個軟件,另外project制作的甘特圖并不適合放在PPT中展示。由于Excel圖表的數據標簽無法準確識別月初和月末,如果使用原始數據直接做的效果是這樣的&a…

超詳細基于stm32hal庫的esp8266WiFi模塊驅動程序(可直接移植)

目錄 前言: 1 前期準備 1.1 了解mqtt通信協議 1.1.1核心組件 1.2 ESP8266固件燒錄 1.3 啟動EMQX服務器 1.3.1大概了解emqx的使用 2 驅動代碼講解應用 2.1 硬件接線 2.2 AT指令 2.3 驅動代碼 2.4 效果展示 前言: esp8266支持mqtt通信協議&…

redis認識緩存擊穿

緩存擊穿是指 一個非常熱點的數據(被高并發訪問)在緩存中過期失效的瞬間,導致大量并發請求同時穿透緩存,直接落到底層數據庫,造成數據庫瞬間壓力劇增甚至崩潰的現象。關鍵特征和你的描述解析“數據庫沒有就需要命中的數…

TF-IDF——紅樓夢案例

目錄 用 TF-IDF 挖掘《紅樓夢》各回目核心關鍵詞:一個 NLP 實踐案例 一、案例背景與目標 二、實現步驟 步驟 1:數據準備與分卷處理 1. 導入模塊與創建目錄 2. 打開源文件并初始化變量 3. 逐行處理文本內容 4. 寫入卷內容并過濾前兩行 5. 關閉最后…

【軟考中級網絡工程師】知識點之 IP QoS 技術

目錄一、IP QoS 技術是什么1.1 定義與概念1.2 重要性和應用場景二、IP QoS 技術原理2.1 流量分類與標記2.2 流量整形與限速2.3 擁塞避免與管理2.4 資源預留協議(RSVP)三、IP QoS技術模型3.1 盡力而為服務模型3.2 綜合服務模型(IntServ&#x…

Git 常用命令速查表

一、倉庫初始化與克隆命令說明git init在當前目錄初始化本地倉庫git clone <遠程倉庫地址>克隆遠程倉庫到本地&#xff08;例&#xff1a;git clone https://github.com/user/repo.git&#xff09;二、文件狀態與提交命令說明git status查看工作區 / 暫存區文件狀態git a…

第五十四章:AI模型的“壓縮大師”:GPTQ、AWQ與bitsandbytes實戰量化

AI模型壓縮前言&#xff1a;讓訓練好的AI模型“輕裝上陣”第一章&#xff1a;回顧與挑戰&#xff1a;訓練后量化&#xff08;PTQ&#xff09;的必要性1.1 量化原理與精度類型回顧&#xff1a;FP32到INT4/INT81.2 PTQ&#xff08;Post-Training Quantization&#xff09;&#x…

在Word和WPS文字一頁中實現一欄與多欄混排

在Word和WPS文字的一頁中如何實現分欄和不分欄的內容混排&#xff1f;只需要使用分欄功能。把光標放在要分欄的位置&#xff0c;插入分欄即可&#xff0c;最關鍵的點是分欄應用于“插入點之后”。如果不需要分欄&#xff0c;則欄數選擇為1即可。一、Word和WPS文字的分欄設置路徑…

Python調用C/C++函數庫的多種方法與實踐指南

Python作為一門高級編程語言&#xff0c;以其簡潔的語法和豐富的庫生態贏得了開發者的青睞。然而&#xff0c;在計算密集型任務中&#xff0c;Python的性能往往無法滿足要求。Python調用C/C函數庫成為提升應用性能的關鍵技術路徑&#xff0c;通過將底層計算邏輯用C/C實現&#…