linux磁盤與文件管理系統
1.認識linux系統
1.1 磁盤組成與分區的復習
首先了解磁盤的物理組成,主要有:
- 圓形的碟片(主要記錄數據的部分)。
- 機械手臂,與在機械手臂上的磁頭(可擦寫碟片上的內容)。
- 主軸馬達,可以轉動碟片,讓機械手臂的磁頭在碟片上讀寫數據。
數據存儲與讀取的重點在于碟片,而碟片上的物理組成為: - 扇區切最小的物理存儲單位,且根據磁盤設計的不同,目前有512B和4KB兩種格式。
- 將扇區組成一個圓,就是柱面。
- 早期分區主要以柱面作為最小的分區單位,現在的分區通常使用扇形作為最小分區單位(每個扇區都有其號碼,就好像座位一樣)。
- 磁盤分區主要有兩種格式,一種是限制較多的MBR分區表,一種是較新且限制較少的GPT分區表;
- MBR分區表中,第一個扇區最為重要,里面有:主引導記錄,及分區表,其中MBR占有446B,而分區表則占有64B。
- GPT分區表除了分區數量擴充較多之外,支持的磁盤空間也可以超過2TB。
基本上所有物理磁盤的文件都被模擬成/dev/sd[a-p]
的格式,第一塊磁盤名為/dev/sda,分區的文件名以第一塊磁盤為例,為/dev/sda[1-28]
,除物理磁盤下,虛擬機的磁盤通常為/dev/vd[a-p]
的格式。如果有使用到軟件磁盤陣列的話,還有/dev/md[0-128]
的磁盤文件名。使用LVM時,文件名則為/dev/VGANE/LVNAME
。我們這里主要學習物理磁盤和虛擬磁盤。 /dev/sd[a-p][1-128]:為物理磁盤的文件名。
/dev/vd[a-d][1-128]:為虛擬磁盤的文件名。
1.2 文件系統特性
在磁盤分區完畢后,還需要進行格式化,之后操作系統才能使用這個文件系統。
這是因為每種操作系統所設置的文件屬性/權限并不相同,為了存放這些文件所需數據,因此就需要將分區進行格式化,已成為操作系統能夠利用的文件系統格式。
通常我們稱一個可被掛載的數據為一個文件系統而不是一個分區。
在操作系統的文件中,除了實際內容外,還有很多屬性,如Linux操作系統的文件權限(rwx)與文件屬性(擁有者,用戶組,時間參數等)。文件系統通常會將這兩部分的數據分別存放在不同的區塊,權限與屬性放置到inode中,至于實際數據則放置到數據區塊中。此外,還有一個超級區塊(superblock)會記錄整個文件系統的整體信息,包括inode與數據區塊的總量,使用量,剩余量等
每個inode與區塊都有編號,至于這三個數據的意義簡略說明如下:
- 超級區塊 :記錄此文件系統的整體信息,包括inode與數據區塊的總量,使用量,剩余量,以及文件系統的格式與相關信息等。
- inode :記錄文件的屬性,一個文件占用一個inode,同時記錄此文件的數據所在的區塊號碼。
- 數據區塊 :實際記錄文件的內容,如果文件太大,會占用多個區塊。
每個inode與數據區塊都有編號,每個文件都占用一個inode,inode內有文件數據放置的區塊號碼。因此找到了文件的inode,就找到了文件數據區塊的號碼,就能讀出文件的實際數據。
這種數據存取方式稱為索引式文件系統。
還有其他常用的文件系統,比如U盤使用的FAT格式的文件系統,
因為這種文件系統中沒有inode存在,如果一個文件數據寫入的區塊太松散,需要讀取磁盤好幾次才能完整讀取這個文件。
所謂碎片整理,就是因為文件寫入的區塊太過于離散,文件讀取的性能會變的很差,需要通過碎片整理將同一個文件所屬的區塊都集合到一起,這樣數據的讀取會比較容易。
1.3 Linux的ext2文件系統(inode)
標準的ext2文件系統就是這種含有inode,數據區塊,超級區塊等,以inode為基礎的Linux文件系統。
文件系統一開始就將inode和數據區塊規劃好了,除非重新格式化(或利用resize2fs等命令修改其大小),否則inode與數據區塊固定后就不再變動了。
當文件系統有數百GB,再將所有inode和數據區塊都放在一起就很不易管理了。
因此,ext2文件系統格式化時基本上是區分成多個區塊群組(block group),每個區塊都有獨自的inode,數據區塊,超級區塊系統。
在ext2文件系統中,最前面有一個啟動扇區,這個啟動扇區可以安裝啟動引導程序。
每一個區塊群組的六個內容如下:
- 數據區塊(data block)
數據區塊是用來放置文件數據的地方,在ext2文件系統中所支持的區塊大小有1K,2K及4K三種。格式化是區塊大小就被固定了,且每個區塊都有編號。而區塊大小也會產生差異:
Block 大小 | 1 KB | 2 KB | 4 KB |
---|---|---|---|
最大單一文件大小 | 16 GB | 256 GB | 2 TB |
最大文件系統總容量 | 2 TB | 8 TB | 16 TB |
ext2文件系統還有一些限制:
- 原則上,區塊的大小和數量在格式化完成后就不能再修改(除非重新格式化)。
- 每個區塊內最多只能放置一個文件的數據。
- 承上,如果文件大于區塊的大小,則一個文件會占用多個區塊數量。
- 承上,如果文件小于區塊,則該區塊的剩余容量就不能夠再被使用了(磁盤空間被浪費了)。
由于這些限制,當小文件較多時,而區塊較大,例如區塊為4KB,而小文件僅為50B,那么每個區塊都將浪費4046B的空間。
那么將區塊設置為1KB呢?這樣但文件會占用很多區塊,而每個區塊的inode都需要被記錄,造成讀寫性能不佳。 - inode table(inode表)
基本上,inode記錄文件的屬性及文件數據放置區塊的編號,至少有下面的: - 該文件的讀寫屬性(read,write,excute)。
- 該文件的擁有者與用戶組(owner,group)。
- 該文件的大小。
- 該文件建立或狀態改變的時間(ctime)。
- 最近一次的讀取時間(atime)。
- 最近修改的時間(mtime)。
- 定義文件特性的標識(flag),如SetUID。
- 該文件真正內容的指向(pointer)。
inode的數量與大小也是在格式化時就已經固定了,除此之外還有一些特點: - 每個inode大小均固定為128B(新的ext4與xfs可設置到256B);
- 每個文件都僅會占用一個inode而已。
- 承上,因此文件系統能夠建立的文件數量與inode的數量有關。
- 系統讀取文件時需要先找到inode,并分析inode所記錄的權限與用戶是否符合,若符合才能讀取區塊的內容。
- Superblock(超級區塊)
超級區塊時記錄整個文件系統相關信息的地方,沒有超級區塊,就沒有這個文件系統,它記錄的信息有:- 數據區塊與inode的總量。
- 未使用與已使用的inode與數據區塊數量。
- 數據區塊與inode的大小(block為1,2,4K,inode為128B或256B)。
- 文件系統的掛載時間,最近一次寫入數據的時間,最近一次檢驗磁盤的時間等文件系統的相關信息。
- 一個有效位數值,若該文件系統已被掛載,則有效位為0,若未被掛載,則有效位為1。
一個文件系統應該僅有一個超級區塊,位于它的第一個區塊群組,后續的區塊1群組中也可能含有超級區塊,不過都是對第一個超級區塊的備份。
- Filesystem Description(文件系統描述說明)
這個區段可以描述每個區塊群組的開始與結束的區塊,以及說明每個區塊(超級區塊,對照表,inode對照表,數據區塊)分別介于哪個區塊之間。 - 區塊對照表(block bitmap)
從區塊對照表中可以知道那些區塊是空的,因此我們的系統就能夠快速的找到可使用的空間來處理文件。
刪除文件,對應區塊空出來時,對照表中他們的狀態就會變成未使用中。 - inode對照表(inode bitmap)
與區塊對照表功能類似