Linux-----文件系統

文件大家都知道,前面的我的博客課程也為大家解釋了關于文件的打開等,今天我們要談論的是

文件在沒被打開的時候在磁盤中的位置和找到它的方式。

畫圖為大家展示:

方便理解 我們從下面幾個方面入手:

1. 看看物理磁盤

2. 了解一下磁盤的物理結構

3. 對磁盤的存儲進行邏輯抽象

4. 引入文件系統----如何管理磁盤文件的

5. iNode 和 軟硬鏈接

我們先從第一個開始

1. 看看物理磁盤

在了解磁盤之前給大家強調一下:計算機只認識二進制

磁盤長相和基本常識:

?這就是簡單磁盤的物理結構的相關知識。

我們接著往下走

2. 了解一下磁盤的物理結構

上面就是磁盤的一些存儲知識

有了上述知識做鋪墊,那么我們該如何找到(定位)指定的扇區去找到我們想要的內容呢?

有下面三個步驟:? ? ?a.? 找到指定的磁頭

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? b.? 找到指定的磁面

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? c.? 找到指定的扇區

這里涉及到一個知識:CHS定址法

CHS定址法?(Cylinder-Head-Sector)是一種用于確定磁盤上每個扇區位置的方法。它通過三個參數來標識磁盤上的每個扇區:?柱面號?(Cylinder)、?磁頭號?(Head)和?扇區號?(Sector)?1 2。

CHS定址法的具體參數

  1. ?柱面號(Cylinder)?:表示磁盤上的一個圓柱體,即多個盤面共享的同一磁道集合。柱面號是磁盤結構的一部分,范圍通常從0開始?1 3。
  2. ?磁頭號(Head)?:表示磁盤上的一個盤面,每個盤面都有一個對應的磁頭。磁頭號是用于確定數據存儲在哪一個盤面上,范圍取決于盤片的數量?1 3。
  3. ?扇區號(Sector)?:表示磁道上的一個扇區,是磁盤讀寫的基本單位。扇區號是從1開始的編號,表示具體是哪個扇區?1 3。

CHS定址法的工作原理

CHS定址法通過確定文件所在的盤面、磁道和扇區來定位文件的具體位置。具體步驟如下:

  1. ?確定盤面?:首先確定數據存儲在哪一個盤面上,即確定磁頭號。
  2. ?確定磁道?:在確定的盤面上,找到數據所在的磁道,即柱面號。
  3. ?確定扇區?:最后確定該磁道上的具體扇區,即扇區號?1 2。

CHS定址法的應用場景

CHS定址法主要用于傳統的硬盤驅動器(HDD)中,通過這種定位方式,系統可以準確地找到并訪問存儲在硬盤上的數據。隨著固態硬盤(SSD)的普及,CHS定址法逐漸被LBA(Logical Block Addressing)所取代,但仍然在部分老式系統中使用?2。

上面的知識大家了解即可、

通過上面的知識我們就可以知道兩個問題的答案:

1.磁盤中的盤片為什么要旋轉?

答案: 用來定位扇區

2.磁頭為什么要左右擺動?

答案:用來定位軌道

3. 對磁盤的存儲進行邏輯抽象

我們以操作系統的視角對磁盤這樣的設備進行管理和抽象

再給大家講解一下分區的定義,就是將磁盤分成很多的區,來進行管理,

我們拿出其中一個分區來為大家進行抽象講解:?

?大家可以看看,還有的由于里面的內容有點多,在外面給大家解釋:

Block Group ext2 文件系統會根據分區的大小劃分為數個 Block Group 。而每個 Block Group 都有著相 同的結構組成。政府管理各區的例子
超級塊( Super Block ):存放文件系統本身的結構信息。記錄的信息主要有: bolck inode 的總量, 未使用的block inode 的數量,一個 block inode 的大小,最近一次掛載的時間,最近一次寫入數據的 時間,最近一次檢驗磁盤的時間等其他文件系統的相關信息。Super Block 的信息被破壞,可以說整個 文件系統結構就被破壞了
GDT Group Descriptor Table :塊組描述符,描述塊組屬性信息,有興趣的同學可以在了解一下
塊位圖( Block Bitmap ): Block Bitmap 中記錄著 Data Block 中哪個數據塊已經被占用,哪個數據塊沒 有被占用。
將屬性和數據分開存放的想法看起來很簡單,但實際上是如何工作的呢?我們通過 touch 一個新文件來看看如何工 作。
[root@localhost linux]# touch abc
[root@localhost linux]# ls -i abc
263466 abc
為了說明問題,我們將上圖簡化:
創建一個新文件主要有一下 4 個操作:
1. 存儲屬性
內核先找到一個空閑的 i 節點(這里是 263466 )。內核把文件信息記錄到其中。
2. 存儲數據
該文件需要存儲在三個磁盤塊,內核找到了三個空閑塊: 300,500 800 。將內核緩沖區的第一塊數據 復制到300 ,下一塊復制到 500 ,以此類推。
3. 記錄分配情況
文件內容按順序 300,500,800 存放。內核在 inode 上的磁盤分布區記錄了上述塊列表。
4. 添加文件名到目錄
新的文件名 abc linux 如何在當前的目錄中記錄這個文件?內核將入口( 263466 abc )添加到目錄文 件。文件名和inode 之間的對應關系將文件名和文件的內容及屬性連接起來。
理解硬鏈接
我們看到,真正找到磁盤上文件的并不是文件名,而是 inode 。 其實在 linux 中可以讓多個文件名對應于同一個
inode [root@localhost linux]# touch abc [root@localhost linux]# ln abc def [root@localhost linux]# ls -1i
abc def 263466 abc 263466 def
abc def 的鏈接狀態完全相同,他們被稱為指向文件的硬鏈接。內核記錄了這個連接數, inode
263466 的硬連接數為 2
我們在刪除文件時干了兩件事情: 1. 在目錄中將對應的記錄刪除, 2. 將硬連接數 -1 ,如果為 0 ,則將對應 的磁盤釋放。
軟鏈接
硬鏈接是通過 inode 引用另外一個文件,軟鏈接是通過名字引用另外一個文件,在 shell 中的做法
263563 -rw-r--r--. 2 root root 0 9月 15 17:45 abc
261678 lrwxrwxrwx. 1 root root 3 9月 15 17:53 abc.s -> abc
263563 -rw-r--r--. 2 root root 0 9月 15 17:45 def

