Linux中inode

磁盤的空間管理

如何對磁盤空間進行管理?

假設在一塊大小為500G的磁盤中,500*1024*1024=524288000KB。在磁盤中,扇區是磁盤的基本單位(一般大小為512byte),而文件系統訪問磁盤的基本單位是4KB,因此500G就被分成了131072000個扇區,將這些扇區看作為數組。而如果對這500GB進行分盤(C盤50G,D盤100G等),因此對500G磁盤的管理也就是對分的C盤50G,D盤100G的管理,相同,對于C盤50G的管理又被分化成對C盤中5個10G的管理。因此只要管理好局部,就能管理好整體,將整體細化成小等份進行管理即可(如下圖)。

在Linux中,文件由數據與屬性組成,這里數據內容存儲在block(一般是4KB)中,屬性存放在inode(磁盤上的另一塊空間,一般是128字節)中,因此一個扇區(512字節)可以存儲4個inode。但是內容可以增多或減少,而屬性是不變的。

  1. Date blocks:里面包含許多Data Block,并且占磁盤的絕大部分空間,每一個Data Block大小是4KB。Data Blocks的作用是以塊(這里的塊就是Data Block)為單位,對文件內容進行保存,OS將文件每4KB分為一塊進行保存,不夠4KB也按照4KB保存。
  2. inode table:里面包含大量的inode空間(每個inode大小為128字節),用于保存文件屬性。這里的inode可以理解成一個結構體(struct inode,其中保存著對應文件的Data Block編號,這使得Data Blocks與inode進行相互關聯),結構體內部包含文件屬性(所有者,權限等),并且以二進制的形式將實例化對象(struct inode i)寫到inode空間里面。一般而言,一個文件有一個inode編號,以保證文件的唯一性。
  3. Block Bitmap:意思是位圖,用于判斷Data Blocks上的空間是否被占用。通過比特位上的數據來判斷數據塊中哪些空間被使用,哪些空間沒被使用(0000 0000表示空空間都沒有被使用,0000 1010表示1號位和3號位空間被使用)。
  4. Inode Bitmap:用于判斷inode哪些空間被占,哪些空間沒有被使用。
  5. Group Descriptor Table:簡稱GDT,塊組描述符,用于描述inode表和數據塊的起始位置。
  6. Super Block:用于記錄存放文件系統本身的信息,記錄Data Block和inode Block中的使用量以及未使用量等。并不是每個Block Group都含有Super Block,Super Block存在的意義是如果Super Block出現損壞可以通過其他Super Block對文件進行恢復。

注意:文件名也是文件的屬性,但是在Linux中,并沒有文件名的概念,而是通過inode對應的Data Block編號來識別文件的,因此要找到文件,就必須找到該文件對應inode編號,找到inode編號就能找到文件的Data Blocks,從而找到文件內容。那么如何找到inode呢?

我們知道,目錄其實也是文件,是文件就具有文件內容和屬性,這里目錄的文件內容其實就是文件與目錄的inode編號的映射關系。當我們在某一個目錄下創建一個文件的時候,OS會根據當前目錄下的Inode Bitmap找到未使用空間,將創建的文件的屬性寫入到該未使用的inode上,然后再根據Block Bitmap找打未使用的Data Block,然后填寫數據到Data Block上,最后返回該文件的inode。最后返回的inode編號找到該文件所處的目錄,根據目錄的inode找到目錄的Data Block,然后將文件名與inode的映射關系寫入到目錄的Data Block中。(這就是為什么inode中不保存文件名,因為文件名在目錄中)

當刪除一個文件的時候,根據目錄的inode和要刪除的文件名,找到目錄的Data Block,根據文件名的映射關系找到文件的inode,再根據要刪除文件的inode找到該文件的BlockGroup,將要刪除文件的inode Bitmap和Block Bitmap的位圖上的標志位由1置為0,最后取消該文件與目錄的映射關系。

軟連接與硬連接

軟連接:

