Linux磁碟系統——磁碟系統簡介

来源:https://www.cnblogs.com/shamao/archive/2019/07/14/11182790.html
-Advertisement-
Play Games

Linux磁碟系統——磁碟系統簡介 摘要:本文主要學習了Linux系統中有關磁碟的一些知識。 文件系統 說明 硬碟是用來存儲數據的,可以將其想象成柜子,只不過柜子是用來存儲衣物的。新買來的硬碟,通常要對其進行分區並格式化。分區就如同把一個大櫃按照要求分割成幾個小柜子。格式化就好比在每個小柜子中打入隔 ...


Linux磁碟系統——磁碟系統簡介

摘要:本文主要學習了Linux系統中有關磁碟的一些知識。

文件系統

說明

硬碟是用來存儲數據的,可以將其想象成柜子,只不過柜子是用來存儲衣物的。新買來的硬碟,通常要對其進行分區並格式化。分區就如同把一個大櫃按照要求分割成幾個小柜子。格式化就好比在每個小柜子中打入隔斷,決定每個隔斷的大小和位置,然後在櫃門上貼上標簽,標簽中寫清楚每件衣服保存的隔斷的位置和這件衣服的一些特性。

在格式化的過程中會向硬碟中寫入文件系統。因為不同的操作系統,管理文件的方式也不盡相同(給文件設定的屬性和許可權也不完全一樣),因此,為了使硬碟有效存放當前系統中的文件數據,就需要將硬碟進行格式化,令其使用和操作系統一樣(或接近)的文件系統格式。

不同的文件系統,其運作模式和操作系統的文件數據有關。

虛擬文件系統

文件系統指文件存在的物理空間。在Linux系統中,每個分區都是一個文件系統,都有自己的目錄層次結構。

Linux的最重要特征之一就是支持多種文件系統,這樣它更加靈活,並可以和許多其它種操作系統共存。

Virtual File System(虛擬文件系統)使得Linux可以支持多個不同的文件系統,由於系統已將Linux文件系統的所有細節進行了轉換,所以Linux核心的其它部分及系統中運行的程式將看到統一的文件系統。

Linux的虛擬文件系統允許用戶同時能透明地安裝許多不同的文件系統,虛擬文件系統是為Linux用戶提供快速且高效的文件訪問服務而設計的。

文件系統類型

minix:在Minix操作系統上使用的文件系統,Linux上運行的第一種文件系統。它有很多限制:64M分區大小限制,短文件名,唯一時間戳等等。只有軟盤或者RAM中可能用的到。

ext:minix文件系統的複雜擴展,Linux中最早的文件系統,由於在性能和相容性上具有很多缺陷,已經被ext2文件系統完全取代。

ext2:是ext文件系統的擴展,可以給Linux的文件系統提供最佳支持(主要是速度和CPU使用上),支持最大16TB的分區和最大2TB的文件。

ext3:是ext2文件系統的擴展,最大的區別就是帶日誌功能,以便在系統突然停止時提高文件系統的可靠性,支持最大16TB的分區和最大2TB的文件。

ext4:是ext3文件系統的擴展。ext4在性能、伸縮性和可靠性方面進行了大量改進,支持最大1EB文件系統和16TB文件、無限數量子目錄、Extents連續數據塊的概念、快速FSCK、日誌校驗、無日誌模式、等。它是CentOS 6的預設文件系統。

xfs:xfs是一個64位文件系統,最大支持8EB減1位元組的單個文件系統,實際部署時取決於宿主操作系統的最大塊限制。對於一個32位Linux系統,文件和文件系統的大小會被限制在16TB。它是CentOS 6的預設文件系統。

swap:swap是Linux中用於交換分區的文件系統(類似於Windows中的虛擬記憶體),當記憶體不夠用時,使用交換分區暫時替代記憶體。一般大小為記憶體的2倍,但是不要超過2GB。它是Linux的必需分區。

nfs:nfs是網路文件系統(Network File System)的縮寫,是用來實現不同主機之間文件共用的一種網路服務,本地主機可以通過掛載的方式使用遠程共用的資源。

iso9660:光碟的標準文件系統。Linux要想使用光碟,必須支持iso9660文件系統。

fat:就是Windows下的fatl6文件系統,在Linux中識別為fat。

vfat:就是Windows下的fat32文件系統,在Linux中識別為vfat。支持最大32GB的分區和最大4GB的文件。

ntfs:就是Windows下的ntfs文件系統,不過Linux預設是不能識別ntfs文件系統的,如果需要識別,則需要重新編譯內核才能支持。它比fat32文件系統更加安全,速度更快,支持最大2TB的分區和最大64GB的文件。

ufs:Sun公司的操作系統Solaris和SunOS所採用的文件系統。

proc:Linux中基於記憶體的虛擬文件系統,用來管理記憶體存儲目錄/proc。

sysfs:和proc一樣,也是基於記憶體的虛擬文件系統,用來管理記憶體存儲目錄/sysfs。

