1. 程式人生 > >Linux檔案、目錄與磁碟格式

Linux檔案、目錄與磁碟格式

檔案系統特性:

Linux的正規檔案系統為Ext2。其包含三個資料:

  • super block : 記錄此檔案系統的整體資訊,包括inode/block的總量,使用量,剩餘量,以及檔案系統的格式與相關資訊等

  • inode: 記錄檔案的屬性,一個檔案佔用一個inode,同時記錄此檔案的資料所在的block號碼

  • block: 實際記錄檔案的內容,若檔案太大時,會佔用多個block.

Ext2其資料訪問方式為索引式檔案系統。

這裡寫圖片描述

Linux的Ext2檔案系統(inode)

檔案系統一開始就將inode與block規劃好了,除非重新格式化或使用resize2fs等命令更改檔案系統大小,否則inode與block固定後就不再變動。**檔案系統最前面有一個啟動扇區,這個啟動扇區可以安裝引導裝載程式。**Ext2格式化後示意圖如下:

這裡寫圖片描述

  • data block

data block使用來放置檔案內容的地方,在Ext2檔案系統中所支援的block大小有1KB,2KB,4KB三種。

原則上,block的大小與數量在格式化完就不能夠再改變了。

每個block內最多隻能放置一個檔案的資料;如果檔案大於block的大小,則一個檔案會佔用多個block數量;如果檔案小於block的大小,則該block的剩餘空間就不能再被使用了。

  • inode table

inode記錄的檔案資料至少包括:

  1. 該檔案的訪問模式(rwx)
  2. 該檔案的所有者與組(owner/group)
  3. 該檔案的大小
  4. 該檔案建立或狀態改變的時間
  5. 最近一次讀取的時間
  6. 最近修改的時間
  7. 定義檔案特性的標誌
  8. 該檔案真正內容的指向

特性:

  1. 每個inode大小均固定為128bytes;

  2. 每個檔案都僅會佔用一個inode;檔案系統能夠建立的檔案數量與inode數量有關。

  3. 系統讀取檔案需先找到inode,並分析inode所記錄的許可權與使用者是否符合,若符合才能夠實際讀取block的內容。

  4. inode將記錄block號碼的區域定義為一個直接,一個間接,一個雙間接與一個三間接記錄區。

這裡寫圖片描述

  • Superblock

它記錄的資訊主要有:

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

    • inode bitmap 則記錄那些inode是空的
    • block bitmap 記錄那些block是空的

檔案系統與目錄樹的關係

  • 目錄
    當在Linux下的ext2檔案系統新建一個目錄時,ext2會分配一個inode與至少一塊block給該目錄。可以使用ls -i來查詢inode號碼

  • 檔案
    當我們在Linux下的ext2新建一個一般檔案時,ext2會分配一個inode與相對於該檔案大小的block數量給該檔案。

  • 目錄樹讀取
    從根目錄賭氣,得到掛載點的inode號碼,即目錄的inode,再根據該inode讀取根目錄的block內的檔名資料,再一層層地往下讀到正確的檔名。

Ext2/Ext3 檔案的訪問與日誌檔案系統的功能

新建一個檔案的系統行為:

  1. 先確定使用者對於欲新增的檔案的目錄是否有w與x的許可權,若有的話才新增;
  2. 根據inode bitmap找到沒有使用的inode號碼,並將新檔案的許可權/屬性寫入。
  3. 根據block bitmap找到沒有使用中的block號碼,並將實際的資料寫入block中,且更新inode的block指向資料;
  4. 將剛寫入的inode與block資料同步更新inode bitmap與block bitmap,並更新superblock的內容。

當系統在讀寫檔案系統時,發生不正常狀態時,會出現資料不一致狀態,可以使用日誌檔案系統來避免。即
1. 預備:當系統寫入一個檔案時,會先在日誌記錄塊中記錄某個檔案準備寫入的資訊。
2. 實際寫入: 開始寫入檔案的許可權與資料;開始更新meta data的資料。
3. 結束:完成資料與meta data的更新後,在日誌記錄塊當中完成該檔案的記錄。

Linux系統使用一個稱為非同步處理的方式處理磁碟與記憶體寫入速度不一致的問題。

當系統載入一個檔案到記憶體後,如果該檔案沒有被改動過,則在記憶體區段的檔案資料會被設定為clean的。但如果記憶體中的檔案資料被更改過了,此時該記憶體中的資料會被設定成dirty.此時所有操作都還在記憶體中執行,並沒有寫入到磁碟中。系統會不定時地將記憶體中設定為Dirty的資料寫回磁碟,以保持磁碟與記憶體資料的一致性。

掛載:將檔案系統與目錄結合的操作。掛載點一定是目錄,該目錄為進入檔案系統的入口。

整個Linux的系統都是通過一個名為VFS的虛擬檔案系統去讀取檔案系統的。

檔案系統的簡單操作

  • 磁碟與目錄容量

df : 列出檔案系統的整體磁碟使用量.

du: 評估檔案系統的磁碟使用量。

  • 連線檔案: ln

在Linux下面的連線檔案有兩種,一種是類似於Windows快捷方式功能的檔案,可以讓你快速連線到目標檔案或目錄(軟連線,符號連線);另一種則是通過檔案系統的inode連線來產生新檔名,而不是產生新檔案,稱為硬連線(hard link).

  • hard link:
    只是在某個目錄下新建一條檔名連線到某inode號碼的關聯記錄。使用該模式連線檔案時,磁碟的空間與inode數目都不會改變。其限制主要是不能跨檔案系統,不能連線到目錄。

這裡寫圖片描述

  • symbolic link:
    symbolic link就是在建立一個獨立的檔案,而這個檔案會讓資料的讀取指向它連線的那個檔案的檔名。會佔用掉inode與block.

這裡寫圖片描述

  • 關於連線目錄的數量:

當我們新建一個新的目錄時,新的目錄連線數為2,而上層目錄的連線數會增加1。

磁碟分割槽命令: fdisk

磁碟格式化: mkfs mke2fs

磁碟檢驗:fsck, badblocks 檔案系統出現問題使用的命令

磁碟掛載與解除安裝 : mount umount

磁碟引數修改: mknod

e2lable: 修改檔案系統卷標

haparm:測試硬碟效能

這裡寫圖片描述

設定開機掛載:

Linux可以直接到/ect/fstab設定開機掛載。

系統掛載的一些限制:

  • 根目錄/是必須掛載的,而且一定要先於其他掛載點被掛載進來。
  • 其他掛載點必須為已新建的目錄,可任意指定,但一定要遵守必須的系統目錄架構原則
  • 所有掛載點在同一時間之內,只能掛載一次;
  • 所有分割槽在同一時間之內,只能掛載一次;
  • 如若進行解除安裝,你必須先將工作目錄移到掛載點(及其子目錄)之外

cat /ect/fstab檢視檔案內容如下:

這裡寫圖片描述

parted命令可以支援高2TB以上的分割槽。