【Linux進階】文件系統4——文件系統特性

1.磁盤組成與分區的復習

首先說明一下磁盤的物理組成,整塊磁盤的組成主要有:

  • 圓形的碟片(主要記錄數據的部分);
  • 機械手臂,與在機械手臂上的磁頭(可擦寫碟片上的數據);
  • 主軸馬達,可以轉動碟片,讓機械手臂的磁頭在碟片上讀寫數據;

從上面我們知道數據存儲與讀取的重點在于碟片,而碟片上的物理組成則為:

  • 扇區(Sector)為最小的物理存儲單位,且依據磁盤設計的不同,目前主要有512B與448
  • 兩種格式;
  • 將扇區組成一個圓,那就是柱面(Cylinder);
  • 早期的分區主要以柱面為最小分區單位,現在的分區通常使用扇區為最小分區單位(每個扇區都有其號碼,就好像座位一樣);
  • 磁盤分區表主要有兩種格式,一種是限制較多的MBR分區表,一種是較新且限制較少的GPT分區表;
  • MBR 分區表中,第一個扇區最重要,里面有:主引導記錄(Master boot record,MBR)及
  • 分區表(partition table),其中MBR占有 446B,而分區表則占有64B;
  • GPT分區表除了分區數量擴充較多之外,支持的磁盤容量也可以超過2TB;

????????至于磁盤的文件名部分,基本上,所有物理磁盤的文件名都已經被模擬成/dev/sd[a-p]的格式,第一塊磁盤文件名為/dev/sda,而分區的文件名若以第一塊磁盤為例,則為/dev/sda[1-128]。除了物理磁盤之外,虛擬機的磁盤通常為/devlvd[a-p]的格式。

????????若有使用到軟件磁盤陣列的話,那還有devlmd[0-128]的磁盤文件名,使用LVM時,文件名則為/devNGNAME/LVNAME等格式。關于軟件磁盤陣列與LVM我們會在后面繼續介紹,這里主要介紹的以物理磁盤及虛擬磁盤為主。

  • /devlsd[a-p][1-128]:為物理磁盤的文件名;
  • /devlvd[a-d][1-128]:為虛擬磁盤的文件名;

復習完物理組成后,來復習一下磁盤分區吧!

如前所述,以前磁盤分區最小單位經常是柱面,但CentOS7的分區軟件,已經將最小單位改成了扇區,所以分區容量的大小可以劃分的更細,此外,由于新的大容量磁盤大多要使用GPT分區表才能夠使用全部的容量,因此過去那個MBR的傳統磁盤分區表限制就不會存在了,不過,由于還是有小磁盤。

因此,你在處理分區的時候,還是得要先查詢一下,你的分區是MBR分區表,還是GPT的分區表。后續的操作,大多還是以GPT為主來介紹。

2.文件系統特性

????????我們都知道磁盤分區完畢后還需要進行格式化(format),之后操作系統才能夠使用這個文件系統。為什么需要進行格式化?

????????這是因為每種操作系統所設置的文件屬性/權限并不相同,為了存放這些文件所需的數據,因此就需要將分區進行格式化,以成為操作系統能夠利用的文件系統格式(filesystem)。由此我們也能夠知道,每種操作系統能夠使用的文件系統并不相同。

????????舉例來說,Windows98以前的微軟操作系統主要使用的文件系統是FAT(或FAT16),Windows2000以后的版本有所謂的NTFS文件系統,至于Linux的正統文件系統則為ext2(Linux second Extended file system,ext2fs)。此外,在默認的情況下,Windows操作系統不支持Linux的ext2文件系統。

????????傳統的磁盤與文件系統應用中,一個分區就只能夠被格式化成為一個文件系統,所以我們可以說個文件系統就是一個硬盤分區。但是由于新技術的利用,例如我們常聽到的LVM與軟件磁盤陣列(software raid ),這些技術可以將一個分區格式化為多個文件系統(例如LVM),也能夠將多個分區合成一個文件系統(LVM,RAID)。

????????所以說,目前我們在格式化時已經不再說成針對硬盤分區來格式化了,通常我們可以稱呼一個可被掛載的數據為一個文件系統而不是一個分區。

那么文件系統是如何運行的呢?

????????這與操作系統的文件有關。較新的操作系統的文件除了文件實際內容外,通常含有非常多的屬性,

