《鳥哥的linux私房菜 基礎篇》第八章讀書筆記(上)

第八章 linux磁盤與文件系統管理 

(上)記錄了文件系統中的superblock, inode, block,data block, inode table,filesystem description, block bitmap, inode bitmap,查詢這些信息的命令,掛載點的概念,VFS的簡單定義等。

扇區(sector)爲最小的物理存儲單位,每隔扇區爲512bytes
將扇區組成一個圓,就是磁柱(cylinder),磁柱是分隔槽partition的最小單位
第一扇區最重要,裏面有主開機區MBR,Master boot record,446bytes)及分割表(partition table,64bytes)

磁盤分區意即指定分隔槽的起始與結束磁柱。

磁盤分區完畢後還要進行格式化(format),之後操作系統才能夠使用這個分隔槽,這時因爲每種操作系統所設定的文件屬性/權限並不相同,爲了存放這些檔案所需的數據,因此就需要將分隔槽進行格式化,以成爲操作系統能夠利用的文件系統格式。

稱一個可被掛載的數據爲一個文件系統而不是傳統的一個分隔槽(因爲LVM,RAID的出現)

superblock:記錄此filesystem的整體信息,包括inode/block的總量、使用量、剩餘量,以及文件系統的格式與相關信息等;
inode:記錄檔案的屬性,一個檔案佔用一個inode,同時記錄此檔案的數據所在的block號碼;
block:實際記錄檔案的內容,若檔案太大,會佔用多個block。

每個inode與block都有編號

ext2文件系統中,inode記錄了所有block的號碼,因此可以一口氣將四個block的內容都讀出來,這種數據存取的方法稱爲索引式文件系統(indexed allocation)。
閃存用的是FAT各式的文件系統,他沒有inode存在,因此它沒有辦法將這個檔案的所有block一次性讀取出來。每個block號碼都記錄在前一個block中,因此需要一個一個的將block讀出來後纔會知道下一個block在何處。如果檔案的block太過於離散了,此時檔案的讀取效能將會變的很差,因此需要碎片整理。它將同一個檔案所屬的blocks彙整在一起。

由於ext2是索引式文件系統,基本不太需要常常進行碎片整理。

文件系統一開始就將inode與block規劃好了,除非重新格式化或利用resize2fs等指令變更文件系統大小,否則inode與block固定後就不再變動。

ext2文件系統在格式化的時候基本上是區分多個區塊羣組(block group)的,每隔區塊羣組都有獨立的inode/block/速配而block系統。
文件系統最前面有一個啓動扇區(boot sector),可以安裝開機管理程序,就不用覆蓋整個硬盤唯一的MBR,多重引導的環境。


data block(資料區塊)
ext2中所支持的block大小有1K,2K及4K。格式化的時候,block的大小和數量就已經固定了,想要改變大小就只能重新格式化,且每個block都有編號。

block的大小會影響該文件系統的最大磁盤容量與最大單一檔案容量的改變。雖然ext2已經能夠支持大於2GB以上的單一檔案容量,不過某些應用程序依然使用舊的限制。

每個block內最多隻能放置一個檔案的數據

block定的太大,會造成磁盤容量浪費;定的太小,對大型檔案將會佔用很多歌block,則inode就要記錄很多的block號碼,導致文件系統不良的讀寫性能。

inode table(inode表格)
inode記錄的檔案數據至少有以下幾點:
  • 該檔案的存取模式(read/write/excute)
  • 該檔案的擁有者與羣組(owner/group)
  • 該檔案的容量
  • 該檔案建立或狀態改變的時間(ctime,status time)
  • 最近一次的讀取時間(atime,access time)
  • 最近修改的時間(mtime,modification time)
  • 定義檔案特性的旗標(flag),如SetUID...;
  • 該檔案真正內容的指向(pointer)
inode的數量和大小也是在格式化時就已經固定

  • 每個inode大小均固定爲128bytes
  • 每個檔案都僅會佔用一個inode而已,因此,文件系統能夠建立的檔案數量與inode的數量有關
  • 系統讀取檔案時需先找到inode,並分析inode所記錄的權限與用戶是否相符,若相符才能夠開始實際讀取block內容
由於inode大小僅有128bytes,而記錄一個block號碼需要花4byte,如果一個400MB的檔案,每個block是4K,那麼如何讓inode記錄這麼多個block號碼呢,因此就有了直接索引(12個,如果block大小爲1K,那麼直接索引到的內容最大爲12*1K=12K)、間接索引(1個,這個block地址指向的一個block裏面的內容是block號碼,因此會可以記錄1024byte/4byte=256個block號碼,所以可以間接索引到的內容最大爲256*1K=256K)、兩級間接索引(1個,同理,兩級間接索引就是256*256*1K=256^2K)、三級間接索引(1個,256*256*256*1K=256^3K)。


