1. 程式人生 > >Linux 磁碟與檔案系統管理(鳥哥私房菜)

Linux 磁碟與檔案系統管理(鳥哥私房菜)

第六章當中我們介紹過 Linux 的檔案除了原有的資料內容外,還含有非常多的許可權與屬性,這些許可權與屬性是為了保護每個使用者所擁有資料的隱密性。 而前一小節我們知道 filesystem 裡面可能含有的 inode/block/superblock 等。為什麼要談這個呢?因為標準的 Linux 檔案系統 Ext2 就是使用這種 inode 為基礎的檔案系統啦!

而如同前一小節所說的,inode 的內容在記錄檔案的許可權與相關屬性,至於 block 區塊則是在記錄檔案的實際內容。 而且檔案系統一開始就將 inode 與 block 規劃好了,除非重新格式化(或者利用 resize2fs 等命令變更檔案系統大小),否則 inode 與 block 固定後就不再變動

。但是如果仔細考慮一下,如果我的檔案系統高達數百GB時, 那麼將所有的 inode 與 block 通通放置在一起將是很不智的決定,因為 inode 與 block 的數量太龐大,不容易管理。

為此之故,因此 Ext2 檔案系統在格式化的時候基本上是區分為多個區塊群組 (block group) 的,每個區塊群組都有獨立的 inode/block/superblock 系統。感覺上就好像我們在當兵時,一個營裡面有分成數個連,每個連有自己的聯絡系統, 但最終都向營部回報連上最正確的資訊一般!這樣分成一群群的比較好管理啦!整個來說,Ext2 格式化後有點像底下這樣:

ext2檔案系統示意圖
圖1.3.1、ext2檔案系統示意圖(
注1
)

在整體的規劃當中,檔案系統最前面有一個啟動扇區(boot sector),這個啟動扇區可以安裝啟動管理程式, 這是個非常重要的設計,因為如此一來我們就能夠將不同的啟動管理程式安裝到個別的檔案系統最前端,而不用覆蓋整顆硬碟唯一的 MBR, 這樣也才能夠製作出多重引導的環境啊!至於每一個區塊群組(block group)的六個主要內容說明如後:

  • data block (資料區塊)

data block 是用來放置檔案內容資料地方,在 Ext2 檔案系統中所支援的 block 大小有 1K, 2K 及 4K 三種而已。在格式化時 block 的大小就固定了,且每個 block 都有編號,以方便 inode 的記錄啦。 不過要注意的是,由於 block 大小的差異,會導致該檔案系統能夠支援的最大磁碟容量與最大單一檔案容量並不相同。 因為 block 大小而產生的 Ext2 檔案系統限制如下:(

注2)

Block 大小 1KB 2KB 4KB
最大單一檔案限制 16GB 256GB 2TB
最大檔案系統總容量 2TB 8TB 16TB

你需要注意的是,雖然 Ext2 已經能夠支援大於 2GB 以上的單一檔案容量,不過某些應用程式依然使用舊的限制, 也就是說,某些程式只能夠捉到小於 2GB 以下的檔案而已,這就跟檔案系統無關了! 舉例來說,鳥哥在環工方面的應用中有一套秀圖軟體稱為PAVE(注3), 這套軟體就無法捉到鳥哥在數值模式模擬後產生的大於 2GB 以上的檔案!害的鳥哥常常還要重跑數值模式...

除此之外 Ext2 檔案系統的 block 還有什麼限制呢?有的!基本限制如下:

  • 原則上,block 的大小與數量在格式化完就不能夠再改變了(除非重新格式化);
  • 每個 block 內最多隻能夠放置一個檔案的資料;
  • 承上,如果檔案大於 block 的大小,則一個檔案會佔用多個 block 數量;
  • 承上,若檔案小於 block ,則該 block 的剩餘容量就不能夠再被使用了(磁碟空間會浪費)。

如上第四點所說,由於每個 block 僅能容納一個檔案的資料而已,因此如果你的檔案都非常小,但是你的 block 在格式化時卻選用最大的 4K 時,可能會產生一些容量的浪費喔!我們以底下的一個簡單例題來算一下空間的浪費吧!