acm
下面解釋一下文件的三個時間:
Access 最后訪問時間
Modify 文件內容最后修改時間
Change 屬性最后修改時間
以上就是今天 的博客
后續為大家更新 動靜態庫-
感謝你的觀看

?

?

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

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

相關文章

C++ set替換vector進行優化

文章目錄 demo代碼解釋&#xff1a; 底層原理1. 二叉搜索樹基礎2. 紅黑樹的特性3. std::set 基于紅黑樹的實現優勢4. 插入操作5. 刪除操作6. 查找操作 demo #include <iostream> #include <set>int main() {// 創建一個存儲整數的std::setstd::set<int> myS…

如何巧妙解決 Too many connections 報錯?

1. 背景 在日常的 MySQL 運維中&#xff0c;難免會出現參數設置不合理&#xff0c;導致 MySQL 在使用過程中出現各種各樣的問題。 今天&#xff0c;我們就來講解一下 MySQL 運維中一種常見的問題&#xff1a;最大連接數設置不合理&#xff0c;一旦到了業務高峰期就會出現連接…

QT的布局和彈簧及其代碼解讀

this指的是真正的當前正在顯示的窗口 main函數&#xff1a; Widget w是生成了一個主窗口&#xff0c;QT Designer是在這個主窗口里塞組件 w.show()用來展示這個主窗口 頭文件&#xff1a; namespace Ui{class Widget;}中的class Widget和下面的class Widget不是一個東西 Ui…

《AI大模型應知應會100篇》第52篇:OpenAI API 使用指南與最佳實踐

第52篇&#xff1a;OpenAI API 使用指南與最佳實踐 &#x1f4cc; 摘要 本文將帶你從零開始掌握 OpenAI API 的核心使用方法&#xff0c;涵蓋從基礎調用到高級功能的完整實戰路徑。通過詳細的代碼示例、圖文解析和可運行的 Python 腳本&#xff0c;幫助你快速上手 GPT-3.5、GP…

C#學習7_面向對象:類、方法、修飾符

