全面解析文件文件系統

前言:

文件系統作為linux總最基礎的但愿。理解并深入了解文件系統對linux的學習有重要意義。我們從文件系統創建,構成以及工作流程幾個方面全方位的介紹文件系統的相關概念。

簡述:

一塊完整的磁盤經過分區后我們就可以通過格式化,根據我們的需求構建文件系統能使用的文件系統格式。傳統的文檔系統中,一個分區就只能夠被格式化為一個文件系統。所以我們可以說一個文件系統就是一個分區。但因為新技術的引用,我們在格式化時已經不再說是針對分區格式化了,通常我們可以把一個可被掛載的資料稱為一個文件系統。

文件系統內的文件除了文件本身的內容外,通常會包含許多與文件本身內容無關的屬性,例如文件的權限,時間參數,屬主等。我們把這種文件自身的屬性稱作元數據(metadata),把文件內容稱為數據(data.文件系統將這兩部分數據分別存放在不同的區域,文件屬性放置到inode(引用節點)中,實際數據則放置在data block區域中。另外還有一個超級區塊(superblock會記錄整個檔案系統的整體信息,包括inodeblock的總量,使用量和剩余量等。

磁盤的基本單位是扇區,每個扇區的大小為512個字節,如果文件系統以扇區為基本存儲單位,再給每個扇區進行編號,那么光是扇區的編號就占了好大的存儲空間,所以文件系統是block為最小存儲單位的,一個block典型的大小是1024字節或者4096字節,在磁盤格式化就得設置好,并且之后不可修改。一個block最多只能放置一個文件,即使這個文件只有1個字節。

Inodeblock都是有編號的。每個文件占用一個inode,inode所存放的元數據包含文件數據放置的block號碼。因為,如果能找到inode的話,那么自然就會知道這個檔案所放置資料的block號碼。當然也就能讀出該文件的實際數據了。

我們將inodeblock區塊用圖解來說明下,如下圖所示,文件系統先格式化出inodeblock的區域,假設某一文件的元數據放置在inode4號的位置,而這個inode記錄了文件數據實際存放在2,7,13,15這四個block號碼所對應的block中,這樣我們的文件系統就能一次把4block中的內容讀取出來。這種資料存取的方法我們稱為索引式文檔系統(indexed allocation)

filesystem-1.jpg

詳細描述:

通過前面的簡述,我們已經大概了解到linux文件系統相關的概念:inode,block,superblock。文件系統一開始就將inodeblock規劃好了,除非從新格式化(或者利用resize2fs等指令變更文件系統大?。?,否則inodeblock固定后就不變動。為管理的方便,inodeblock并沒有被放在一起。而是文件系統在格式化的時候基本就劃分為多個區塊群組(block group)的,并且每個區塊群組都有自己獨立的inode/block/superblock系統。Linux文件系統格式化后有點像下面這樣:

block group.jpg

每個區塊內容說明如下:

  • Data block

Data block是用來存放文件數據的地方。在linux文件系統中block的大小有1K,2K以及4K三種。在格式化時block的大小就固定了,且每個block都有編號,以方便inode的記錄。

  • Inode table(inode 表格)

Inode主要保存以下文件的元數據:

         文件類型,權限,UID,GID

         鏈接數(即硬鏈接數)

         該文件的大小和不同的時間戳

         指向磁盤上文件的數據塊指針

         定義文件特性的標記,如SetUID..

每個inode的大小固定為128 bytes(新的ext4xfs可設定到256bytes),每個文件都只占有一個inode。一個block的大小就幾k,而一個文件卻大的多,而inode記錄一條block號碼就要花掉4字節,那我們有如何用128字節的inode去記錄成千上萬的block號碼的記錄呢?為此我們的系統很聰明的將inode記錄block號碼的區域定義為12個直接,一個間接,一個雙重間接,一個三重間接。這是什么呢?我們把Inode的結構畫出來:

inode.jpg

  上圖左邊為inode本身(128字節),里面有12個直接指向block號碼的對照,這12個記錄都能直接取得block號碼。之后所謂的簡介就是拿一個block來當作記錄block號碼的記錄器,如果文件太大就會使用簡介的block來記錄號碼。同理,如果,文件持續長大,那么就會利用所謂的雙間接,第一個block僅再指出下一個記錄號碼的block在哪里,實際記錄的在第二個block當中。以此類推,三簡介就是利用第三層block來記錄號碼。


  • Superblock(超級區塊)

Superblock是記錄整個文件系統相關信息的地方,沒有superblock,就沒有整個文件系統了,其中的信息主要包含:blockinode的總量,未使用的數量,blockinode的大小,文件系統的各種時間,以及文件系統被掛載與否的狀態標識。

一個文件系統中僅有一個superblock,除了第一個block group內含有碎片而block之外,后續的block group不一定含有superblock,即使有,也僅僅是作為第一個block groupsurperblock的備份而已。


  • Filesystem Description(文件系統描述說明)


這個區段可以描述每個block group的開始與結束的block號碼,以及說明每個區段(superblock,bitmap,inodemap,data block)分別介于哪兩個block號碼之間。


  • Block bitmap(區塊對照表)和inode bitmapinode對照表)


分別用來記錄使用和未使用的block號碼和inode號碼。當我們使用或者釋放blockinode時就可以通過這個兩個對照表進行查看。

目錄

linux文件中有一個特殊的文件就是目錄文件,首先,不要被windows中文件夾的說法而擾亂。目錄文件的內容就是一張目錄下所有文件的文件名與inode號碼的對照表。

目錄.jpg

當我們打開一個目錄下名為 文件1的文件時,系統通過目錄的對照表找到文件的inode號,通過inode號獲取inode信息,最后根據Inode信息找到文件數據所在的區域,讀出數據。所以目錄并不是一個盒子把文件都裝在里面,而是一個文件的清單,然后通過這個清單找到文件。

總結:

   關于文件系統的基本概念就先講到這里,而之后文件的權限,又是一大塊內容,得分單獨博客進行說明。文件系統做為linux的基礎,理解其各個基礎概念是學習linux所必須的基礎。

原創文章,作者:M21-陜西-李賢,如若轉載,請注明出處:http://www.www58058.com/53191

(0)
M21-陜西-李賢M21-陜西-李賢
上一篇 2016-11-14 08:30
下一篇 2016-11-14 11:31

相關推薦

  • Linux文件類型及把剩下的顏色標識

    Linux文件類型及bash下的顏色標識 Linux一切皆文件 查看文件類型的命令: 例如:列出ls的文件類型                file  /bin/ls 例如:粗略的列出文件類型           &n…

    Linux干貨 2016-10-16
  • useradd命令

    useradd創建用戶 使用格式: useradd[options] LOGIN -c:備注信息保存在passwd的備注欄中。 -d:用戶登入時的主目錄 -e:賬號的失效日期,缺省表示永久有效。 -f:密碼過期后多少天關閉該賬號。 -g:用戶所屬組。 -G:用戶所屬的附加群組。 -m:自動創建用戶的登入目錄。 -M:不要自動創建用戶的登入目錄。 -n:取消創…

    Linux干貨 2017-12-20
  • 配置DNS服務

    DNS:Domain Name System:域名系統 DNS:Domain Name System:域名系統 域名和IP地址相互映射的一個分布式數據庫,使用戶使用域名更方便的訪問互聯網,不用去記更利于機器讀取的IP地址,域名解析由DNS服務器提供。 DNS服務器的類型: 主DNS服務器:管理和維護所負責解析的域內解析庫的服務器 從DNS服務器:從主服務器或…

    Linux干貨 2016-10-24
  • NFS服務

    NFS服務:       NFS:Network File System 網絡文件系統,基于內核的文件系統。 Sun公司開發,通過使用NFS,用戶和程序可以像訪 問本地文件一樣訪問遠端系統上的文件,基于RPC(Remote Procedure Call Protocol遠程過程調用)實現 。 RPC采用C/S模式??蛻魴C請求程序…

    2017-08-14
  • httpd服務——CentOS7

    httpd-2.4 新特性:      (1)MPM支持運行為DSO機制;以模塊形式按需加載      (2)event MPM生產環境可用      (3)異步讀寫機制      (4)支持每個模塊…

    Linux干貨 2016-10-12
  • 文本處理grep

    grep:文本過濾(模式:pattern)工具grep, egrep, fgrep【適合處理比較大的文本】(不支持正則表達式搜索) sed:stream editor,文本編輯工具 awk:Linux上的實現gawk,文本報告生成器 grep(Global search 全局搜索 Regular expression 正則表達式 and Print out …

    Linux干貨 2017-05-09
欧美性久久久久