例題: 假設你的Ext2檔案系統使用 4K block ,而該檔案系統中有 10000 個小檔案,每個檔案大小均為 50bytes, 請問此時你的磁碟浪費多少容量? 答: 由於 Ext2 檔案系統中一個 block 僅能容納一個檔案,因此每個 block 會浪費『 4096 - 50 = 4046 (byte)』, 系統中總共有一萬個小檔案,所有檔案容量為:50 (bytes) x 10000 = 488.3Kbytes,但此時浪費的容量為:『 4046 (bytes) x 10000 = 38.6MBytes 』。想一想,不到 1MB 的總檔案容量卻浪費將近 40MB 的容量,且檔案越多將造成越多的磁碟容量浪費。

什麼情況會產生上述的狀況呢?例如 BBS 網站的資料啦!如果 BBS 上面的資料使用的是純文字檔案來記載每篇留言, 而留言內容如果都寫上『如題』時,想一想,是否就會產生很多小檔案了呢?

好,既然大的 block 可能會產生較嚴重的磁碟容量浪費,那麼我們是否就將 block 大小訂為 1K 即可? 這也不妥,因為如果 block 較小的話,那麼大型檔案將會佔用數量更多的 block ,而 inode 也要記錄更多的 block 號碼,此時將可能導致檔案系統不良的讀寫效能。

所以我們可以說,在您進行檔案系統的格式化之前,請先想好該檔案系統預計使用的情況。 以鳥哥來說,我的數值模式模擬平臺隨便一個檔案都好幾百 MB,那麼 block 容量當然選擇較大的!至少檔案系統就不必記錄太多的 block 號碼,讀寫起來也比較方便啊!

  • inode table (inode 表格)

再來討論一下 inode 這個玩意兒吧!如前所述 inode 的內容在記錄檔案的屬性以及該檔案實際資料是放置在哪幾號 block 內! 基本上,inode 記錄的檔案資料至少有底下這些:(注4)

  • 該檔案的存取模式(read/write/excute);
  • 該檔案的擁有者與群組(owner/group);
  • 該檔案的容量;
  • 該檔案建立或狀態改變的時間(ctime);
  • 最近一次的讀取時間(atime);
  • 最近修改的時間(mtime);
  • 定義檔案特性的旗標(flag),如 SetUID...;
  • 該檔案真正內容的指向 (pointer);

inode 的數量與大小也是在格式化時就已經固定了,除此之外 inode 還有些什麼特色呢?

  • 每個 inode 大小均固定為 128 bytes;
  • 每個檔案都僅會佔用一個 inode 而已;
  • 承上,因此檔案系統能夠建立的檔案數量與 inode 的數量有關;
  • 系統讀取檔案時需要先找到 inode,並分析 inode 所記錄的許可權與使用者是否符合,若符合才能夠開始實際讀取 block 的內容。

我們約略來分析一下 inode / block 與檔案大小的關係好了。inode 要記錄的資料非常多,但偏偏又只有 128bytes 而已, 而 inode 記錄一個 block 號碼要花掉 4byte ,假設我一個檔案有 400MB 且每個 block 為 4K 時, 那麼至少也要十萬筆 block 號碼的記錄呢!inode 哪有這麼多可記錄的資訊?為此我們的系統很聰明的將 inode 記錄 block 號碼的區域定義為12個直接,一個間接, 一個雙間接與一個三間接記錄區。這是啥?我們將 inode 的結構畫一下好了。

inode 結構示意圖
圖1.3.2、inode 結構示意圖(注5)

上圖最左邊為 inode 本身 (128 bytes),裡面有 12 個直接指向 block 號碼的對照,這 12 筆記錄就能夠直接取得 block 號碼啦! 至於所謂的間接就是再拿一個 block 來當作記錄 block 號碼的記錄區,如果檔案太大時, 就會使用間接的 block 來記錄編號。如上圖 1.3.2 當中間接只是拿一個 block 來記錄額外的號碼而已。 同理,如果檔案持續長大,那麼就會利用所謂的雙間接,第一個 block 僅再指出下一個記錄編號的 block 在哪裡, 實際記錄的在第二個 block 當中。依此類推,三間接就是利用第三層 block 來記錄編號啦!

