1. 程式人生 > >Linux學習——Linux磁碟與檔案系統管理

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

磁碟組成與分割槽複習

磁碟的組成部分:

  • 圓形的碟片
  • 機械手臂與手臂上的磁頭
  • 主軸馬達,可以轉動碟片,讓機械手臂的磁頭在碟片上讀寫資料

磁碟知識要點:

  • 扇區為最小的物理儲存單位,每個扇區的大小相同
  • 將扇區組成一個圓,組成柱面,柱面是分割槽的最小單位
  • 第一個扇區最重要,裡面有磁碟主引導記錄(MBR)以及分割槽表(分割槽表記錄了各個分割槽的柱面範圍)
  • 分割槽分為主分割槽和擴充套件分割槽,擴充套件分割槽可以在分出邏輯分割槽,能被格式化的只有主分割槽與邏輯分割槽而已
  • 磁碟分割槽後需要格式化,因為不同作業系統的檔案系統不一樣,格式化是在分割槽上建立檔案系統,也就是告訴作業系統按照什麼規則存取檔案。

Linux檔案系統的一些基本概念

  • inode:記錄檔案的屬性,一個檔案佔用一個inode,同時記錄此檔案的資料所在的block號碼
  • block:用於記錄檔案的內容
  • superblock:記錄檔案系統的整體資訊,包括inode/block的總量、使用量、剩餘量,以及檔案系統的格式與相關資訊等

inode中記錄了block的索引,只需要讀取inode中block索引,就可以讀取對應的block,這種資料訪問方法稱為索引式檔案系統,檔案系統一開始就將inode和block的數目規劃好了,除非重新格式化,否則inode和block固定後不在變動

Linux的Ext2檔案系統

檔案系統結構:

âExt2æ件系ç»âçå¾çæç´¢ç»æ

為什麼要分組呢?我覺得是因為inode以及block數量過大不易於管理,因此進行分組,每個組都會分配一定的inode以及block,查詢檔案時只需要到對應的組中查詢即可,而每個組的inode以及block數目又不會過多,其實就和索引表差不多,進行分類以減少查詢數目

block group中各部分的含義:

  • data block(資料塊):用來放置檔案內容的地方,ext2檔案系統支援的 block大小有1kb,2kb,4kb三種,每個block都有編號,block的大小會限制單一檔案的最大值以及檔案系統的總容量,對應關係如下表:
    Block 大小 1KB 2KB 4KB
    最大單一檔案限制 16GB 256GB 2TB
    最大檔案系統總容量 2TB 8TB 16TB

       如果檔案小於block的大小,則該block剩餘空間將不在被使用,如果檔案大於block的大小,將會佔用多個block數量

  • inodetable(inode表格):主要記錄檔案的相關屬性,包括:
  1. 檔案的訪問模式
  2. 檔案的所有者和組
  3. 檔案的大小
  4. ctime:檔案建立或是狀態改變的時間
  5. mtime
  6. 檔案特性的標誌,例如SetUID
  7. block指向    

    inode有一些其他特點:

  1. 每個inode大小固定為128位元組
  2. 每個檔案都會佔用一個inode節點
  3. 系統讀取檔案時,首先找到inode,並分析inode記錄的許可權與使用者是否相符合,相符合才讀取block的內容

     inode記錄一個block需要花費4個位元組,記錄一個400MB的檔案至少需要10萬block,一個inode哪來這麼多塊呢?因此,我們    對inode的block進行了一些處理:12個直接,1個間接,1個雙間接,1個三間接,結構如下:âlinux中inodeçblockç»æâçå¾çæç´¢ç»æ

  • superblock(超級塊):記錄整個檔案系統相關資訊的地方,一般來說,superblock的大小為1024位元組,除了第一個block group有superblock,其餘block group不一定含有superblock,即使含有,也是第一個block group內的superblock的備份,主要記錄的資訊有:
  1. block以及inode1的數量
  2. 未使用與已使用的inode/block數量
  3. 檔案系統的掛載時間、最近一次寫入資料的時間、最近一次校驗磁碟的時間等檔案系統的相關資訊
  4. 一個validbit,若檔案系統被掛載,載validbit為0,若沒有被掛載,則validbit為1
  • 檔案系統描述說明:用於描述每個blockgroup的開始與結束的block號碼,以及說明每個區段(superblock,bitmap,inodemap,data block),應該只有含有superblock的block group有,
  • block bitmap(塊對應表):從塊對應表可以知道哪些block是空的,當刪除一個檔案時,塊對應表中對應的為會變為未使用
  • inode bitmap(inode對照表):用於記錄未使用的inode號碼

相關命令:

#打印出裝置對應的superblock以及blockgroup的相關資訊
dumpe2fs [-bh] 裝置檔名
引數:
-b:列出保留為壞道的部分
-h:僅列出superblock的資料,不會列出其他區段內容

可以使用df檢視掛載資訊

EXT2檔案系統操作的細節

新建目錄:

在ext2下新建目錄,會分配一個inode以及至少一個block給該目錄,inode記錄該目錄的相關許可權與屬性,inode會記錄初始時分配的block號碼,block會記錄目錄下的檔名與該檔案所佔用的inode號碼

新建檔案:

1、確定使用者對於欲新增檔案的目錄是否具有w與x的許可權,若有的話才能新增

2、根據inode bitmap找到沒有使用的inode號碼,並將新檔案的許可權屬性寫入

3、根據block bitmap找到沒有使用的block號碼,並將實際資料寫入到block中,且更新inode的block指向

4、將剛才寫入的inode與block資料同步更新inode bitmap與block bitmap,並更新superblock的內容

讀取檔案:

系統通過掛載的資訊可以找到掛載點的inode號碼,此時就能夠得到根目錄的inode內容,並根據該inode讀取根目錄的block內的檔名資料,再一層一層往下讀到正確的檔名

EXT3檔案系統

EXT3是EXT2的升級版,向下相容EXT3,EXT3中具有日誌檔案系統的功能,日誌檔案系統主要用於解決資料不一致問題(例如未將所有資料寫入磁碟,忽然斷電),日誌檔案系統解決資料不一致的方式如下(簡要概括):

1、預備:當系統要寫入一個檔案時,首先在日誌記錄塊中記錄某個檔案準備要寫入的資訊

2、實際寫入:開始寫入檔案的許可權與資料,開始更新meta data(例如superblock、block bitmap、inode bitmap)的資料

3、結束:寫入完成後,在日誌記錄塊中標記該檔案,表示已經寫入完畢,如果出現數據不一致現象,只需要檢查日誌檔案塊即可,不需要檢查整個檔案系統,並且資料可從日誌記錄塊中恢復

Linux檔案系統的操作

當系統載入一個檔案時,會把這個檔案標記為clean,若檔案被更改,則會標記為dirty,此時並不會直接寫入磁碟,linux每隔一段時間將標記為dirty的資料寫回磁碟,可以手動使用sync命令強制記憶體中設定為dirty的資料寫回磁碟,正常關機情況下,會自動呼叫sync指令

掛載

掛載就是將目錄與檔案系統相結合(並不是所有的目錄都是掛載點),目錄是該檔案系統的入口,訪問該目錄就可以訪問檔案系統,檔案系統最頂層的目錄inode號碼一般為2

VFS(虛擬檔案系統):用來管理所有的檔案系統(例如讀取檔案系統)

#可以檢視linux支援的檔案系統
ls -l /lib/modules/$(uname -r)/kernel/fs

#檢視目前已經載入到記憶體中的檔案系統
cat /proc/filesystems

檢視磁碟與目錄容量的命令

#列出檔案系統的整體磁碟使用量,[]表示可選
df [-ahikHTm] [目錄與檔名]
引數:
-a:列出所有檔案系統
-k:以kb為單位顯示檔案系統
-m:以mb為單位顯示檔案系統
-T:連同該分割槽的檔案系統名也列出
-i:不用硬碟容量,以inode的數量顯示

如果在命令中加上目錄或是檔名,則會檢視該目錄或檔案所在的分割槽,
使用這個命令有可能會看到/dev/shm這個目錄,這個目錄是用記憶體虛擬出來的磁碟空間,資料都存在記憶體中,並且不會自動寫回到磁碟中
#評估目錄或是檔案的磁碟使用量
du [-ahskm] [目錄或是檔案]
引數:
-a:列出所有檔案與目錄佔用的容量
-s:列出某個目錄下每個目錄所佔用的容量
-S:不包括子目錄的統計

du會將所有檔案的大小均列出

硬連線:在某個目錄下新建一個檔名連線到某個inode,此時會增加inode的引用計數,當引用計數為0時,檔案才會被刪除,硬連線不會消耗inode與block數量,不能跨檔案系統建立硬連線,不能建立目錄的硬連線

軟連線:相當於windows中的快捷方式,只是記錄檔案的路徑,軟連線會佔用inode與block

#建立軟硬連線
In [-sf] 原始檔 目標檔案
引數:
-s:不加任何引數相當於建立硬連線,-s表示軟連線
-f:如果目標檔案存在,先刪除後建立

SWAP

學習docker時就見過這個SWAP,當時以為是虛擬記憶體(汗),swap主要在實體記憶體不夠時,將某些記憶體中的程式暫時移動到swap(硬碟)中