例如Linux操作系統的文件權限(rwx)與文件屬性(擁有者、用戶組、時間參數等 )文件系統通常會將這兩部分的數據分別存放在不同的區塊,

  • 文件的權限和屬性保存在 inode 中(i 節點)中,每個 inode 都有自己的編號。每個文件各占用一個 inode。不僅如此,inode 中還記錄著文件數據所在 block 塊的編號;
  • 文件的實際內容保存在 data block 中(數據區塊),類似衣柜的隔斷,用來真正保存衣物。每個 block 都有屬于自己的編號。當文件太大時,可能會占用多個 block 塊。

另外,還有一個超級區塊(superblock)會記錄整個文件系統的整體信息,包括inode與數據區塊的總量、使用量、剩余量等。

每個inode與區塊都有編號,至于這三個數據的意義可以簡略說明如下:

  • 超級區塊:記錄此文件系統的整體信息,包括inode與數據區塊的總量、使用量、剩余量,以及文件系統的格式與相關信息等;
  • inode:記錄文件的屬性,一個文件占用一個inode,同時記錄此文件的數據所在的區塊號碼;
  • 數據區塊:實際記錄文件的內容,若文件太大時,會占用多個區塊。

????????由于每個inode與數據區塊都有編號,而每個文件都會占用一個inode,inode 內則有文件數據放置的區塊號碼。

????????因此,我們可以知道的是,如果能夠找到文件的inode 的話,那么自然就會知道這個文件所放置數據的區塊號碼,當然也就能夠讀出該文件的實際數據了。這是個比較有效率的做法,因為如此一來我們的磁盤就能夠在短時間內讀取出全部的數據,讀寫的性能比較好。

我們將inode與數據區塊用圖解來說明一下,如圖所示:文件系統先格式化出 inode 和 block 塊,假設某文件的權限和屬性信息存放到 inode 4 號位置,這個 inode 記錄了實際存儲文件數據的 block 號有 4 個,分別為 2、7、13、15,此時我們的操作系統就能夠據此來排列磁盤的讀取順序,可以一口氣將四個區塊內容讀出來,那么數據的讀取就如同下圖中的箭頭所指定的模樣。

每個inode都有一個號碼,操作系統用inode號碼來識別不同的文件。

????????Unix/Linux系統內部不使用文件名,而使用inode號碼來識別文件。對于系統來說,文件名只是inode號碼便于識別的別稱或者綽號。表面上,用戶通過文件名,打開文件。

實際上,系統內部這個過程分成三步:

  1. 首先,系統找到這個文件名對應的inode號碼;
  2. 其次,通過inode號碼,獲取inode信息;
  3. 最后,根據inode信息,分析 inode 所記錄的權限與用戶是否符合,找到文件數據所在的block,讀出數據

這種數據存取的方法我們稱為索引式文件系統(indexed allocation)。

????????那有沒有其他的常用文件系統可以比較一下?

有的,那就是我們常用的U盤,U盤使用的文件系統一般為FAT格式。

FAT這種格式的文件系統并沒有inode存在,所以FAT沒有辦法將這個文件的所有區塊在一開始就讀取出來。每個區塊號碼都記錄在前一個區塊當中,它的讀取方式有點像下面這樣;

????????上圖中我們假設文件的數據依序寫入1->7->4->15號這4個區塊號碼中,但這個文件系統沒有辦法一口氣就知道四個區塊的號碼,它要一個一個地將區塊讀出后,才會知道下一個區塊在何處。????????如果同一個文件數據寫入的區塊太分散,則我們的磁頭將無法在磁盤轉一圈就讀到所有的數據,因此磁盤就會多轉好幾圈才能完整地讀取到這個文件的內容。

常常會聽到所謂的碎片整理吧?需要碎片整理的原因就是文件寫入的區塊太過于離散,此時文件讀取的性能將會變得很差所致。這個時候可以通過碎片整理將同一個文件所屬的區塊集合在一起,這樣數據的讀取會比較容易。

因此,FAT的文件系統需要不時地碎片整理一下,那么ext2是否需要磁盤整理呢?

????????由于ext2是索引式文件系統,基本上不太需要進行碎片整理。但是如果文件系統使用太久,常常刪除、編輯、新增文件時,那么還是可能會造成文件數據太過于離散的問題,此時或許會需要進行整理一下。Linux操作系統上面進行過ext2或ext3文件系統的碎片整理,似乎不太需要。

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

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