一、類 1class 1)定義類 訪問修飾符class 類名{ 字段 構造函數&#xff1a;特殊的方法&#xff08;用于初始化對象&#xff09; 屬性 方法... } eg: public class Person { // 字段 private string name; private int a…

湖北理元理律師事務所:債務優化中的“生活保障”方法論

債務危機往往伴隨生活質量驟降&#xff0c;如何在還款與生存間找到平衡點&#xff0c;成為債務優化的核心挑戰。湖北理元理律師事務所基于多年實務經驗&#xff0c;提出“雙軌并行”策略&#xff1a;法律減負與生活保障同步推進。 債務優化的“溫度法則” 1.生存資金預留機制…

Jetpack Compose與Kotlin UI開發革命

Jetpack Compose + Kotlin:Android UI 開發的革命 簡介 Jetpack Compose 是 Google 推出的現代 Android UI 工具包,結合 Kotlin 語言,徹底改變了傳統 Android 開發的模式。過去,開發者依賴 XML 布局和命令式編程(如 findViewById 和手動更新視圖),導致代碼冗長且易出錯…

基于pyqt的上位機開發

目錄 安裝依賴 功能包含 運行結果 安裝依賴 pip install pyqt5 pyqtgraph pyserial 功能包含 自動檢測串口設備&#xff0c;波特率選擇/連接斷開控制&#xff0c;數據發送/接收基礎框架&#xff0c;實時繪圖區域&#xff08;需配合數據解析&#xff09; ""&q…

QT人工智能篇-opencv

第一章 認識opencv 1. 簡單概述 OpenCV是一個跨平臺的開源的計算機視覺庫&#xff0c;主要用于實時圖像處理和計算機視覺應用?。它提供了豐富的函數和算法&#xff0c;用于圖像和視頻的采集、處理、分析和顯示。OpenCV支持多種編程語言&#xff0c;包括C、Python、Java等&…

Python自學第5天:字符串相關操作

1.字符串運算符 作符描述字符串連接*重復輸出字符串[]通過索引獲取字符串中字符[ : ]截取字符串中的一部分&#xff0c;遵循左閉右開原則&#xff0c;str[0:2] 是不包含第 3 個字符的。in成員運算符 - 如果字符串中包含給定的字符返回 Truenot in成員運算符 - 如果字符串中不包…

RabbitMq(尚硅谷)

RabbitMq 1.RabbitMq異步調用 2.work模型 3.Fanout交換機&#xff08;廣播模式&#xff09; 4.Diret交換機&#xff08;直連&#xff09; 5.Topic交換機&#xff08;主題交換機&#xff0c;通過路由匹配&#xff09; 6.Headers交換機&#xff08;頭交換機&#xff09; 6…

分庫分表后復雜查詢的應對之道:基于DTS實時性ES寬表構建技術實踐

1 問題域 業務發展的初期&#xff0c;我們的數據庫架構往往是單庫單表&#xff0c;外加讀寫分離來快速的支撐業務&#xff0c;隨著用戶量和訂單量的增加&#xff0c;數據庫的計算和存儲往往會成為我們系統的瓶頸&#xff0c;業界的實踐多數采用分而治之的思想&#xff1a;分庫…

CVE-2024-4577:Windows 編碼錯誤

CVE-2024-4577是一個 PHP-CGI 漏洞,就是其中一種情況:雖然有這個版本,但由于 PHP 經常被反向移植,因此無法可靠地使用。 這篇博文詳細介紹了如何研究 CVE-2024-4577 以及當前用于檢測它的方法。 CVE-2024-4577 CVE-2024-4577 是 Windows 版 PHP 安裝中的一個高危漏洞,會…

NetBox Docker 全功能部署方案(Ubuntu 22.04 + Docker)

環境準備 檢查操作系統版本&#xff1a; 本方案使用 Ubuntu 22.04&#xff0c;并在 VMware 虛擬機中運行。通過以下命令檢查系統版本&#xff1a; lsb_release -a 如果未安裝 Ubuntu 22.04&#xff0c;請下載并安裝一個全新的系統。 更新系統軟件源&#xff1a; 更新軟件包列表…

DeepSeek Copilot idea插件推薦

&#x1f30c; DeepSeek Copilot for IntelliJ IDEA 讓 AI 成為你的編程副駕駛&#xff0c;極速生成單元測試 & 代碼注釋驅動開發&#xff01; &#x1f680; 簡介 DeepSeek Copilot 是一款為 IntelliJ IDEA 打造的 AI 編程助手插件&#xff0c;它能夠智能分析你的代碼邏輯…

QT中的JSON

1.JSON的兩種數據格式 JSON有兩種數據格式:JSON對象和JSON數組 JSON數組&#xff1a; JSON數組格式&#xff1a;[元素1&#xff0c;元素2&#xff0c;元素3&#xff0c;......元素n] JSON數組中的元素可以是同一類型&#xff0c;也可以使不同類型&#xff0c;可以嵌套JSON數組…

詳細剖析傳輸層協議(TCP和UDP)

詳細講解傳輸層的網絡協議&#xff0c;為什么TCP是可靠連接協議&#xff0c;憑什么能做到不丟包&#xff0c;有哪些機制保證可靠呢&#xff1f; TCP/UDP UDPTCP**三次握手和四次揮手****滑動窗口****擁塞控制**&#xff08;socket套接字&#xff09;**listen的第二個參數** UD…

數據可視化:藝術與科學的交匯點,如何讓數據“開口說話”?

數據可視化&#xff1a;藝術與科學的交匯點&#xff0c;如何讓數據“開口說話”&#xff1f; 數據可視化&#xff0c;是科技與藝術的結合&#xff0c;是讓冰冷的數字變得生動有趣的橋梁。它既是科學——講究準確性、邏輯性、數據處理的嚴謹性&#xff1b;又是藝術——強調美感…

解決使用lettuce連接Redis超時的問題(tcpUserTimeout 參數失效問題)

問題背景 lettuce 連接Redis的主從實例&#xff0c;當主節的主機異常下電重啟后&#xff0c;由于沒有發送RST 包&#xff0c;導致 lettuce 一直在復用之前的TCP鏈接&#xff0c;然后會出現連接超時的情況。一直出現io.lettuce.core.RedisCommandTimeoutException: Command tim…

如何使用python保存字典

在Python中&#xff0c;可以通過多種方式將字典&#xff08;dict&#xff09;保存到文件中&#xff0c;并能夠隨時讀取恢復。以下是幾種常見的方法&#xff1a; 1. 使用 json 模塊&#xff08;推薦&#xff09; 適用場景&#xff1a;需要人類可讀的文件格式&#xff0c;且數據不…