1. 程式人生 > >Linux 的 EXT4 檔案系統的歷史、特性以及最佳實踐

Linux 的 EXT4 檔案系統的歷史、特性以及最佳實踐

我想要更深入地瞭解 EXT 檔案系統的特性的詳細內容,但是首先讓我們來回答一個問題,“什麼樣才算是一個檔案系統 ?” 一個檔案系統應該涵蓋以下所有特點:

  1. 資料儲存: 對於任何一個檔案系統來說,一個最主要的功能就是能夠被當作一個結構化的容器來儲存和獲取資料。

  2. 名稱空間: 名稱空間是一個提供了用於命名與組織資料的命名規則和資料結構的方法學。

  3. 安全模型: 一個用於定義訪問許可權的策略。

  4. API: 操作這個系統的物件的系統功能呼叫,這些物件諸如目錄和檔案。

  5. 實現: 能夠實現以上幾點的軟體。

本文內容的討論主要集中於上述幾點中的第一項,並探索為一個 EXT 檔案系統的資料儲存提供邏輯框架的元資料結構。

EXT 檔案系統歷史

雖然 EXT 檔案系統是為 Linux 編寫的,但其真正起源於 Minix 作業系統和 Minix 檔案系統,而 Minix 最早釋出於 1987,早於 Linux 5 年。如果我們從 EXT 檔案系統大家族的 Minix 起源來觀察其歷史與技術發展那麼理解 EXT4 檔案系統就會簡單得多。

Minix

當 Linux Torvalds 在寫最初的 Linux 核心的時候,他需要一個檔案系統但是他又不想自己寫一個。於是他簡單地把 Minix 檔案系統 加了進去,這個 Minix 檔案系統是由 Andrew S. Tanenbaum 寫的,同時它也是 Tanenbaum 的 Minix 作業系統的一部分。Minix 是一個類 Unix 風格的作業系統,最初編寫它的原因是用於教育用途。Minix 的程式碼是自由可用的並有適當的許可協議,所以 Torvalds 可以把它用 Linux 的最初版本里。

Minix 有以下這些結構,其中的大部分位於生成檔案系統的分割槽中:

  • 引導扇區 是硬碟安裝後的第一個扇區。這個引導塊包含了一個非常小的引導記錄和一個分割槽表。

  • 每一個分割槽的第一個塊都是一個包含了元資料的超級塊superblock ,這些元資料定義了其他的檔案系統結構並將其定位於物理硬碟的具體分割槽上。

  • 一個 inode 點陣圖塊 決定了哪些 inode 是在使用中的,哪一些是未使用的。

  • inode 在硬碟上有它們自己的空間。每一個 inode 都包含了一個檔案的資訊,包括其所處的資料塊的位置,也就是該檔案所處的區域。

  • 一個 區點陣圖 用於保持追蹤資料區域的使用和未使用情況。

  • 一個 資料區, 這裡是資料儲存的地方。

對上述了兩種點陣圖型別來說,一個位bit表示一個指定的資料區或者一個指定的 inode。 如果這個位是 0 則表示這個資料區或者這個 inode 是未使用的,如果是 1 則表示正在使用中。

那麼,inode 又是什麼呢 ? 就是 index-node(索引節點)的簡寫。 inode 是位於磁碟上的一個 256 位元組的塊,用於儲存和該 inode 對應的檔案的相關資料。這些資料包含了檔案的大小、檔案的所有者和所屬組的使用者 ID、檔案模式(即訪問許可權)以及三個時間戳用於指定:該檔案最後的訪問時間、該檔案的最後修改時間和該 inode 中的資料的最後修改時間。

同時,這個 inode 還包含了位置資料,指向了其所對應的檔案資料在硬碟中的位置。在 Minix 和 EXT 1-3 檔案系統中,這是一個數據區和塊的列表。Minix 檔案系統的 inode 支援 9 個數據塊,包括 7 個直接資料塊和 2 個間接資料塊。如果你想要更深入的瞭解,這裡有一個優秀的 PDF 詳細地描述了 Minix 檔案系統結構 。同時你也可以在維基百科上對 inode 指標結構 做一個快速瞭解。