tmpfs:也是一種基於記憶體的虛擬文件系統,不過也可以使用swap交換分區。

硬碟分區

含義

磁碟的組成主要有磁碟盤、機械手臂、磁碟讀取頭與主軸馬達所組成,而資料的寫入其實是在磁碟盤上面。磁碟盤上面又可細分出磁區(Sector)與磁軌(Track)兩種單位,其中磁區的物理量設計有兩種大小,分別是512B與4KB。

整個磁碟的第一個磁區特別的重要,因為他記錄了整顆磁碟的重要數據。早期磁碟使用的分割格式稱為MBR(Master Boot Record)格式,但是由於近年來磁碟的容量不斷擴大,造成讀寫上的一些困擾,甚至有些大於2TB以上的磁碟分割已經讓某些作業系統無法存取,因此後來又多了一個新的磁碟分割格式,稱為GPT(GUID Partition Table)。

分區格式

1)MBR

早期的Linux系統為了相容於Windows的磁碟,因此使用的是支持Windows的MBR(Master Boot Record)的方式來處理開機管理程式和分割表。而開機管理程式紀錄區與分割表則通通放在磁碟的第一個磁區,這個磁區通常是512B的大小(舊的磁碟磁區都是512B),所以說,第一個磁區512B會有這兩個數據:

主要開機記錄(Master Boot Record,MBR):可以安裝開機管理程式的地方,有446B。
分割表(Partition Table):記錄整顆硬碟分割的狀態,有64B。

由於分割表所在區塊僅有64B容量,因此最多僅能有四組分區,每組分區記錄了該區段的啟始與結束的磁柱號碼,可以通過擴展分區的方式增加分區的個數。

一個磁碟最多只能有一個擴展分區,擴展分區不能夠格式化,裡面可以分出邏輯分區。邏輯分區的區號從sda4開始,前面3個分區是保留給主分區使用的,第4個分區sda4代表擴展分區。

2)GPT

因為最新的磁碟的扇區有可能為4K,因此GPT為了和MBR相相容,使用了邏輯區塊位址(Logical Block Address,LBA)來代替扇區,GPT將磁碟所有區塊以此LBA(預設為512B)來規劃,第一個LBA稱為LBA0(從0開始編號)。

LBA0中446位元組存儲開機管理程式,而在原本的分割表的紀錄區內,僅放入一個特殊標誌的分割,用來表示此磁碟為GPT格式。

LBA1紀錄了分割表本身的位置與大小,同時紀錄了備份用的LBA區塊放置的位置。

在LBA2區塊到LBA33區塊,每個LBA可以記錄四個分區信息,因此可以記錄32*4=128個分區信息。每個LBA為512B,因此每個分區使用128B來記錄,用64B來記錄分區的起始或結束LBA,因此一個分區理論最大為2^64*512B=2^33TB。

開機流程中的開機檢測程式

基本上,目前的主機系統在載入硬體驅動方面的程式,主要有早期的BIOS與新的UEFI兩種機制。

1)BIOS

BIOS是一個寫入到主機板上的一個程式,是開機時電腦系統會主動執行的第一個程式。

接下來BIOS會去分析電腦裡面有哪些儲存設備,我們以硬碟為例,BIOS會依據使用者的設定去取得能夠開機的硬碟,並且到該硬碟裡面去讀取第一個磁區的MBR位置。MBR這個僅有446B的硬碟容量裡面會放置最基本的開機管理程式,此時BIOS就功成圓滿,而接下來就是MBR內的開機管理程式的工作了。

2)UEFI

如果你的分割表為GPT格式的話,那麼BIOS也能夠從LBA0的區塊讀取第一階段的開機管理程式碼。如果你的開機管理程式能夠認識GPT的話,那麼使用BIOS同樣可以讀取到正確的作業系統核心。

換句話說,如果開機管理程式不懂GPT,那自然就無法讀取核心檔案,開機就失敗了。

由於LBA0僅提供第一階段的開機管理程式,因此如果你使用類似GRUB的開機管理程式的話,那麼就得要額外分出一個BIOS Boot的分割槽,這個分割槽能夠放置其他開機過程所需的程式。在CentOS當中,這個分割槽通常占用2MB左右而已。

為瞭解決這個問題,因此就有了UEFI(Unified Extensible Firmware Interface)這個統一可延伸程式界面的產生。UEFI直接從預啟動的操作環境載入操作系統,簡化開機過程有效提高啟動速度。

另外,與BIOS模式相比,雖然UEFI可以直接取得GPT的分割表,不過最好依舊擁有BIOS Boot的分割槽支援。同時,為了與Windows相容,並且提供其他第三方廠商所使用的UEFI應用程式儲存的空間,你必須要格式化一個vfat的檔案系統,大約提供512MB到1G左右的容量,以讓其他UEFI執行較為方便。

硬碟分區的好處

1)方便管理和控制

