Linux 的磁盤系統,和你瞭解的Windows差別很大

我的C盤去哪了?

一個系統,如果沒有存儲,那麼也就不能稱之為系統。存儲性是一個完整系統的重要組成部分。例如AWS 最開始的服務就是S3(用來存儲數據的雲服務),足以見得存儲對於一個應用平臺是多麼的重要。

用慣了Windows的夥伴一定對C盤、D盤的概念印象深刻,初次轉到 Mac 或者 Linux 系統下,相信絕大多數人第一個疑問就是:“我的C盤呢?我的軟件裝到哪裡去了?...”。初次有這種疑問很正常,畢竟之前沒有接觸過或者瞭解過 Linux 系統的人,對於 Linux 的文件管理系統陌生也是無可厚非的。在之前《初識Shell(3)》的文章中,關於磁盤管理部分,我簡單講解過Linux系統下是通過虛擬目錄的樹型結構來管理文件系統的,不熟悉的可以翻閱之前的文章。今天主要深入講解一下 Linux 文件系統。

1. ext 文件系統:

ext 文件系統全名是:extended file system), 從誕生開始到普遍成為目前 Linux 髮型版本的默認文件系統,ext 總體上經歷了4代。ext最開始依然是採用模仿老大哥 Unix 文件系統的功能,使用虛擬目錄來操作硬件存儲設備。ext通過索引節點(inode) 系統來存放虛擬目錄中的文件信息。索引節點系統會在每個物理設備中創建一個索引節點表,物理設備上每添加一個文件信息,就會在索引節點表中增加一條記錄來跟蹤這條文件信息。熟悉C++的程序員可能會有一種似曾相識的感覺吧,和類對象的虛函數表原理非常相似,通過一個虛函數表來跟蹤虛函數從而實現多態。

Linux 的磁盤系統,和你瞭解的Windows差別很大

ext有不少限制,例如文件大小不能超過2GB,數據塊存儲碎片化等缺點。對於一代的限制,ext2做出了一些擴展,文件限制也擴展到了2TB,同時也增添了一些額外的文件信息屬性,對數據塊存儲做了分組以減輕碎片化問題,但是ext2仍有缺陷,因為索引節點信息和文件存儲過程並不是原子化的,所以存儲過程中如果出現類似斷電等意外,整個存儲過程就被破壞了。針對這個問題,人們引入了日誌文件系統,即文件在真正成功寫入存儲設備之前,會先保存到一個臨時文件(journal文件),如果在存儲過程中出現崩潰或者斷電,日誌文件系統會在下次恢復時從上次失敗的節點繼續執行,相當於增加了一個日誌節點,來實現斷點執行。這後來被整合到ext3中。後來ext4又在ext3基礎之上增加了數據壓縮和加密的屬性。目前ext4也是大多數 Linux release版本採用的默認文件系統。日誌文件系統還包括一些其他分支,例如 IBM 的 JFS 文件系統, SGI 的 XFS 文件系統等,此處就不做詳細介紹了。

寫時複製文件系統(copy-on-write,COW)

COW是日誌式的另一種解決方案,通過快照實現修復數據並保留原始數據的一種文件系統。因為可以保留原始數據,而不是直接覆蓋,所以在安全性和性能上有比較好的平衡。比較流行的有 Sun 公司研發的 ZFS 文件系統和 Oracle 研發的 Btrfs 文件系統。

管理文件系統

1. 創建分區(fdisk):要想硬盤在Linux 系統下能夠存儲文件,首先要對硬盤分區。分區的目的一是可以保證數據的安全性,當一個分區有問題不會影響另一個分區,二來因為分區,使數據集中,提高訪問速度。分區命令如下:

<code>fdisk /dev/sda #對硬盤 sda 分區。
/<code>

2. 創建分區後,要用選的的文件系統對其進行格式化。常用的命令:

<code>mkfs.ext4 #創建ext4文件系統
mkfs.xfs # 創建XFS文件系統
/<code>

3. 分區按照選的文件系統格式化後,就具備了存儲功能,但是如果想在 Linux 下使用,還需要將它掛在到 Linux 的虛擬目錄下,成為 Linux 系統的一部分。

<code>mount -t filesystemType /dev/ada1 /mnt/my_partition
/<code>

現在這塊硬盤就可以真正的開始存儲內容了。

邏輯卷管理(LVM: Logical Volume Manager)

要想了解邏輯卷管理的內容,首先有幾個概念要清楚。

PV(physical volume) 物理卷,相對於邏輯卷的物理概念,可以理解物理硬盤就是物理卷。

VG(volume group)卷組,多個物理卷組合在一起,成為一個卷組,卷組並不侷限於單獨一個硬盤,它可以由分佈在多個物理硬盤上多個物理分區組成。

LV(logical volume)邏輯卷,顧名思義,它是搭建在物理硬盤基礎上的一種邏輯概念,就像網絡的OSI模型,如果把物理卷比作底層網絡鏈路層的硬件平臺,那麼邏輯卷就是凌駕於物理卷之上的人為定義的軟件層統一接口,通過接口層將操作系統與硬件隔離開來,實現更加靈活和移植性更好地軟硬件系統。


Linux 的磁盤系統,和你瞭解的Windows差別很大

如果我們直接在物理分區上創建文件系統,那麼當物理硬盤分區空間達到上限時,我們只能更換更大的物理硬盤,然後拷貝原有硬盤的內容到新硬盤上,再擴容物理分區。這種移植性和靈活性是非常差的。邏輯分區就是有效的解決這種問題,如上文說道,邏輯分區是建立在物理分區和操作系統之間的接口層,通過將二者分離,實現操作系統不再直接依賴物理分區。這樣就可以非常靈活的對存儲空間進行擴容。只要保證新掛載的硬盤遵守統一的邏輯卷接口協議即可。


分享到:


相關文章: