885 views
 owned this note
--- disqus: ncumcl --- # Ext4檔案格式 ###### tags: `MCL Notebook` # 用處 說用處,我覺得以這個主題來說,更像是了解我們平常在用的東西,如果你用的是Ubuntu 16.04的話,你所用的檔案系統就是Ext4,了解你所使用的東西,更可以善用他 而這篇我比較想要分享的是,檔案系統的特性與擅長,了解你所使用的東西的特性,在遇到狀況時,更可以選擇適合自己的東西 # 相關知識 ## 背景知識 - 部分 Linux 指令 - 檔案系統 ## 其他議題 - NFS (windows 的檔案系統) - fat32 (早期 windows 的檔案系統,現在部分東西依然使用) - btrfs (現在功能性很強的檔案系統,可以做快照,聽說 docker image 主要也是利用有快照特性的檔案系統功能做出來的) ## 延伸議題 對這個議題比較難講,因為已經到很進階的東西了XDD - ## 內容 Ext4主要是由Ext2到Ext3一路的演進過來,但實際上的概念都差不多,只是後面做的功能愈來愈多,都還是有保持向下相容,這可以是個優點也是個缺點,詳細可以參考vbird的ext4介紹,他也有提到,所以後期的CentOS就使用xfs,好像也是這個原因,Ext2到Ext3主要是多了日誌的功能,Ext3到Ext4聽說很多,但我也沒有找到明確的說多了什麼,好像過去ext3的格式無法放很大的檔案,總硬碟空間也沒有辦法到很高,是到Ext4才可以那麼高的,在總容量這件事上,可以說是Ext4的一個問題,這關係到他的設計方式,現在我們就先來談談為什麼他會有這樣的問題,以及因為他的設計它也有其他的優勢。 block and block group: 因為我再來講的內容,Ext2就有了,所以後面都稱作Ext2,他把儲存媒體的空間以一個block的大小為最基礎大小,把整個儲存空間做分割,常見的大小有1K、2K、4K,基本上整個block都是相同的用途,而很多的block會再組成block group,可以想成是一個block group可以是組成一個檔案系統所需的功能最小單位,所以裡面會放有各種功能,而整個檔案系統也就是由許多的block group所組成。 ## super block: 你現在知道在Ext2裡有許多資訊會是動態的,如block的大小,多少個block組成一個block group,更別說到之後的Ext4,還有很多的flag可以設定,就可以有更多的功能變化,而這些資訊都要放哪裡呢?答案就是放super block裡面,一般是放在block group的最前面,一個例外舊式第一個superblock,一定是放在儲存媒體的1kB的地方開始放,會放整整1kB,為什麼從1kB開始放呢?因為常常前面會放些重要的資訊,如某種的開機磁區在前443byte的位置,現在來看看你有沒有懂前面的內容,如果有的話,你可以推敲以下推論,或是有些疑問: 佔滿一個block,也可能沒有占滿,如果沒有占滿的話,因為block都是放相同的功能,因此其他的空間就浪費掉了 一定是放在第一個block group裡,且整個檔案系統都是由許多的block group構成,這樣該不會每個block group裡面都會有super block吧,雖然我們知道super block很重要,因為一遺失,連block的大小都不知道,怎麼知道想要的東西可能是怎麼分配的,因此這樣可以有多份的備份是不錯,但也備份太多了吧,這樣不就都浪費空間存重複的東西去了,你猜的沒有錯,預設來說是這樣,但設計的人也知道這樣很佔空間,因此可以設定不同的flag,這些flag放在super block裡,所以你只需要讀取第一個super block中,關於flag的資訊,就可以知道後面會怎麼放,他就不會每個地方都放super block了,flag會在後面介紹 block group descriptor: 前面你知道了一個block group可以說是Ext2中的最基礎單元,那我們現在會想要知道這個單元裡有哪些功能呢?答案是有super blcok、block group descriptor、inode table、inode bitmap、block bitmap,而前面你知道super block在第一個,且要看flag的設定,不見得都有,而再來放的就是block group descriptor了,而之後block group descriptor會告訴你,在此blcok group裡,第幾個block開始會放inode table、inode bitmap、block bitmap,他也會放目前這個block group裡有剩餘多少inode、block可以用,以及checksum是多少,這些其他資訊 檔案與資料夾權限與資料位置 你是有否有好奇過資料夾與檔案的關係是什麼,資料夾是否也和檔案一樣會占用block呢?而檔案與資料夾的資訊實際上又是放在哪裡,感覺上是與資料分開放的,在ext2裡,這與inode與block放的資訊有密切的關係 實際上檔案的權限、創建/修改時間、擁有者ID與群組IID都是記錄在inode裡 inode table: flag: ## 相關資料: ###### key work `ext4` `superblock` http://linux.vbird.org/linux_basic/0230filesystem.php http://linux.vbird.org/linux_basic/0210filepermission.php https://zh.wikipedia.org/wiki/Ext4 https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout ## 常用指令: dumpe2fs debugfs stat dd mkfs -t ext4