EXT

原生的 EXT 檔案系統 (意即擴充套件的extended) 是由 Rémy Card 編寫並於 1992 年與 Linux 一同發行。主要是為了克服 Minix 檔案系統中的一些檔案大小限制的問題。其中,最主要的結構變化就是檔案系統中的元資料。它基於 Unix 檔案系統 (UFS),其也被稱為伯克利快速檔案系統(FFS)。我發現只有很少一部分關於 EXT 檔案系統的發行資訊是可以被確證的,顯然這是因為其存在著嚴重的問題,並且它很快地被 EXT2 檔案系統取代了。

EXT2

EXT2 檔案系統 就相當地成功,它在 Linux 發行版中存活了多年。它是我在 1997 年開始使用 Red Hat Linux 5.0 時接觸的第一個檔案系統。實際上,EXT2 檔案系統有著和 EXT 檔案系統基本相同的元資料結構。然而 EXT2 更高瞻遠矚,因為其元資料結構之間留有很多供將來使用的磁碟空間。

和 Minix 類似,EXT2 也有一個引導扇區 ,它是硬碟安裝後的第一個扇區。它包含了非常小的引導記錄和一個分割槽表。接著引導扇區之後是一些保留的空間,它填充了引導記錄和硬碟驅動器上的第一個分割槽(通常位於下一個柱面)之間的空間。GRUB2 – 也可能是 GRUB1 – 將此空間用於其部分引導程式碼。

每個 EXT2 分割槽中的空間被分為柱面組cylinder group,它允許更精細地管理資料空間。 根據我的經驗,每一組大小通常約為 8MB。 下面的圖 1 顯示了一個柱面組的基本結構。 柱面中的資料分配單元是塊,通常大小為 4K。

圖 1: EXT 檔案系統中的柱面組的結構

柱面組中的第一個塊是一個超級塊superblock,它包含了元資料,定義了其它檔案系統的結構並將其定位於物理硬碟的具體分割槽上。分割槽中有一些柱面組還會有備用超級塊,但並不是所有的柱面組都有。我們可以使用例如 dd 等磁碟工具來拷貝備用超級塊的內容到主超級塊上,以達到修復損壞的超級塊的目的。雖然這種情況不會經常發生,但是在幾年前我的一個超級塊損壞了,我就是用這種方法來修復的。幸好,我很有先見之明地使用了 dumpe2fs 命令來備份了我的系統上的分割槽描述符資訊。

以下是 dumpe2fs 命令的一部分輸出。這部分輸出主要是超級塊上包含的一些元資料,同時也是檔案系統上的前兩個柱面組的資料。

# dumpe2fs /dev/sda1

Filesystem volume name:   boot

Last mounted on:          /boot

Filesystem UUID:          79fc5ed8-5bbc-4dfe-8359-b7b36be6eed3

Filesystem magic number:  0xEF53

Filesystem revision#:    1 (dynamic)

Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent64bitflex_bg sparse_super large_file huge_file dir nlink extra_isize

Filesystem flags:         signed_directory_hash

Defaultmount options:    user_xattr acl

Filesystem state:         clean

Errors behavior:          Continue

Filesystem OS type:       Linux

Inode count:              122160

Block count:              488192

Reserved block count:     24409

Free blocks:              376512

Free inodes:              121690

First block:              0

Block size:               4096

Fragment size:            4096

Group descriptor size:    64

Reserved GDT blocks:      238

Blocks per group:         32768

Fragments per group:      32768

Inodes per group:         8144

Inode blocks per group:   509

Flex block group size:    16

Filesystem created:       Tue Feb709:33:342017

Last mount time:          Sat Apr2921:42:012017

Last write time:          Sat Apr2921:42:012017

Mount count:              25

Maximum mount count:      -1

Last checked:             Tue Feb709:33:342017

Check interval:           0(<none>)

Lifetime writes:          594MB

Reserved blocks uid:      0(user root)

