Linux-鸟菜-7-Linux文件系统-EXT
Linux-鳥菜-7-Linux文件系統-EXT
Linux最傳統的磁盤文件系統(filesystem)使用的是EXT2,所以先從EXT2開始了解。
????/dev/sd[a-p][1-128]??為實體磁盤的磁盤文件名
????/dev/vd[a-d][1-128]??為虛擬磁盤的磁盤文件名
????Ext2(Linux?second?extended?file?system,ext2fs)
????一個可被掛載的數據為一個文件系統而不是一個分區槽。
文件系統通常會將這兩部分的數據分別存放在不同的區塊,權限與屬性放置到inode中,至于實際數據則放置到data?block?區塊中。另外,還有一個超級區塊(superblock)會記錄整個文件系統的整體信息,包括inode與block的總量、使用量、剩余量等。
每個inode與block都有編號,相關數據意義如下:
Superblock:?記錄此filesystem的整體信息,包括inode/block的總量、使用量、剩余量,以及文件系統的格式與相關信息等。
Inode:記錄文件的屬性,一個文件占用一個inode,同時記錄此文件的數據所在的block號碼。
Block:實際記錄文件的內容,若文件太大時,會占用多個block。
?
Inode/block資料存儲示意圖(索引式文件系統)
FAT文件系統圖
????文件系統一開始就將inode與block規劃好了,除非重新格式化(或者利用resize2fs等指令更改文件系統大小),否則inode與block固定后就不再變動。但是如果文件系統過大,將所有inode與block放在一起有點不好維護。于是Ext2文件系統在格式化的時候基本上是區分為多個區塊群組(block?group)的,每個區塊群組都有獨立的inode/block/superblock系統。
? ? 在整體的規劃當中,文件系統最前面有一個啟動山扇區(boot?sector),這個啟動扇區可以安裝開機管理程序,這個非常重要的設計,因為這樣就可以將不同的開機管理程序安裝到個別的文件系統最前端,而不用覆蓋磁盤衛衣MBR,這樣也才能制作出多重引導的環境。Block?group下面的留個模塊下面細說:
?
Data?block?[以ext2系統為例]
? ? 實際存儲數據的地方,有編號,大小可以為1?2?4?K,在格式化的時候確定的,根據大小的不同,導致系統對文件管理的限制也就不同。如下:
?
*原則上,block的大小與數量在格式化完就不能夠再改變了(除非重新格式化);
*每個block內最多只能防止一個文件的數據;
*如果文件大于block的大小,這一個文件會占用多個block數量;
*若文件小于block,則該block的剩余容量就不能夠再被使用了(磁盤空間浪費)
?
Inode?table(inode?表格)
*該文件的存儲模式(rwx);
*該文件的擁有者與組群(owner/group);
*該文件的容量;
*該文件建立或狀態改變的時間(ctime);
*該文件最近一次的讀取時間(atime);
*最近修改時間(mtime);
*定義特殊性的標志,如SetUID
*真正內容指向(pointer);
*每個inode大小均固定為128bytes(新的ext4與xfs可設定到256bytes);
*每個文件都僅會占用一個inode而已;
*因此文件系統能夠建立的文件數與inode數量有關;
*系統讀取文件時需要先找到inode,并分析inode所記錄的權限與用戶是否符合,若符合才能夠開始讀取block的內容。
????下面例子是展示128b的inode怎么存400MB的文件,通常每個block占用4b的index。直接存肯定不夠,假如block位4K,那么400MB/4K*4b?遠遠大于128b,而每個文件又只能使用一個index來存,所以出現了直接,間接,雙間接三間接等等。
?
Inode(假如block=1K)
12個直連接指向:12*1K=12K
間接?:256*1K=256K
雙間接:256*256*1K=256^2K
三間接:256*256*256*1K=256^3K
總值:
將直連接、間接、雙間接、三間接賈總,得到12+256+256*256+256*256*256=16G
????所以當block為1K大小時,能夠容納的最大文件為16GB,但是不能用同樣的方法計算2K以及4K?block,因為大雨2K的block將會受到Ext2文件系統本身的限制。
?
Superblock(超級區塊)?
Suiperblock是記錄整個filesystem相關信息的地方,沒有Superblock就沒有filesystem了。
*block與inode的總量;
*未使用與已使用的inode/block數量;
*block與inode的大小(block與1,2,3K,inode為128/256bytes);
*filesystem的掛載時間、最近一次寫入數據的時間、最近一次檢驗磁盤(fsck)的時間等文件系統相關信息;
*一個validbit的數值,若此文件系統已被掛載,則valid?bit為0,若未被掛載,則valid?bit為1。
? ? Superblock的大小為1024bytes,每個block?group都可能含有superblock,但是我們也說一個文件系統應該僅有一個superblock,事實上除了第一個block?group內會含有superblock之外,后續的block?group不一定含有superblock,而若有superblock則該superblock主要是做為第一個block?group內superblock的備份。
?
Filesystem?Description(文件系統描述說明)
這個區段可以描述每個block?group的開始于結束的block號碼,以及說明每個區段(superblock?bitmap?inodemap?datablock)分別位于哪一個block號碼之間。
?
Block?bitmap(區塊對照表)
從block?bitmap?當中可以知道哪些block是空的,因此我們的系統就能夠很快速的找到可以使用空間來處理文件。同時如果刪除文件時,也會在這里標記相關位置是空的了。
?
Inode?bitmap(inode對照表)
和上面一樣,只不過這個是標記inode的。
?
查看superblock用dumpe2fs相關命令,xfs(CentOS?7.X)用不了。
與目錄樹的關系
在Linux上建立一個目錄時,文件系統會分配一個inode與至少一塊block給該目錄。其中,inode記錄該目錄的相關權限與屬性,并記錄分配到的那塊block號碼;而block則是記錄在這個目錄下的文件名與該文件名占用的inode號碼數據。如下block記錄的:
?
想要觀察文件占用的inode號碼時,可以使用?ls?-i
目錄樹讀取
? ? 經過上面的說明克制,inode本身賓補記錄文件名,文件名的記錄是在目錄的block中,所以之前說?文件增刪改查與目錄的w權限有關。那么因為文件名是記錄在目錄的block當中,因此當我們要讀取某個文件時,就無比會經過目錄的inode與block,然后才能找到那個帶讀取文件的inode號碼,最后才會督導正確文件的block內的數據。
由于目錄是是由根目錄開始讀起,因此系統透過掛載的信息可以找到掛載點的inode號碼,次數就能夠找到根目錄的inode內容,并依據該inode讀取根目錄的block內文件名的數據,再一層一層的往下讀到正確的文件。
總結
以上是生活随笔為你收集整理的Linux-鸟菜-7-Linux文件系统-EXT的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux-鸟菜-6-文件搜索
- 下一篇: HTTP1.0,1.1,2.0,HTTP