相關文章

打開瀏覽器控制臺,點擊應用,瀏覽器崩潰

調試的時候,打開控制臺,點擊 “應用” 立馬瀏覽器奔潰,但是點擊別的沒問題 調查發現是因為manifest.json這個文件引起的 manifest.json 最主要的原因是因為沒有設置這個sizes字段 Google瀏覽器更新大概到126之后的版本會有問題,之…

AI多模態教程:Qwen-VL多模態大模型實踐指南

一、模型介紹 Qwen-VL,由阿里云研發的大規模視覺語言模型(Large Vision Language Model, LVLM),代表了人工智能領域的一個重大突破。該模型具有處理和關聯圖像、文本、檢測框等多種類型數據的能力,其輸出形式同樣多樣…

代碼隨想錄Day69(圖論Part05)

并查集 // 1.初始化 int fa[MAXN]; void init(int n) {for (int i1;i<n;i)fa[i]i; }// 2.查詢 找到的祖先直接返回&#xff0c;未進行路徑壓縮 int.find(int i){if(fa[i] i)return i;// 遞歸出口&#xff0c;當到達了祖先位置&#xff0c;就返回祖先elsereturn find(fa[i])…

py基礎語法簡述

py基礎&#xff0c;常用sdk 一些要點 python中是沒有常量的關鍵字的&#xff0c;只是我們常常約定使用大寫字符組合的變量名表示常量&#xff0c;也有“不要對其進行賦值”的提醒操作 PI 3.14python3中有六個標準的數據類型&#xff1a; Number(數字)、String(字符串)、Boo…

基于Python爬蟲的城市二手房數據分析可視化

基于Python爬蟲的城市二手房數據分析可視化 一、前言二、數據采集(爬蟲,附完整代碼)三、數據可視化(附完整代碼)3.1 房源面積-總價散點圖3.2 各行政區均價3.3 均價最高的10個小區3.4 均價最高的10個地段3.5 戶型分布3.6 詞云圖四、如何更換城市一、前言 二手房具有價格普…

CSS position屬性之relative和absolute

目錄 1 參考文章2 五個屬性值3 position:static4 position:relative&#xff08;相對&#xff09;5 position:absolute&#xff08;絕對&#xff09; 1 參考文章 https://blog.csdn.net/lalala_dxf/article/details/123566909 https://blog.csdn.net/WangMinGirl/article/deta…

最靈活且易用的C++開源串口通信調試軟件

這款C開源串口調試軟件&#xff0c;集成了豐富的功能&#xff0c;為用戶提供高效、便捷的串口通信調試體驗。以下是其核心功能亮點&#xff1a; 基礎功能&#xff1a; 數據交互自如&#xff1a;支持串口數據的輕松讀取與發送&#xff0c;讓數據交換變得簡單直接。 靈活配置參…

基于順序表的通訊錄實現

一、前言 基于已經學過的順序表&#xff0c;可以實現一個簡單的通訊錄。 二、通訊錄相關頭文件 //Contact.h #pragma once#define NAME_MAX 20 #define TEL_MAX 20 #define ADDR_MAX 20 #define GENDER_MAX 20typedef struct PersonInfo {char name[NAME_MAX];char gender[G…

Python的招聘數據分析與可視化管理系統-計算機畢業設計源碼55218

摘要 隨著互聯網的迅速發展&#xff0c;招聘數據在規模和復雜性上呈現爆炸式增長&#xff0c;對數據的深入分析和有效可視化成為招聘決策和招聘管理的重要手段。本論文旨在構建一個基于Python的招聘數據分析與可視化管理系統。 該平臺以主流招聘平臺為數據源&#xff0c;利用Py…

MSPM0G3507——解決printf重定向在其他位置不能用的問題(printf重定向的補充)

除了之前發的文章的printf重定向的代碼之外&#xff0c;還要加上這樣一段代碼即可 int puts(const char *_ptr) {int count fputs(_ptr,stdout);count fputs("\n",stdout);return count;} 完整的重定向&#xff1a; int fputc(int c, FILE* stream) {DL_UART_Main_…

昇思25天學習打卡營第2天|MindSpore快速入門