總額:將直接、間接、二級間接、三級間接想加,得16GB。即當block格式化爲1K大小時,能夠容納的最大檔案爲16GB。但是這個方法不能用在2K及4K block大小的記錄中,因爲大於2K的block會受到ext2文件系統本身的限制,所以計算的結果會不太符合。

superblock(超級區塊)
沒有superblock就沒有filesystem,它記錄的信息主要有:
  • block與inode的總量
  • 未使用與已使用的inode/block數量
  • block與inode的大小(block爲1,2,4K,inode爲128bytes)
  • filesystem的掛載時間、最近一次寫入數據的時間、最近一次檢驗磁盤(fsck)的時間等文件系統的相關信息;
  • 一個valid bit數值,若此文件系統已被掛載,則valid bit值爲0,否則爲1.
superblock大小一般爲1024bytes,每隔block group都可能含有superblock.

Filesystem Description(文件系統描述說明)(不在superblock裏面,以下三個分別在block group中的superblock的後面,這三個之後是Inode表)
這個區段可以描述block group的開始於結束的block號碼,以及說明每隔區段(superblock,bitmap,inodemap,data block)分別介於哪一個block號碼之間

block bitmap(區塊對照表)
新建文檔時,它可以知道哪些block是空的;當刪除檔案時,會有block號碼釋放出來,此時在block bitmap中相對應的該block號碼的標誌就修改成未使用中。

inode bitmap(inode對照表)
與block bitmap相似,記錄使用與未使用的inode號碼

利用dumpe2fs命令可以查看以上這些信息(superblock,block等信息)
dumpe2fs [-bh] 裝置文件名
-b:列出保留位壞軌的部分(一般用不到)
-h:僅列出superblock的數據,不會列出其他區段的內容

裝置文件名怎麼來呢?
利用命令df查看掛載的文件系統的信息,找到掛載的位置(filesystem項),即爲裝置文件名

dumpe2fs列出的信息主要包括:superblock內容(其中有可用的block和inode數量)和每個block group信息;如下圖:


與目錄的關係
ext2給目錄分配一個inode和至少一塊block,inode記錄該目錄的相關權限與屬性,並可記錄分配到的block號碼,而block則記錄在這個目錄下的文件名與該文件名佔用的inode號碼數據

利用ls -i命令(或ls -il)可以觀察目錄內檔案所佔有的inode號碼

inode本身並不記錄文件名,文件名記錄在目錄的block中,所以新增/刪除/更名文件名就與目錄的w權限有關了

由於目錄樹是由根目錄開始讀起的,因此係統透過掛載的信息可以找到掛載點的inode號碼。通常一個filesystem最頂層的inode號碼會由2號開始。

當partition規劃太大,那麼隨着文件系統的使用,一個檔案的數據可能就會越來越分散,那麼會造成硬盤的機械手臂移動幅度過大,存取的效率就很低了

ext2/ext3檔案的存取與日誌式文件系統的功能--利用block bitmap, inode bitmap
新增一個檔案,文件系統的操作:
  1. 確定用戶對新增檔案的目錄具有x,w權限,有才能新增;
  2. 根據inode bitmap找到未使用的inode號碼,並將新檔案的權限/屬性寫入;
  3. 根據block bitmap找到未使用中的block號碼,並將實際數據寫入block,更新inode中的block執行數據;
  4. 更新inode bitmap和block bitmap及superblock的內容
inode table,data block稱爲數據存放區域;其他的比如superblock,block bitmap, inodebitmap等經常變動的爲metadata(中介資料)

在filesystem中規劃出一個區塊,專門記錄寫入或修訂檔案時的步驟,即日誌(ext3)。
基本功能是在發生故障時,可以快速恢復filesystem。
在上面的dumpe2fs輸出的信息也含有日誌的信息(inode 8)

從ext2變到ext3不需要重新格式化

linux的物理內容最後都會被用光,這時正常情況,可加速系統效能

掛載點
每個filesystem都有獨立的inode/block/superblock等信息,要能夠鏈接到目錄樹才能被使用。將文件系統與目錄樹結合的動作稱爲掛載

前面說根目錄的.和..都是/,這是因爲它們對應的inode號是一樣的

ls -l /lib/modules/$(uname -r)/kernel/fs   查看該linux支持的文件系統,在這個目錄裏面
cat /proc/filesystems   查看系統目前已加載到內存中支持的文件系統,記錄在這個文件裏面

Linux VFS (Virtual Filesystem Switch)
整個linux的系統都是透過一個名爲Virtual Filesystem Switch的核心功能去讀取filesystem的。也就是說,整個linux認識的filesystem其實都是VFS在進行管理。省去我們需要自行設定讀取文件系統的定義(在讀取某個文檔時,不需要指定用的是什麼文件系統的模塊)






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章