這樣子 inode 能夠指定多少個 block 呢?我們以較小的 1K block 來說明好了,可以指定的情況如下:

  • 12 個直接指向: 12*1K=12K
    由於是直接指向,所以總共可記錄 12 筆記錄,因此總額大小為如上所示;

  • 間接: 256*1K=256K
    每筆 block 號碼的記錄會花去 4bytes,因此 1K 的大小能夠記錄 256 筆記錄,因此一個間接可以記錄的檔案大小如上; 

  • 雙間接: 256*256*1K=2562K
    第一層 block 會指定 256 個第二層,每個第二層可以指定 256 個號碼,因此總額大小如上;

  • 三間接: 256*256*256*1K=2563K
    第一層 block 會指定 256 個第二層,每個第二層可以指定 256 個第三層,每個第三層可以指定 256 個號碼,因此總額大小如上;

  • 總額:將直接、間接、雙間接、三間接加總,得到 12 + 256 + 256*256 + 256*256*256 (K) = 16GB

此時我們知道當檔案系統將 block 格式化為 1K 大小時,能夠容納的最大檔案為 16GB,比較一下檔案系統限制表的結果可發現是一致的!但這個方法不能用在 2K 及 4K block 大小的計算中, 因為大於 2K 的 block 將會受到 Ext2 檔案系統本身的限制,所以計算的結果會不太符合之故。

  • Superblock (超級區塊)

Superblock 是記錄整個 filesystem 相關資訊的地方, 沒有 Superblock ,就沒有這個 filesystem 了。他記錄的資訊主要有:

  • block 與 inode 的總量;
  • 未使用與已使用的 inode / block 數量;
  • block 與 inode 的大小 (block 為 1, 2, 4K,inode 為 128 bytes);
  • filesystem 的掛載時間、最近一次寫入資料的時間、最近一次檢驗磁碟 (fsck) 的時間等檔案系統的相關資訊;
  • 一個 valid bit 數值,若此檔案系統已被掛載,則 valid bit 為 0 ,若未被掛載,則 valid bit 為 1 。

Superblock 是非常重要的,因為我們這個檔案系統的基本資訊都寫在這裡,因此,如果 superblock 死掉了, 你的檔案系統可能就需要花費很多時間去挽救啦!一般來說, superblock 的大小為 1024bytes。相關的 superblock 資訊我們等一下會以dumpe2fs 命令來呼叫出來觀察喔!

此外,每個 block group 都可能含有 superblock 喔!但是我們也說一個檔案系統應該僅有一個 superblock 而已,那是怎麼回事啊? 事實上除了第一個 block group 內會含有 superblock 之外,後續的 block group 不一定含有 superblock , 而若含有 superblock 則該 superblock 主要是做為第一個 block group 內 superblock 的備份咯,這樣可以進行 superblock 的救援呢!

  • Filesystem Description (檔案系統描述說明)

這個區段可以描述每個 block group 的開始與結束的 block 號碼,以及說明每個區段 (superblock, bitmap, inodemap, data block) 分別介於哪一個 block 號碼之間。這部份也能夠用 dumpe2fs 來觀察的。

  • block bitmap (區塊對照表)

如果你想要新增檔案時總會用到 block 吧!那你要使用哪個 block 來記錄呢?當然是選擇『空的 block 』來記錄新檔案的資料囉。 那你怎麼知道哪個 block 是空的?這就得要透過 block bitmap 的輔助了。從 block bitmap 當中可以知道哪些 block 是空的,因此我們的系統就能夠很快速的找到可使用的空間來處置檔案囉。

同樣的,如果你刪除某些檔案時,那麼那些檔案原本佔用的 block 號碼就得要釋放出來, 此時在 block bitmap 當中相對應到該 block 號碼的標誌就得要修改成為『未使用中』囉!這就是 bitmap 的功能。

  • inode bitmap (inode 對照表)

這個其實與 block bitmap 是類似的功能,只是 block bitmap 記錄的是使用與未使用的 block 號碼, 至於 inode bitmap 則是記錄使用與未使用的 inode 號碼囉!

瞭解了檔案系統的概念之後,再來當然是觀察這個檔案系統囉!剛剛談到的各部分資料都與 block 號碼有關! 每個區段與 superblock 的資訊都可以使用 dumpe2fs 這個命令來查詢的!查詢的方法與實際的觀察如下:

