Linux知識回顧總結----文件系統

? ? ? ? 上章講的是 os 如果管理被打開的文件,那么沒有被打開的文件(也就是在磁盤單中的文件)使用文件系統進行管理。了解完這一章,我們就可以理解我們如果想要打開一個文件的是如何找到整個文件,然后如何把它加載到內存中的,在這之前我們還會進行學習磁盤的物理結構,CHS和LBA地址,理解磁盤是如何進行分區的以及軟硬連接的使用和途徑!!!

目錄

一、?理解磁盤的結構

? ?1.1 見一見

1.2 磁盤的名詞?

1.3 磁盤邏輯結構

1.4 磁盤定位

? 1.5?CHS && LBA地址

二、 文件系統

?2.1 “塊” 的概念

2.2 分區

2.3?inode

三、Ext2 文件系統

?3.1 是什么

?3.2 有什么

3.3 與實際相關聯

? 3.3.1 目錄與文件名

? 3.3.2 路徑解析 與 路徑緩存

?3.3.3 掛載

四、軟、硬鏈接

4.1 軟鏈接

? 4.1.1 是什么

? ?4.1.2 怎么用

4.2 硬鏈接

?4.2.1 是什么

?4.2.2 怎么用

五、總結


一、?理解磁盤的結構

? ?1.1 見一見

? ? ?可以看到這個磁盤面非常的光滑,可以認為這個這個光滑的此面是許多的磁性物質組? 成,里面存放著我們的數據,然后還有一個磁頭,通過磁頭的指向,指向特定的區域然后得到想 要的文件

1.2 磁盤的名詞?

? 主要的名詞需要記住的有:磁頭,磁道,磁面,柱面,扇區。

? ? 磁道:在磁盤上面可以分成一圈一圈的。雖然你肉眼看到的是一個光滑的平面,但是要是拿一個顯微鏡看的話也可以看到是一圈一圈的

? ? 柱面:一塊磁盤當我們從側面看的時候是由許多片共同構成的所以,由磁道 + 多個磁面構成的結構立體圖形就是柱面。

? ? 磁頭:用來進行定位的。每個盤??般有上下兩?,分別對應1個磁頭,共2個磁頭

? ? 扇區:由磁頭位置到一定長度的磁道位置組成的一個扇形(注意:里面由磁道組成的扇形由遠到近,雖然大小不是相同的但是我們規定并且認為不論大小都是相同的)

? ? 磁面:就是我們肉眼可以看到的那個區域。

? ? 補充:扇區是磁盤進行文件儲存的一個基本單位,512字節,是一個塊設備。

? ? ? ? ? ? ? ? 磁盤容量 = 磁頭數 *?磁道數 * 每道扇區數 * 每扇區字節數。

? ? ? ? ? ? ? ? 控制磁頭的傳送臂式共進退的。

1.3 磁盤邏輯結構

? ? ? ? 前面理解了磁盤的物理結構,他是啥樣的就是啥樣的,但是我可以把它抽象成邏輯結構的方式來進行深入的理解,同時理解我們的文件系統它到底是如何進行工作的。

? ? ? ? 小時侯我們都玩過錄音帶,我們可以看到它的結構是一圈一圈的是不是非常的像我們的磁盤,當我們把他的纏成一圈一圈的磁帶將它展開,是不是就是一條長長的線,那我們就可以將它抽象為一個數組,所有我們的磁盤也可以簡單的理解成是要給一維數組的方式進行存放數據的,也有的相應的邏輯尋址方式。

? ? ? ? 在實際過程當中,因為我們的磁頭是共進退的,所有當我以柱面的方式來看待磁盤的時候可以發現是由二維的數組形式來實現的。

1.4 磁盤定位

? ? ? ? 當我們需要尋找要給扇區的時候,先找到哪?個柱?(Cylinder) ,在確定柱?內哪?個磁道(其實就是磁頭位置,Head),在確定扇區(Sector),所以就有了 CHS 。

? ? ? ? 因為我們是將磁盤的邏輯結構看為是一個線性數組,所以每一個扇區都有一地址叫做 LBA(Logical Block Address).

OS只需要使?LBA就可以了!!LBA地址轉成CHS地址,CHS如何轉換成為LBA地址。誰做啊??磁盤??來做!固件(硬件電路,伺服系統)

? 1.5?CHS && LBA地址

  • CHS 變 LBA