如上圖,在/home/101-asy/linux/2024-12-06/d1/d2/d3目錄下編譯成的可執行文件mytest1,如果在/home/101-asy/linux/2024-12-06下執行需要帶該文件的路徑:?./d1/d2/d3/mytest1;但是如果使用軟連接的方式:ln -s ./d1/d2/d3/mytest1 mytest1.s在/home/101-asy/linux/2024-12-06目錄下生成一個軟連接的可執行文件mytest1.s。這個軟連接可以理解成快捷鍵。

如上圖,軟連接的文件與源文件的inode不同(因此軟連接文件是一個獨立的文件,也要進行分配inode,填寫屬性Data block,映射等操作),并且軟連接文件的內容其實是源文件的所在路徑。


硬連接:

創建的硬鏈接文件與原文件的inode相同,所謂的硬連接就是在當前目錄下,給指定的文件新增文件名和inode編號的映射關系。

硬連接數是指向同一inode文件的數量,用于標識有多少個文件指向當前inode文件。


為什么創建的文件默認硬連接數是1呢???而文件夾又是2呢???

如上圖,我們知道硬連接數表示有幾個文件名指向該文件。當創建file文件時,file文件本身就指向了該文件,因此file文件本省就是一個硬連接數。而對于文件夾來說除了文件夾名本身外其內部還有一些文件:

以目錄d4為例,d4的硬連接數為3,分別為d4文件名本身指向d4,d4目錄下的.文件指向d4,以及d5目錄下的..文件指向d4。

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

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

相關文章

5G揚帆乘勁風,遨游通訊賦能千行百業譜新篇

在大型工廠,輕觸手機屏幕,實時庫存數據、人員定位等信息便躍然眼前、一目了然;在邊遠油田,動動手指,即可實時查詢設備溫度、危險氣體濃度等信息,大數據瞬間盡在“掌”握……在遨游5G防爆智能手機的助力下&a…

RT Thread Studio新建STM32F407IG工程文件編譯提示錯誤

編譯提示錯誤 原因: RT 源碼使用4.0.3的話,請用STM32F4支持包的0.2.2版本,就不會出錯了。 如果支持包用0.2.3版本的話,需要用RT內核4.1.0版本。0.2.3 版本更新了一些針對內核4.1.0的驅動代碼,這幾個定義都是4.1.0里的。

學生管理系統(java)