Reserved blocks gid:      0(group root)

First inode:              11

Inode size:               256

Required extra isize:     32

Desired extra isize:      32

Journal inode:            8

Defaultdirectory hash:   half_md4

Directory Hash Seed:      c780bac9-d4bf-4f35-b695

相關推薦

LinuxEXT4 檔案系統歷史特性以及最佳實踐

我想要更深入地瞭解 EXT 檔案系統的特性的詳細內容,但是首先讓我們來回答一個問題,“什麼樣才算是一個檔案系統 ?” 一個檔案系統應該涵蓋以下所有特點: 資料儲存: 對於任何一個檔案系統來說,一個最主要的功能就是能夠被當作一個結構化的容器來儲存和獲取資料。

Linux.ext4檔案系統 .inode和extent

最近在看相關內容,不過總是不是很系統,今日看到此部落格,感覺恍然大悟,作者寫的非常棒:轉載: https://blog.csdn.net/stringNewName/article/details/73740155 為表示對作者的尊敬,一字不動的敲擊! 最近在看ext4

Linux ext4檔案系統下 extundelete 恢復 誤刪除的檔案

1、檔案基本操作 1.1 檢視檔案 # ls   1.2 建立 1.2.1 建立檔案 # touch {file_name} # vim {file_name}   1.2.2 建立目錄 # mkdir -p {dir}   1.3 複製 1.3.1 複

Linux ext4檔案系統原理-檔案系統結構及檔案解析

基本概念 1扇區(sector)=512位元組(byte) 1資料塊(block)=8扇區=4KB(mkfs時指定,預設4KB,可設定為1KB - 64KB) Ext4欄位使用little-endian順序寫入磁碟;但journal日誌使用big-endian順序寫入磁碟。

02.linux檔案系統簡介檢視目錄ls命令切換目錄cd命令建立目錄mkdir刪除目錄rm移動重新命名mv建立檔案touch拷貝cp

整個檔案系統有一個頂層目錄:/ bin:存放一些可執行的程式(命令); boot:存放系統啟動所需要的一些檔案; dev:系統中的硬體(硬體在Linux中通過裝置檔案來標識); etc:存放配置檔案的地方; home:使用者目錄的總目錄; lib

Linux日誌檔案系統(EXT4XFSJFS)及效能分析

注:檢視自己系統的檔案格式 df -T 自上一篇《Ext2 v.s. Ext3 v.s. Ext4 效能比拼》 釋出以來,社會各界紛紛來電來函,給出了“Ext4 我看行”,“Ext4 牛牛牛”,“用了 Ext4,嘿,還真對得起這塊盤”,“Ext4,碎片去無蹤,效能更

Linux 磁碟分割槽,檔案系統建立掛載和解除安裝

建立分割槽 (fdisk): 第一步先在Linux的虛擬機器上新增一塊硬碟,新增完成後需要重啟虛擬機器才能夠檢測識別到新硬碟。 重啟系統後可以使用 fdisk -l 命令檢視當前所有磁碟分割槽情況,sdb為我們剛剛建立的新磁碟,可以與上面的sda磁碟對比,發現新磁碟sdb還沒有分割槽。接下來就是為