[[email protected] ~]# dumpe2fs [-bh] 裝置檔名
選項與引數:
-b :列出保留為壞軌的部分(一般用不到吧!?)
-h :僅列出 superblock 的資料,不會列出其他的區段內容!

範例:找出我的根目錄磁碟檔名,並觀察檔案系統的相關資訊
[[email protected] ~]# df   <==這個命令可以叫出目前掛載的裝置
Filesystem    1K-blocks      Used Available Use% Mounted on
/dev/hdc2       9920624   3822848   5585708  41% /        <==就是這個光!
/dev/hdc3       4956316    141376   4559108   4% /home
/dev/hdc1        101086     11126     84741  12% /boot
tmpfs            371332         0    371332   0% /dev/shm

[[email protected] ~]# dumpe2fs /dev/hdc2
dumpe2fs 1.39 (29-May-2006)
Filesystem volume name:   /1             <==這個是檔案系統的名稱(Label)
Filesystem features:      has_journal ext_attr resize_inode dir_index 
  filetype needs_recovery sparse_super large_file
Default mount options:    user_xattr acl <==預設掛載的引數
Filesystem state:         clean          <==這個檔案系統是沒問題的(clean)
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              2560864        <==inode的總數
Block count:              2560359        <==block的總數
Free blocks:              1524760        <==還有多少個 block 可用
Free inodes:              2411225        <==還有多少個 inode 可用
First block:              0
Block size:               4096           <==每個 block 的大小啦!
Filesystem created:       Fri Sep  5 01:49:20 2008
Last mount time:          Mon Sep 22 12:09:30 2008
Last write time:          Mon Sep 22 12:09:30 2008
Last checked:             Fri Sep  5 01:49:20 2008
First inode:              11
Inode size:               128            <==每個 inode 的大小
Journal inode:            8              <==底下這三個與下一小節有關
Journal backup:           inode blocks
Journal size:             128M

Group 0: (Blocks 0-32767) <==第一個 data group 內容, 包含 block 的啟始/結束號碼
  Primary superblock at 0, Group descriptors at 1-1  <==超級區塊在 0 號 block
  Reserved GDT blocks at 2-626
  Block bitmap at 627 (+627), Inode bitmap at 628 (+628)
  Inode table at 629-1641 (+629)                     <==inode table 所在的 block
  0 free blocks, 32405 free inodes, 2 directories    <==所有 block 都用完了!
  Free blocks:
  Free inodes: 12-32416                              <==剩餘未使用的 inode 號碼
Group 1: (Blocks 32768-65535)
....(底下省略)....
# 由於資料量非常的龐大,因此鳥哥將一些資訊省略輸出了!上表與你的螢幕會有點差異。
# 前半部在秀出 supberblock 的內容,包括標頭名稱(Label)以及inode/block的相關資訊
# 後面則是每個 block group 的個別資訊了!您可以看到各區段資料所在的號碼!
# 也就是說,基本上所有的資料還是與 block 的號碼有關就是了!很重要!

如上所示,利用 dumpe2fs 可以查詢到非常多的資訊,不過依內容主要可以區分為上半部是 superblock 內容, 下半部則是每個 block group 的資訊了。從上面的表格中我們可以觀察到這個 /dev/hdc2 規劃的 block 為 4K, 第一個 block 號碼為 0 號,且 block group 內的所有資訊都以 block 的號碼來表示的。 然後在 superblock 中還有談到目前這個檔案系統的可用 block 與 inode 數量喔!

至於 block group 的內容我們單純看 Group0 資訊好了。從上表中我們可以發現:

  • Group0 所佔用的 block 號碼由 0 到 32767 號,superblock 則在第 0 號的 block 區塊內!
  • 檔案系統描述說明在第 1 號 block 中;
  • block bitmap 與 inode bitmap 則在 627 及 628 的 block 號碼上。
  • 至於 inode table 分佈於 629-1641 的 block 號碼中!
  • 由於 (1)一個 inode 佔用 128 bytes ,(2)總共有 1641 - 629 + 1(629本身) = 1013 個 block 花在 inode table 上, (3)每個 block 的大小為 4096 bytes(4K)。由這些資料可以算出 inode 的數量共有 1013 * 4096 / 128 = 32416 個 inode 啦!
  • 這個 Group0 目前沒有可用的 block 了,但是有剩餘 32405 個 inode 未被使用;
  • 剩餘的 inode 號碼為 12 號到 32416 號。

