標籤:linux
第8章 Linux磁碟與檔案系統管理
1 磁碟組成與分區: 磁碟由 圓的碟片、磁頭、主軸馬達 等組成。 碟片主要有: 扇區(Sector)為最小的實體儲存體單位,每個扇區512bytes 將扇區組成一個圓,就是柱面(Cylinder),是分區的最小單位。 第一個扇區最重要,裡面有MBR(主引導記錄)、分區表;MBR佔446位元組,分區表佔64bytes。
分區表最多支援4個分區,成為 主primary分區或者 擴充Extended分區。 擴充分區最多有一個; 邏輯分區是由擴充分區分出來的。 能被格式化的只有主要磁碟分割和邏輯分區。
各種介面的磁碟在Linux 中的檔案名稱為: /dev/sd[a-p][1-15]:為SCSI、SATA、USB,Flash等介面裝置 /dev/hd[a-p][1-63]:為IDE介面的磁碟。
2. 檔案系統特性 分區完後之所以要進行格式化,是因為每種作業系統所設定的檔案屬性許可權不相同,為了存放這些檔案所需的資料,因此需要將分區進行進行格式化,以成為作業系統能夠利用的檔案格式。 Linux正規檔案系統為Ext2(Linux second Extended file system,Ext2fs),預設情況下,windows是不識別Linux的Ext2檔案系統的。
傳統情況下,一個分區只能格式化為一個檔案系統,也就是一個檔案系統就是一個分區。但是新技術的發展,我們常通道LVM與軟磁碟陣列(software raid)可以將一個分區格式化成多個檔案系統個,,也能夠將多個分區合成一個檔案系統。目前我們已經不在說針對分區進行格式化了,而是一個可被掛在的資料為一個檔案系統而不是一個分區。 Linux較新的檔案系統,除了檔案資料外還有很多屬性,如rwx與檔案屬性(owner、group、time parameter等)。檔案系統通常會將這兩部分資料分別存在不同的塊,許可權和屬性放在inode中,資料放在data block中,另外還有個超級快(super block)會記錄整個檔案系統的整體資訊,包括 inode 與 block的總量、使用量、剩餘量等。 super block:記錄檔案系統整體資訊,包括inode與block的總量、使用量、剩餘量、檔案系統的格式與相關資訊等。 inode: 記錄檔案屬性,一個檔案佔用一個inode,同時記錄檔案資料所在的block。 block: 記錄檔案的資料,若檔案太大,會佔用多個block。 這種存取方法稱為: 索引式檔案系統(indexed allocation)。
3 Linux的Ext2檔案系統(inode) 檔案系統一開始就將inode與block規劃好了,除非重新格式化或者利用resize2fs等命令變更檔系統大小,否則inode與block固定後就不再變動。 在Ext2格式化時是將分區分為多個塊組(block group),每個塊組都有獨立的inode/block/super block,檔案系統最前面有一個開機磁區(boot sector),這個開機磁區用來安裝引導裝載程式的。 每個塊組有6個主要內容組成:data block: 在Ext2中支援的block大小有1kb、2kb、4kb三種,在格式化時block大小就固定了,且每個block都有編號,以方便inode的記錄。block大小決定檔案系統能支援的最大單一檔案大小如下: inodetable: inode記錄的檔案資料有以下幾個: 該檔案的訪問模式(rwx); 檔案所有者與組(owner、group); 檔案大小; 檔案建立或者狀態改變的時間(ctime) 最近一次讀取時間(atime); 最近修改時間(mtime); 定義檔案特性的標誌flag,如SetUID等 該檔案真正執行的資料內容; inode的數量和大小在格式化時就已經確定了, 每個inode大小均為128bytes; 每個檔案佔有一個inode; 檔案系統能夠建立的檔案數量和inode的數量有關; 系統讀取檔案時先找到對應的inode,分析inode所記錄的許可權與使用者是否符合,若符合才能開始讀取指向的block塊。
inode/block與檔案大小的關係: inode結構如下:inode有12個直接指向、1個間接、一個雙間接和一個三間接記錄區。假如1k的block,每條block記錄需要4bytes,因此1k的block可以記錄256個block記錄。
super block: 記錄的資訊主要有: block與inode的總量; 未使用與已使用inode、block的數量 block與inode的大小(1k、2k、4k; 128bytes); 檔案系統的掛載時間、最近一次寫入資料的時間、最近一次檢查磁碟(fsck)的時間等檔案系統相關資訊; 一個validbit數值,表示檔案系統是否被掛載。
一般來說,superblock大小為1024bytes。相關資訊可以用dumpe2fs命令來查看。
檔案系統描述(file system description): 用來描述每個block group的開始與結束block 號碼,以及每個區段的superblock inode block 分別位於哪個block之間;
block bitmap: 用來記錄那些block用過,那些block未用。
inode bitmap: 記錄inode的使用與未使用方式。
dumpe2fs [-bh] 裝置檔案名稱 -b:列出保留為壞道的部分 -h:列出superblock的資料,不會列出其他的區段內容。
df :這個命令調出目前掛載裝置
4. Ext2/Ext3檔案訪問與記錄檔系統: 一般來說,將inode table和data block成為資料區域,將其他地區成為metadata(中間地區)。 記錄檔系統: 1:預備,當系統寫入一個檔案中,現在日誌記錄總記錄夠格檔案準備要寫入的資訊。 2:實際寫入:開始吸入檔案許可權和資料,開始更新meta data資料 3: 結束:完成資料與meta data更新,在日誌記錄塊當中完成該檔案的記錄。
這樣當斷電等,系統只要檢查日誌記錄塊就知道那些檔案出現問題,針對該問題再進行一致性檢查。
5 Linux檔案操作: 當系統載入一個檔案到記憶體中,如果該檔案沒有被改過,則在記憶體區段的檔案資料會設定為clean;如果發生改過,此時記憶體中的資料會被設定成dirty,系統會不定時的將記憶體中設定為dirty的資料歇會磁碟,保持磁碟與記憶體資料的一致性。
可以利用sync命令強制記憶體中dirty的檔案寫回到磁碟。
鳥哥的Linux學習筆記之三