? ? ? ? 扇區數 = 磁頭數 * 每磁道扇區的數量

????????LBA = 柱面號C * 單個柱面的扇區總數 + 磁頭號H*每磁道扇區數 + 扇區號S - 1
(扇區號通常是從1開始的,?在LBA中,地址是從0開始的、柱?和磁道都是從0開始編號的)

一句話:我是第二個柱面就要加上前面一個柱面的所有扇區的數量,以及我是第幾個磁頭就要算上我是前面的 n - 1 個磁頭對應的扇區的數量,最后在加上我前面的扇區數,以為是從 1 開始而數組的下標是從 0 開始的,所有要 - 1,而柱?和磁道都是從0開始編號的剛好可以計算。

  • LAB 變 CHS

?????????柱?號C = LBA // (磁頭數*每磁道扇區數)【就是單個柱?的扇區總數】

????????磁頭號H = (LBA % (磁頭數*每磁道扇區數)) // 每磁道扇區數

????????扇區號S = (LBA % 每磁道扇區數) + 1

???????? "//": 表?除取整

? ? ? ? 其實這個轉化的內容我們不需要特別熟練,我們需要知道的是磁盤就是一個數組,而數組的下標就是 LBA 地址, os 通過 LBA 這個數組就可以訪問磁盤當中的扇區,就可以方式存放在磁盤當中的內容。

二、 文件系統

?2.1 “塊” 的概念

? ? ? 磁盤是一個典型的“塊”設備,可以隨機讀取。并且 os 是以塊為一單位進行讀取文件,提高os 的效率,我們最常見的塊是 4 kb,即連續?個扇區組成?個 ”塊”!

? ? ? ? 這么做的目的就是為了提高 os 讀取文件的效率。計算方法為 LBA / 8 就是哪個塊區。

2.2 分區

? ? ? ? 磁盤是可以被分成多個分區(partition)的,以Windows觀點來看,你可能會有?塊磁盤并且將它分區成C,D,E盤。那個C,D,E就是分區。分區從實質上說就是對硬盤的?種格式化。

? ? ? ? 在 Linux 是柱?是分區的最?單位,我們可以利?參考柱?號碼的?式來進?分區,其本質就是設置每個區的起始柱?和結束柱?號碼。

? ? ? ? 這樣做的目的在于,我們管理好一個 500G 的空間,與分區管理好100G 的磁盤空間是一樣的,同時這樣的難度也大大降低,所以這就是分區!

? ? ? ? 100G 的磁盤空間進行管理的還有有點困難,所以我們還需要進行分組,在進一步進行細分。還需要了解的是我們的 LIiux 對于文件的內容與屬性是進行分開存放的。

2.3?inode

? ? ? ? 前面我們提到了文件的內容與屬性是分開的。我們使用 inode 用來表示 一個文件所有的屬性。使用 stat 可以查看,在 Linux 是一個結構體。還有一個非常重要的概念就是每一個 inode 為了標識它和他的文件,回一個 inode_num 編號的方式存放在 inode 的這個屬性里面。使用 -li 可以顯示。

????????值得注意的是我們的 inode??并沒有包括文件名,這個原因我將會會在后面進行講解。

三、Ext2 文件系統

?3.1 是什么

? ? ? ? 前面我們提到了,使用分區的方式進行管理磁盤,那么分區就是文件系統的載體.只有經過分區,同時在分區的基礎上再添加上文件系統,那么我們的文件才可以被真正的使用。

????????其早期版本為 ext2,后來?發展出 ext3 和 ext4。ext3 和 ext4 雖然對 ext2 進行了增強,但是其核心設計并沒有發?變化,我們仍是以較老的 ext2 作為演示對象。

? ? ? ? 我一開也不是特別理解下面的那個圖片是什么意思我簡單的描述一下:1. 每個 partition 都是一個分區,再下面一層就是分組看,比方說我的分區大小為 300GB,那么分成 10 組,每個就是 30 GB,所以 File System 就是管理的分組。

?3.2 有什么

? ? ? ? 接下來的專有名詞的描述我將使用我的語言,我的理解進行解釋,如果想要了解,完整官方的解釋可以自行查找。

  • ?Super Block

? ? ? ? 超級塊:進行存放一整個分區的相關信息,在每一個分組里面都具有這個 super,這是因為為了備份,如果丟失的話就代表著整個文件無法使用。

  • GDT