Linux fsync和fdatasync系統呼叫實現分析(Ext4檔案系統

參考:https://blog.csdn.net/luckyapple1028/article/details/61413724 在Linux系統中,對檔案系統上檔案的讀寫一般是通過頁快取(page cache)進行的(DirectIO除外),這樣設計的可以延時磁碟IO的操作,從而可以減少磁碟讀

linux檔案系統以及使用者組等概念

一、Linux檔案結構及基本資料夾 目錄 描述 / 根目錄 /bin 做為基礎系統所需要的最基礎的命令就是放在這裡。比如 ls、cp、mkdir等命令;功能和

Linux掛載SD卡中的 ext4 檔案系統

按照黑金教程移植的Linux,開發板啟動後掛載的檔案系統其實是 uImage 映象中小檔案系統(即 ramdisk 中的檔案系統)。Linux啟動後會出現這樣的提示 “mmc1: tried to reset card”、“blk_update_request: I/O er

linux下如何製作ext4檔案系統映象

1.生成一個空的2MiB檔案 dd if=/dev/zero of=rootfs.ext4 bs=1024 count=2048 (指定每一塊大小為1024位元組,一共又2048塊,那麼就是2048 * 1024 B = 2MiB) 2.對生成的檔案進行格式化 mkfs.ext4 rootfs.ext4

Linux TF卡ext4檔案系統錄製視訊檔案用拷貝不用移動的影響

環境     TF卡ext4檔案系統錄製大量視訊檔案後,出現TF卡損壞不能寫的情況,探究用拷貝不用移動的影響。 分析     錄製5分鐘視訊,臨時檔名為開始時間,錄製結束後拷貝到TF卡其他目錄,並把結束時間加在檔名上,然後刪除臨時檔案;

04 Linux檔案系統和目錄結構及bash特性

Linux檔案系統:   Linux:glibc   程式編譯方式:     動態連結式編譯     靜態連結式編譯   程序的型別:     終端:硬體裝置,在硬體裝置上可以關聯一個使用者介面,從而讓使用者用此介面與作業系統打交道     與終端相關:通過終端啟動     與終端無關:操作引

用uboot 燒寫uboot linux核心 檔案系統到nandflash的 過程以及bootm go命令啟動與區別

文章結構 結構順序有變化 -1:燒寫uboot 0: bootargs bootcmd 命令引數的設定 1:製作yaffs2的過程 2:燒寫yaffs2的過程 3:製作uimage 的過程 4: 燒寫uiamge的過程 5:uimage zimage vm

linux ext3 ext4 檔案系統 rm -rf刪除後資料快速恢復

linux ext3 ext4 rm -rf刪除後資料快速恢復辦法: rm -rf 後一定不要再在所在分割槽上增加和修改檔案!!!否則會把已刪除檔案覆蓋掉!!! 1.檢視磁碟檔案系統格式:ext3 [[email protected]_45_128_cento

用uboot 燒寫uboot linux核心 檔案系統到nandflash的 過程以及bootm go命令啟動與區別(2010-12-19 17:27:43)

文章結構 結構順序有變化 -1:燒寫uboot 0: bootargs bootcmd 命令引數的設定 1:製作yaffs2的過程 2:燒寫yaffs2的過程 3:製作uimage 的過程 4: 燒寫uiamge的過程 5:uimage zimage vmlinux 的區別 6: uboot傳遞給核心的引數結

Ext4檔案系統fsck後損壞的修復過程-linux資料恢復

在資料恢復案例開始之前有幾個概念需要了解塊組:Ext4檔案系統的全部空間被劃分為若干個塊組,每個塊組內的結構都是大致相同的。塊組描述符表:每個塊組都對應一個塊組描述符,這些塊組描述符統一放在檔案系統的前部,稱為塊組描述符表。每個塊組描述符大小為32位元組,其主要描述塊點陣圖、

linux下U盤檔案系統型別的識別以及掛載

[email protected]:/mnt/usb# file -s /dev/sdb2 /dev/sdb2: Linux rev 1.0 ext4 filesystem data, UUID=bd6c04e2-e77d-4110-b1fe-65fc67ac0a46 (needs journa

Windows下檢視Linuxext4檔案系統

    本人機子上裝的是Windows 7 & CentOS 6.5雙系統,前段時間在部落格中記錄過文章:Linux通過ntfs-3g掛載ntfs檔案系統,而Windows 7下檢視Linux中的ext4檔案系統,我是通過LinuxReader實現。LinuxRe

Ext4檔案系統特性和功能簡介

Linux kernel 自 2.6.28 開始正式支援新的檔案系統 Ext4。 Ext4 是 Ext3 的改進版,修改了 Ext3 中部分重要的資料結構,而不僅僅像 Ext3 對 Ext2 那樣,只是增加了一個日誌功能而已。Ext4 可以提供更佳的效能和可靠性,還有更為豐富的功能:/. 與 Ext3 相容