打卡 目錄 打卡 快速入門案例&#xff1a;minist圖像數據識別任務 案例任務說明 流程 1 加載并處理數據集 2 模型網絡構建與定義 3 模型約束定義 4 模型訓練 5 模型保存 6 模型推理 相關參考文檔入門理解 MindSpore數據處理引擎 模型網絡參數初始化 模型優化器 …

一個字符串的全部子序列和全排列

在計算機科學中&#xff0c;字符串的子序列和全排列是兩個重要的概念。 1. 子序列 子序列是從一個序列中刪除一些&#xff08;或不刪除&#xff09;元素而不改變剩余元素的順序形成的新序列。 例如&#xff0c;字符串 “abc” 的子序列包括&#xff1a; “”&#xff08;空…

如何選擇TikTok菲律賓直播網絡?

為了滿足用戶對于實時互動的需求&#xff0c;TikTok推出了直播功能&#xff0c;讓用戶能夠與粉絲即時交流。本文將探討如何選擇適合的TikTok菲律賓直播網絡&#xff0c;并分析OgLive是否是值得信賴的選擇。 TikTok菲律賓直播網絡面臨的挑戰 作為全球領先的短視頻平臺&#xff…

Python + OpenCV 開啟圖片、寫入儲存圖片

這篇教學會介紹OpenCV 里imread()、imshow()、waitKey() 方法&#xff0c;透過這些方法&#xff0c;在電腦中使用不同的色彩模式開啟圖片并顯示圖片。 imread() 開啟圖片 使用imread() 方法&#xff0c;可以開啟圖片&#xff0c;imread() 有兩個參數&#xff0c;第一個參數為檔…

Google Play上架:惡意軟件、移動垃圾軟件和行為透明度詳細解析和解決辦法 (一)

近期整理了許多開發者的拒審郵件和內容,也發現了許多問題,今天來說一下關于惡意軟件這類拒審的問題。 目標郵件如下: 首先說一下各位小伙伴留言私信的一個方法,提供你的拒審郵件和時間,盡可能的詳細,這樣會幫助我們的團隊了解你們的問題,去幫助小伙伴么解決問題。由于前…

在 .NET 8 Web API 中實現彈性

在現代 Web 開發中&#xff0c;構建彈性 API 對于確保可靠性和性能至關重要。本文將指導您使用 Microsoft.Extensions.Http.Resilience 庫在 .NET 8 Web API 中實現彈性。我們將介紹如何設置重試策略和超時&#xff0c;以使您的 API 更能抵御瞬時故障。 步驟 1.創建一個新的 .…

集成學習(一)Bagging

前邊學習了&#xff1a;十大集成學習模型&#xff08;簡單版&#xff09;-CSDN博客 Bagging又稱為“裝袋法”&#xff0c;它是所有集成學習方法當中最為著名、最為簡單、也最為有效的操作之一。 在Bagging集成當中&#xff0c;我們并行建立多個弱評估器&#xff08;通常是決策…

排序——數據結構與算法 總結8

目錄 8.1 排序相關概念 8.2 插入排序 8.2.1 直接插入排序&#xff1a; 8.2.2 折半插入排序&#xff1a; 8.2.3 希爾排序&#xff1a; 8.3 交換排序 8.3.1 冒泡排序&#xff1a; 8.3.2 快速排序&#xff1a; 8.4 選擇排序 8.4.1 簡單選擇排序 8.4.2 堆排序 8.5 歸并…

磁盤就是一個超大的Byte數組,操作系統是如何管理的?

磁盤在操作系統的維度看&#xff0c;就是一個“超大的Byte數組”。 那么操作系統是如何對這塊“超大的Byte數組”做管理的呢&#xff1f; 我們知道在邏輯上&#xff0c;上帝說是用“文件”的概念來進行管理的。于是&#xff0c;便有了“文件系統”。那么&#xff0c;文件系統…

當前國內可用的docker加速器搜集 —— 筑夢之路

可用鏡像加速器 以下地址搜集自網絡&#xff0c;僅供參考&#xff0c;請自行驗證。 1、https://docker.m.daocloud.io2、https://dockerpull.com3、https://atomhub.openatom.cn4、https://docker.1panel.live5、https://dockerhub.jobcher.com6、https://hub.rat.dev7、http…