? ? ? ? 塊組描述符表:塊組塊組描述的是分區之后的組里面是有好多的4kb的塊形成的這個組,所以叫做塊組。描述符表就是表示后面的其他分分組的開始位置以及 inode 使用情況以及數據塊的使用情況的表。是用來管理整個分組的一個區域。

  • Block Bitmap

? ? ? ? 表示數據區的使用情況的位圖,表示那些是已經被使用,那些沒有被使用。如果想要刪除一個文件的話,直接由 1 - 0 即可。

  • inode Bitmap

? ? ? ? 表示 inode 使用的情況。

  • inode Table

? ? ? ? 存放文件的屬性的地方(這里解釋一下為什么使用一個相同的 inode :因為雖然文件的屬性具體的內容不相同,但是都具有這些類型,單個 inode 的大小為 128 字節,但是當內存進行加載的時候會加載 4 kb 的內容,所有只要是符合這個范圍的都可以加載到磁盤上)

  • Data Blocks

? ? ? ? 存放文件的內容的地方。

? ? ? ? 還有需要注意的小點為:1. inode 和 數據塊跨組編號,不能分區,同時也是唯一的標識不會進行重復。2. 對于不同的 inode 采用 bit 的時候可能很大不用擔心無法存放的問題,因為可以%的方法進行存放。

3.3 與實際相關聯

? 3.3.1 目錄與文件名

? ? ? ? 前面我們了解到了,我們可以根據 inode 編號找到對應的 inode 結構;再根據 inode 中的數據塊指針,最終定位到磁盤上實際存放文件內容的 LBA 地址。前面這句話可能有點難以理解,簡單說就是文系統把“物理位置”的復雜性封裝起來,你通常只通過 inode 或路徑就能訪問文件;那么目錄是一個什么鬼?我們說的都是文件,目錄是個什么東西?以及我們使用的都是文件名,也沒有使用 inode 編碼呀!

? ? ? ? 一說 inode 編號其實就可以聯想到是不是目錄里面存放的就是 inode 編號。沒錯:目錄就是一個文件,當進入一個目錄(工作目錄)的時候,就是打開了目錄這個文件的相關內容,然后根據文件名 與 inode 的映射關系,打開文件。 Linux 系統下一切皆文件。

? 3.3.2 路徑解析 與 路徑緩存

????????/home/djx/code/test/test/test.c 我們的 os 會解析這個路徑從/也就是根目錄下開始進行解析。知道找到了這個文件的 inode 編號,然后文件系統就回去對應的位置去查找相關的信息。這就就叫做路徑的解析。

? ? ? ? 明白了這個也就理解了,我們為什么需要路徑 + 文件名 才可以打開這個文件了!????????

? ? ? ? 然而每一次我們的 os 都會從頭開始進行尋找嗎?不是的, os 會有一個 dentry 結構樹,進行路徑的緩存,如果是第一次打開在遍歷完這個樹之后沒有找到相應的文件就會加載,但是如果是之前已經打開過的就不需要進行重新加載,直接在這個樹結構當中尋找即可!這就是路徑的緩存!是一個內存級的概念!

? ? ? ? 這個路徑緩存在 Linux 內核當中是叫做 dentry 樹的一個結構。在這個 dentry 當中還有 hash 與 LRU 淘汰的算法。

?3.3.3 掛載

? ? ? 一個問題在于我們的分區是相互獨立的,不同的分區可能會具有不同的文件系統!那么操作系統是如何知道我的 inode 到底是哪個分區呢?

? ? ? ? 這就是磁盤掛載的功能:即我們的文件路徑的前綴會跟分區建立映射關系,知道前面的路徑是啥,就可以知道到底是掛在到什么區域之中!

? ? ? ? 這樣的一張圖就表示了打開一個文件的全過程:首先是一個進程創建一個 pcb 結構體,然后一個結構 fs 保存 root 與 pwd 的相關的系統信息, file_struct?文件結構體有 file 結構這個里面保存著路徑結構體這個路徑結構體有 dentry ,看看這個 dentry 有沒有加載過這個文件,具體過程看前面緩存功能,根據dentry 就可以是inode 是哪個分區,哪個分組的,知道了 inode 的相關屬性,也就是想要打開文件的屬性,那么我們就可以將文件拿出來加載到內存中進行使用。