如果你對檔案系統的詳細資訊還有更多想要了解的話,那麼請參考本章最後一小節的介紹喔! 否則檔案系統看到這裡對於基礎認知您應該是已經相當足夠啦!底下則是要探討一下, 那麼這個檔案系統概念與實際的目錄樹應用有啥關連啊?

相關推薦

Linux 磁碟檔案系統管理(私房)

在第六章當中我們介紹過 Linux 的檔案除了原有的資料內容外,還含有非常多的許可權與屬性,這些許可權與屬性是為了保護每個使用者所擁有資料的隱密性。 而前一小節我們知道 filesystem 裡面可能含有的 inode/block/superblock 等。為什麼要談這個呢?因為標準的 Linux 檔

Linux私房(基礎篇)- 第八章、Linux 磁碟檔案系統管理

在第六章當中我們介紹過 Linux 的檔案除了原有的資料內容外,還含有非常多的許可權與屬性,這些許可權與屬性是為了保護每個使用者所擁有資料的隱密性。而前一小節我們知道 filesystem 裡面可能含有的 inode/block/superblock等。為什麼要談這個呢?因為標準的 Linux 檔案系

Linux私房》——第八章、Linux磁碟檔案系統管理

1、ls -i(inode) xxx      xxx在inode中的編號          filefrag -v xxx       xxx檔案分佈在哪些block中      dumpe2fs  /dev/sda3      檢視sda3分割槽資訊 2、VFS  

4.Linux磁碟檔案系統管理

目錄   1.硬碟的基礎知識 分割槽的概念: 分割槽從實質上說就是對硬碟的一種格式化。當我們建立分割槽時,就已經設定好了硬碟的各項物理引數,指定了硬碟主引導記錄(即 MasterBootRecord,一般簡稱為 MBR)和引

linux磁碟檔案系統管理的那些事兒(2)

我們接著第一篇文章講起。 檔案系統掛載與解除安裝 建立完檔案系統,我們需要將新建的檔案系統掛載到根檔案系統上的某個目錄上,進而我們便可以通過該目錄來訪問該檔案系統。建立這種關聯關係的過程稱為掛載,所掛載的目錄稱為掛載點;若解除這種關聯關係,則稱之為解除安裝; 由

第八章:Linux磁碟檔案系統管理