首先,可以將系統中的數據(也包括程式)按不同的應用分成幾類,之後將這些不同類型的數據分別存放在不同的磁碟分區中。由於在每個分區上存放的都是類似的數據或程式,這樣管理和維護就簡單多了。

2)提高系統的效率

給硬碟分區,可以直接縮短系統讀寫磁碟時磁頭移動的距離,也就是說,縮小了磁頭搜尋的範圍;反之,如果不使用分區,每次在硬碟上搜尋信息時可能要搜尋整個硬碟,所以速度會很慢。另外,硬碟分區也可以減輕碎片(文件不連續存放)所造成的系統效率下降的問題。

3)使用磁碟配額的功能限制用戶使用的磁碟量

由於限制用戶使用磁碟配額的功能,只能在分區一級上使用,所以,為了限制用戶使用磁碟的總量,防止用戶浪費磁碟空間(甚至將磁碟空間耗光),最好將磁碟先分區,然後在分配給一般用戶。

4)便於備份和恢復

硬碟分區後,就可以只對所需的分區進行備份和恢復操作,這樣的話,備份和恢復的數據量會大大地下降,而且也更簡單和方便。

掛載硬體設備

為什麼要掛載

Linux系統中“一切皆文件”,所有文件都放置在以根目錄為樹根的樹形目錄結構中。在Linux看來,任何硬體設備也都是文件,它們各有自己的一套文件系統(文件目錄結構)。

因此產生的問題是,當在Linux系統中使用這些硬體設備時,只有將Linux本身的文件目錄與硬體設備的文件目錄合二為一,硬體設備才能為我們所用。合二為一的過程稱為“掛載”。如果不掛載,通過Linux系統中的圖形界面系統可以查看找到硬體設備,但命令行方式無法找到。

什麼是掛載

掛載,指的就是將設備文件中的頂級目錄連接到Linux根目錄下的某一目錄(最好是空目錄),訪問此目錄就等同於訪問設備文件。由於掛載操作會使得原有目錄中文件被隱藏,因此根目錄以及系統原有目錄都不要作為掛載點,會造成系統異常甚至崩潰,掛載點最好是新建的空目錄。Linux系統使用任何硬體設備,都必須將設備文件與已有目錄文件進行掛載。

根目錄下的/dev/目錄文件負責所有的硬體設備文件,事實上,當U盤插入Linux後,系統也確實會給U盤分配一個目錄文件,就位於/dev/目錄下,但無法通過目錄文件直接訪問U盤數據,訪問此目錄只會提供給你此設備的一些基本信息(比如容量)。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在C#編程過程中,可以使用Convert.ToDecimal方法將字元串或者其他可轉換為數字的對象變數轉換為十進位decimal類型,Convert.ToDecimal方法有多個重載方法,最常使用的一個方法將字元串轉換為decimal類型,方法簽名為:static decimal ToDecimal ...
  • 在C#編程過程中,float.TryParse方法和float.Parse方法都可以將字元串string轉換為單精度浮點類型float,但兩者還是有區別,最重要的區別在於float.TryParse方法在字元串無法轉換為float類型的情況下不會引發程式異常,而float.Parse方法則是直接拋出 ...
  • 在C#編程過程中,可以使用Convert.ToInt32方法將字元串或者其他可轉換為數字的對象變數轉換為ToInt32類型,Convert.ToInt32方法有多個重載方法,最常使用的一個方法將字元串轉換為Int32類型,方法簽名為:static int ToInt32(string value)。 ...
  • 在C#編程過程中,可以使用Convert.ToSingle方法將字元串或者其他可轉換為數字的對象變數轉換為float類型,Convert.ToSingle方法有多個重載方法,最常使用的一個方法將字元串轉換為float類型,方法簽名為:static float ToSingle(string valu ...
  • 在C#編程過程中,可以使用Convert.ToDouble方法將字元串或者其他可轉換為數字的對象變數轉換為double類型,Convert.ToDouble方法有多個重載方法,最常使用的一個方法將字元串轉換為double類型,方法簽名為:static double ToDouble(string v ...
  • 避免上下文延續 在預設情況下,一個 async 方法在被 await 調用後恢復運行時,會在原來的上下文中運行。 為了避免在上下文中恢復運行,可讓 await 調用 ConfigureAwait 方法的返回值,參數 設為 false : 可能導致性能問題 作者Stephen提到,當在UI線程大量使用 ...
  • 可以參考https://www.cnblogs.com/ccsharp/p/3270344.html 和https://blog.csdn.net/baidu_27474941/article/details/52484395 public static bool CheckValidationRe ...
  • 在電腦上使用微信的時候,有時候我們需要自定義PC版微信快捷鍵操作,支持自定義微信快捷鍵設置的有:發送消息快捷鍵、截屏快捷鍵、打開微信快捷鍵以及檢測快捷鍵熱鍵是否與其他軟體設置衝突。並且自定義設置PC微信快捷後,支持一鍵恢復預設設置。 首先登陸PC版微信,進入聊天界面,在PC版微信的聊天視窗左下角有個 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...