四、軟、硬鏈接

4.1 軟鏈接

? 4.1.1 是什么

? ? ?就是創建一個快捷方式。

? ?4.1.2 怎么用

ln -s abc.s abc

? ? ? ? 就建立了 abc.s 指向 abc 的軟連接,這個連接是一個全新的文件,具有全新的 inode 編號。?

4.2 硬鏈接

?4.2.1 是什么

? ? ? ? 對一個文件的備份。只能對于普通文件進行備份,不能對目錄文件做備份,因為防止 os 進行路徑加載的時候形成循環。

? ? ? ? . 與 .. 就是硬鏈接,以及還有硬連接數,只有這個數字變成 0 的時候這個文件才正真的被刪除。?

?4.2.2 怎么用

ln abc def

? ? ? ? 建立一個與 abc 相同的 def 文件進行了備份。

五、總結

????????以上是對于文件系統的回顧。這個文章用于我的學習記錄,如果是有其他的錯誤還請批評指正。如果對你有幫助還請給我點個贊👍👍👍。?????

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

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

相關文章

iOS藍牙使用及深入剖析高頻高負載傳輸丟包解決方案(附源碼)

最近開發了一套iOS原生的藍牙SDK,總結了一些有價值的踩過的坑,分享出來給有需要的同學做個參考。 一、藍牙的使用 iOS有一套封裝好的完善的藍牙API ,可以很便捷的實現與藍牙的連接和通信,藍牙通信的大體流程如下,先對基…

Python 正則表達式實戰:用 Match 對象輕松解析拼接數據流

摘要 這篇文章圍繞 Python 的正則表達式 Match 對象(特別是 endpos、lastindex、lastgroup 以及 group / groups 等方法/屬性)做一個從淺入深、貼近日常開發場景的講解。我們會給出一個真實又常見的使用場景:解析由設備/服務發來的“拼接式”…

基于Pygame的六邊形戰術推演系統深度剖析——從數據結構到3D渲染的完整實現(附完整代碼)

1. 項目概述與技術選型 戰術推演系統是軍事訓練和游戲開發中的重要組成部分,它能夠模擬真實的戰術場景,為用戶提供策略思考的平臺。本文將深入分析一套基于Python Pygame框架開發的城市巷戰戰術推演系統,該系統采用六邊形網格布局,實現了恐怖分子與反恐精英的對抗模擬,具…

支持二次開發的代練App源碼:訂單管理、代練監控、安全護航功能齊全,一站式解決代練護航平臺源碼(PHP+ Uni-app)

一、技術架構:高性能與跨平臺的核心支撐前端框架Uni-app:基于Vue.js的跨平臺框架,支持編譯至微信小程序、H5、iOS/Android App及PC端,代碼復用率超80%,顯著降低開發成本。實時通信:集成WebSocket實現訂單狀…

AI熱點周報(8.31~9.6): Qwen3?Max?Preview上線、GLM-4.5提供一鍵遷移、Gemini for Home,AI風向何在?

名人說:博觀而約取,厚積而薄發。——蘇軾《稼說送張琥》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder😊) 目錄一、3分鐘速覽版:一張表看懂本周AI大事二、國內:模型與生態的…

異步操作終止2

您提的這個問題非常棒,說明您思考得非常深入!您完全正確,我之前的示例中使用的 return; 會中斷 handleDraw 函數中所有后續的邏輯,這在很多場景下并不是我們想要的。 我們的目標是只中斷畫圖這一個特定的邏輯,而讓函數…

《AI大模型應知應會100篇》第67篇 Web應用與大模型集成開發實踐——1小時打造國產大模型智能客服系統

第67篇:Web應用與大模型集成開發實踐——1小時打造國產大模型智能客服系統 一句話核心價值:無需翻墻!用Flask國產大模型API(通義/文心一言/訊飛)快速構建合規Web問答系統,電商客服人力成本直降70%&#xff…

python系列之綜合項目:智能個人任務管理系統

不為失敗找理由,只為成功找方法。所有的不甘,因為還心存夢想,所以在你放棄之前,好好拼一把,只怕心老,不怕路長。 python系列之文件操作:讓程序擁有"記憶"的超能力!一、項目…

鴻蒙UI開發實戰:解決布局錯亂與響應異常