1.前期準備 (1)新建java項目 (2)新建java軟件包以及三個文件Student.java,Student.txt,StuSystem.java Student.java package student_management_system;public class Student {private String id;private String name;private…

JavaWeb學習(2)(Cookie原理(超詳細)、HTTP無狀態)

目錄 一、HTTP無狀態。 (1)"記住我"? (2)HTTP無狀態。 (3)信息存儲客戶端中。如何處理? 1、loaclStorage與sessionStorage。 2、Cookie。 二、Cookie。 (1&…

SpringBoot教程(三十二) SpringBoot集成Skywalking鏈路跟蹤

SpringBoot教程(三十二) | SpringBoot集成Skywalking鏈路跟蹤 一、Skywalking是什么?二、Skywalking與JDK版本的對應關系三、Skywalking下載四、Skywalking 數據存儲五、Skywalking 的啟動六、部署探針 前提: Agents 8.9.0 放入 …

flask創建templates目錄存放html文件

首先,創建flask項目,在pycharm中File --> New Project,選擇Flask項目。 然后,在某一目錄下,新建名為templates的文件夾,這時會是一個普通的文件夾。 然后右擊templates文件夾,選擇Unmark as …

Java進階(注解,設計模式,對象克隆)

Java進階(注解,設計模式,對象克隆) 一. 注解 1.1 什么是注解 java中注解(Annotation),又稱java標注,是一種特殊的注釋 可以添加在包,類,成員變量,方法,參數等內容上 注解會隨同…

部署loki,grafana 以及springcloud用法舉例

文章目錄 場景docker 部署grafanadocker-compose部署loki維護配置文件 local-config.yaml維護docker-compose.yml配置啟動 grafana 添加loki數據源springcloud用法舉例查看loki的explore,查看日志 場景 小公司缺少運維崗位,需要研發自己部署日志系統,elk…

keil報錯---connection refused due to device mismatch

解決辦法如下: 記得改成1 把Enable取消

第三節、電機定速轉動【51單片機-TB6600驅動器-步進電機教程】

摘要:本節介紹用定時器定時的方式,精準控制脈沖時間,從而控制步進電機速度 一、計算過程 1.1 電機每一步的角速度等于走這一步所花費的時間,走一步角度等于步距角,走一步的時間等于一個脈沖的時間 w s t e p t … ……

vue中pdf.js的使用,包括pdf顯示,跳轉指定頁面,高亮關鍵詞

目錄 一、下載pdf.js 二、引入到本地的項目中 三、實現預覽pdf 四、跳轉到指定頁面 五、利用pdf里面的find查找關鍵詞 六、修改頁面大小為實際大小 一、下載pdf.js https://github.com/mozilla/pdf.js 里面有很多的版本, 高版本的可能瀏覽器不兼容或者還要考…

OD B卷【連續字母長度】

題目 給定一個字符串,只包含大寫字母,求在包含同一字母的子串中,長度第k長的子串的長度,相同字母只取最長的那個子串。 輸入描述: 第一行輸入一個子串(長【1,100】),只包含大寫字母…

python中的 Pydantic 框架介紹

Pydantic 框架介紹 Pydantic 是一個用于數據驗證和設置管理的 Python 庫。它主要通過數據模型類的定義來處理 JSON 數據、解析請求和響應數據,并提供自動化的驗證和轉換。Pydantic 主要用于處理 Python 類型的安全性和驗證,尤其在 FastAPI 等現代 Pytho…

橋接模式和組合模式的區別

橋接模式(Bridge Pattern)和組合模式(Composite Pattern)都是結構型設計模式,旨在解決對象結構的復雜性問題,但它們的應用場景和目的有所不同。以下是它們的區別: 1. 定義與目的 橋接模式&…

Qt 小項目 學生管理信息系統

主要是對數據庫的增刪查改的操作 登錄/注冊界面: 主頁面: 添加信息: 刪除信息: 刪除第一行(支持多行刪除) 需求分析: 用QT實現一個學生管理信息系統,數據庫為MySQL 要求&#xf…

14.數據容器-set集合

特點 無序的,元素不重復,自帶去重功能。 可以容納不同類型的元素數據。 # 定義一個空set my_set {} your_set set() my_set {aa, bb, bb, aa} # {aa, bb} print(my_set) 因為set集合是無序的,所以集合不支持下標索引訪問。所以set集合…

“量子躍遷與數據織網:深入探索K最近鄰算法在高維空間中的優化路徑、神經網絡融合技術及未來機器學習生態系統的構建“

🎼個人主頁:【Y小夜】 😎作者簡介:一位雙非學校的大二學生,編程愛好者, 專注于基礎和實戰分享,歡迎私信咨詢! 🎆入門專欄:🎇【MySQL&#xff0…

硬件選型規則

光源選型: 先用型號中帶H的,沒有的選標準的. 光源和光源控制器的搭配需要確保接口一致。 根據型號表中的最佳工作距離和相機的尺寸。 光源控制器選型: 首先選擇海康風格系列光源控制器考慮與光源的接口匹配。功率應該滿足接近光源功率。檢查是否退市…

【QNX+Android虛擬化方案】135 - QNX側如何Dump 88Q5152 MIBS報文計數

【QNX+Android虛擬化方案】135 - QNX側如何Dump 88Q5152 MIBS報文計數 一、讀取 88Q5152 MIBS 計數二、讀取 88Q5152 WDT 相關寄存器基于原生純凈代碼,自學總結 純技術分享,不會也不敢涉項目、不泄密、不傳播代碼文檔!!! 本文禁止轉載分享 !!! 匯總鏈接:《【QNX+Andro…

C#核心(15)繼承中的構造函數

前言 我們之前學過構造函數是什么東西,今天的內容也和構造函數緊密相關,一個繼承了父親的子類里面構造函數的規則是什么樣的,今天內容很簡單,請聽我慢慢講來。 基本概念 特點:當申明一個子類時,先執行父…