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