文章目錄鴻蒙UI開發實戰指南:解決ArkUI聲明式布局錯亂、組件不顯示與事件響應異常引言ArkUI聲明式開發的技術優勢開發痛點與本文價值布局錯亂問題常見原因固定像素單位使用不當布局嵌套層級過深Flex布局屬性配置錯誤響應式布局缺失解決方案彈性單位適配:…

B.50.10.09-RPC核心原理與電商應用

RPC核心原理與電商應用實戰 第1章:RPC核心概念與價值 1.1. 什么是 RPC? RPC (Remote Procedure Call),即遠程過程調用,是一種允許一臺計算機(客戶端)上的程序,調用另一臺計算機(服務…

【完整源碼+數據集+部署教程】室內場景分割系統源碼和數據集:改進yolo11-DWR

背景意義 研究背景與意義 隨著智能家居和自動化技術的快速發展,室內場景理解在計算機視覺領域中變得愈發重要。室內場景分割不僅是計算機視覺的基礎任務之一,也是實現智能家居、機器人導航、增強現實等應用的關鍵技術。傳統的圖像分割方法在處理復雜的室…

python入門常用知識

一、創建和快捷鍵 創建項目: New project創建模版:項目&代碼的一種默認標記信息創建包(放代碼的地方-方便整理分類更清晰) --- python package創建文本文件(配置文件):File創建文件夾(測試數據、測試報告、測試截圖):Director…

原創未發表!POD-PINN本征正交分解結合物理信息神經網絡多變量回歸預測模型,Matlab實現

該代碼實現了一個基于POD降維與物理信息神經網絡(PINN)結合的回歸預測模型,用于從高維數據中提取關鍵特征并進行物理約束下的數據驅動預測。一、主要功能 數據降維:使用POD(Proper Orthogonal Decomposition&#xff0…

對接gemini-2.5-flash-image-preview教程

對接gemini-2.5-flash-image-preview教程 一、前置準備 1. 明確模型要求 本次對接的gemini-2.5-flash-image-preview模型,繼承Gemini系列多模態特性,支持文本生成圖片、文本結合圖片編輯等功能。需注意該模型不支持僅輸出圖片,必須配置["…

如何制造一個AI Agent:從“人工智障”到“人工智能”的奇幻漂流

開篇:什么是AI Agent?它和我的“人工智障”音箱有啥區別?🎤朋友們,先想象一下:你的智能音箱 🗣? -> 🤖 -> ?:“Hey Siri,幫我訂一份披薩,…

別錯過!一杯奶茶錢開啟企業微信 Power BI 之旅

隨著微軟的Power BI在數據分析和商業智能領域的廣泛應用,人們對于Power BI使用的便捷性和高效性提出了更高的要求。 為了滿足這些需求,PBI Plus應運而生,它巧妙地將即時通訊軟件的強大功能與Power BI的分析能力相結合。接下來,我們…

MotionSound-簡單易用的文本轉語音工具

本文轉載自:MotionSound-簡單易用的文本轉語音工具 - Hello123工具導航 ** 一、🎯 MotionSound:一鍵讓文字 “開口說話” 的 AI 配音神器 做視頻沒時間配音?PPT 演示想加逼真語音?試試MotionSound吧!它是…

Zynq設備與電腦相連方式

一、Zynq設備通過串口與電腦直接相連 “Zynq設備通過串口與電腦直接相連”是開發和調試Zynq系列SOC(如Zynq-7000或Zynq UltraScale+ MPSoC)時最基礎、最重要的步驟。這個串口連接主要用于: 系統啟動信息輸出:查看Uboot、Linux內核的啟動過程。 系統調試:輸出調試信息(p…

python 邏輯運算練習題

圖書館入館條件檢查題目描述 編寫程序判斷一個人是否能進入圖書館。圖書館有以下入館規則:年齡大于等于 18 歲,或者有家長陪同(無論年齡)輸入示例圖書館入館檢查 請輸入你的年齡:18 是否有家長陪同?(是/否)…

《Java Stream 流從入門到精通:一行代碼搞定集合操作,效率提升 10 倍》

封面圖上流動的「Stream」字樣,正是 Java 8 以來最革命性的特性之一!你是否還在寫冗長的 for 循環遍歷集合?是否為過濾、排序、聚合數據寫一堆重復代碼?Stream 流的出現,以聲明式編程風格將復雜的集合操作濃縮為一行代…