1. 程式人生 > >鳥哥私房菜inode和block小結

鳥哥私房菜inode和block小結

一、磁碟劃分小結

raid部分通過fdisk -l可以檢視磁碟的使用情況。磁碟的劃分有最小物理儲存單位扇區,每個扇區512bytes,磁頭決定由多少個盤面,柱面的大小等於磁頭*扇區,磁碟的大小取決於有多少柱面。
第一個扂區最重要,裡面有:(1)主要開機區(Master boot record, MBR)及分割表(partition 
table), 其中 MBR 佔有 446 bytes,而 partition table 則佔有 64 bytes,剩下的2bytes表示mbr是否有效。
SATA 硬碟則有11個邏輯分割(5號到 15號),1-3是主分割槽,4是擴充套件分割槽。
分割槽結束後要對磁碟進行格式。不同作業系統所設定的檔案屬性和許可權不同,為了存放這些資料,就需要對分隔槽進行格式化。

二、inode和block總結

目錄和文件有許可權、屬性和資料。一般許可權、屬性放在inode中,一個檔案一個inode,inode記錄檔案資料所在block的號碼。而資料放置在block中。超級塊superblock會記錄整個檔案系統的整體資訊,包括inode與block的總量、使用了、剩餘量等。找到文件的inod就可以找到文件所使用的block,因此是索引式檔案。ext2的這種儲存不需要碎片整理,而一般對於fat檔案是需要進行碎片整理的。
inode和block是一開規劃好的,除非格式化,否則是不變的。inode和block一般分割槽管理,在不同的block group中使用獨立的inode/block/superblock。block group前世boot sector,是多重引導環境的關鍵
block有1k 2k 4k三種。

對於inode:

1每個 inode 大小均固定為 128 bytes; 
2每個檔案都僅會佔用一個 inode 而已; 
3承上,因此檔案系統能夠建立的檔案數量與 inode數量有關; 

4系統讀檔案時需要先找到 inode,分析 inode 許可權是否符合。

128bytes能記錄的block塊是有限的,因此inode採用12直接地址對映,1個一級地址,1個二級地址,1個三級地址,因此1k的block文件最大值為12k+256k+256*256k+256*256*256k約等於16G。

Superblock (超級區塊) 

Superblock 是記錄整個 filesystem 相關資訊的地方, 沒有 Superblock ,就沒有這個 filesystem 
了。 記錄內容如下:
1 block 與 inode 的總量; 
2未使用與已使用的 inode / block 數量; 
3 block 與inode 的大小 (block 為 1, 2, 4K,inode 為 128 bytes); 
4 filesystem 的掛載時間、最近一次寫入資料的時間、最近一次檢驗磁碟 (fsck) 的時間等檔案系統的相關資訊; 
5一個 valid bit 數值,若此檔案系統已被掛載,則 valid bit 為 0 ,若未被掛載,則 valid bit 為 1 


block group的內容包括:

superblock--檔案系統描述--block對照表--inode對照表--inodetable--data block

其中:

1 superblock 的大小為 1024bytes。每個 block group 都可能有 superblock。但是我們也說一個檔案系統應該僅有一個 superblock 而已,事實上除了第一個 block group 內會有 superblock外,後續block group 不一定有 superblock , 而若有 superblock 則該 superblock 主要是做為第一個 block group 內 superblock備份,這樣可以進行 superblock救援。
2檔案系統描述描述block group的開始於結束block號碼,以及後續功能模組位於哪個block
3 block bitmap區塊對照表用於新增檔案資料的block的提供,刪除時標記block為未使用
4 inode bitmap inode對照表與blockbitmap相似,只是他描述的是inode的使用情況


目錄

當我們在 Linux 下的 ext2 檔案系統建立一個目錄時, ext2 會分配一個 inode 不止一塊 block 給該
目錄。其中,inode 記錄該目錄的相關許可權屬性,可記錄分配到的那塊 block 號碼; 而 block 則
是記錄在這個目錄下的檔名與該檔名佔用的inode 號碼資料。


三、Linux下的連線檔:

在 Linux 下的連結檔有兩種,一種是類似 Windows 的快捷方式功能的檔案,可以快速的連結到
目標檔案(或目錄); 另一種則是透過檔案系統的inode 連結來產生新檔名,而不是是產生新檔案!這種稱為實體連結 (hard link)。 這兩種玩意兒是完全補一樣的東西。

hard link 

在某個目錄下新增一筆檔名連結到某inode號碼的關連記錄而已
一般來說,使用 hard link 連結檔案時,磁碟空間的 inode 數目不會改變! hard link 是在某個目錄下的 block 多寫入一個關連資料而已,既不會增加 inode 也不會耗用 block 數量。
不能跨 Filesystem
不能 link 目錄(由於目錄下有複雜的文件和目錄,實現十分困難)。

Symbolic link

基本上, Symbolic link 就是在建立一個獨立的檔案,而這個檔案會讓資料的讀取指向他 link 的那個檔案的檔名!由於只是利用檔案來做為指向的動作。所以,當來源檔被刪除後,symbolic link 檔案會失效,。實際上就是找不到原始的檔名。
實質上,最大的區別在於hard指向的是父inode,symbolic指向的是子inode
使用命令:
dumpe2fs /dev/sdb1 可以檢視分割槽的block和inode 的情況。
ls -li可以檢視inode號碼。
df -h 目錄 可以檢視磁碟的資訊。