一、認識EXT2檔案系統 Linux最原始的檔案系統時EXT2,檔案系統是建立在硬碟上。 1.1、硬碟組成以及分割槽的簡單回顧 磁碟的組成:圓形碟片 + 機械手臂與磁頭 + 主軸馬達 碟片分為扇區,每個512byte,第一扇區很重要,包括的資訊:MBR(

Linux學習——Linux磁碟檔案系統管理

磁碟組成與分割槽複習 磁碟的組成部分: 圓形的碟片 機械手臂與手臂上的磁頭 主軸馬達,可以轉動碟片,讓機械手臂的磁頭在碟片上讀寫資料 磁碟知識要點: 扇區為最小的物理儲存單位,每個扇區的大小相同 將扇區組成一個圓,組成柱面,柱面是分割槽的最小單位 第一個扇區

Linux磁碟檔案系統管理

4 配置啟動掛載:   4.1 啟動掛載 /etc/fstab 及 /etc/mtab   4.2 特殊裝置 loop 掛載(映象檔不燒錄就掛載使用) 配置啟動掛載: 手動處理 mount 不是很人性化,我們總是需要讓系統『自動』在啟動

Linux(CentOS)磁碟檔案系統管理

[[email protected] ~]# mount -a [[email protected] ~]# mount [-tonL]  裝置名稱代號  掛載點 引數: -a  :依照 /etc/fstab 的內容將所有相關的磁碟都掛上來! -n  :一般來說,當我們掛載檔案系統

Linux 磁碟檔案系統 —— 基礎知識(一)

一,磁碟的物理組成 1、扇區(Sector)是最小的物理儲存單位,有 512bytes 和 4K 兩種格式。 2、將扇區組成一個圓,就是磁柱。 3、最小分割槽單位通常為扇區。 4、硬碟分割槽表主要有兩種格式,一種是限制較多的 MBR 分割槽,一種

9. Linux 磁碟檔案管理系統(inode 目錄)

磁碟分割槽後要進行格式化,因為作業系統所設定的檔案屬性/許可權並不相同,為了存放這些檔案所需的資料, 因此需要將分割槽進行格式化,以成為作業系統能夠利用的檔案系統格式。 檔案系統通常會將檔案許可權和檔案屬性這2部分資料分別存放在不同的塊,許可權和屬性放置在

Linux 學習之路(十):磁碟檔案系統管理

磁碟及檔案系統管理 檔案系統訪問控制列表 setfacl ​ -b Remove all ​ -m ​ -k 塊點陣圖:bitmap 硬連結:多個檔案的路徑指向同一個inode號 軟連結|符號連結: 該檔案被硬連結的次數 drwxr-x

LINUX學習—磁碟檔案系統管理

IO裝置,外部裝置,並不是計算機核心裝置 機械式硬碟: U盤,光碟,軟盤,硬碟,磁帶機 如果不劃分分割槽,說明一個磁碟只能儲存一個檔案系統,劃分後,一個分割槽就是一個檔案系統,即邏輯邊界; 固態硬碟 磁頭懸浮在盤面上方,所以硬碟振盪很容易弄壞硬碟, 磁頭(head)數:每個碟

Linux入門到放棄之六《磁碟檔案系統管理三》

設定磁碟配額 對之前建立的邏輯卷設定磁碟配額,要求使用者student對該邏輯卷 容量的軟限制是:5G,硬限制是7G,檔案個數軟限制為:25個,硬限制為30個。 (1)首先對/etc/fstab檔案進行編輯 命令:vi /etc/fstab 編輯內容如下截圖中紅框部分 (2)因fstab檔案修

Linux初級運維(十二)——磁碟檔案系統管理

一、磁碟管理        1、 機械式硬碟:             U盤、光碟、軟盤、硬碟、磁帶  &nb

私房Linux檔案許可權目錄配置

使用者與群組 檔案擁有者 檔案屬於誰,即使用者。 群組概念 王大,王二,王三住在同一個房子裡,他們屬於同一個群組 。 有公共的空間,都可以使用(客廳); 王大,王二,王三屬於同一個群組,相對群組而言,三人都為使用者; 有私密空間,各自房間內的私人物品

第八課-第三講磁碟檔案系統管理詳解之一

一、磁碟管理(詳細的講解硬碟的原理)機械式硬碟---(cpu,記憶體 是電氣裝置)U盤 光碟 軟盤硬碟出廠前有一次“低階格式化”,劃分磁軌分割槽:建立獨立的檔案系統MBR:Master Booter Record 主引導記錄 0盤面 0磁軌 0扇區 512個位元組,不屬於任何一個作業系統。作業系統不能直接訪問

Linux學習之檔案系統管理——回顧分割槽和檔案系統

一、回顧分割槽和檔案系統 1、分割槽型別: 》主分割槽:總共最多隻能分四個 》擴充套件分割槽:只能有一個,也算作主分割槽的一種,也就是說主分割槽加擴充套件分割槽最多有四個。但是擴充套件分球不能儲存資料和格式化,必須再劃分成邏輯分割槽才能使用。 》邏輯分割槽:邏輯分割槽是在擴充套件

Linux學習之檔案系統管理-檔案系統常用命令

一、檔案系統常用命令-df、du、fsck、dumpe2fs 1、檔案系統檢視命令df: [[email protected] ~]# df  【選項】【掛載點】 選項:   -a   顯示所有的檔案系統資訊,包括特殊檔案系統,如/proc

第六章 磁碟檔案系統管理

一,本章內容 1,磁碟及分割槽管理 2,檔案系統管理 3,RAID裝置 4,LVM邏輯卷管理 5,磁碟配額管理 6,檔案系統維護基礎 備註:本Linux系統為RHEL5.3 二,磁碟及分割槽管理 1,fdisk檢視磁碟裝置列表   可以看出,共有vda,vdb。Vab沒有分