了解
Windows98以前的操作系統(tǒng)主要使用的是FAT,Windows 2000以后的版本使用NTFS文件系統(tǒng),至于Linux的正統(tǒng)文件系統(tǒng)為ext2
Linux文件系統(tǒng)
一個可被掛載的數(shù)據(jù)為一個文件系統(tǒng)
- 超級區(qū)塊:記錄此文件系統(tǒng)的整體信息,包括inode與數(shù)據(jù)區(qū)塊的總量,使用量,剩余量以及文件系統(tǒng)的格式與相關信息等。
- inode:記錄文件的屬性,一個文件占用一個inode,同時記錄此文件的數(shù)據(jù)所在的數(shù)據(jù)區(qū)塊的號碼。
- 數(shù)據(jù)區(qū)塊:實際記錄文件的內(nèi)容,若文件太大時,會占用多個區(qū)塊。
區(qū)塊群組
當一個文件系統(tǒng)過大時,ext2文件系統(tǒng)格式化時基本上是區(qū)分為多個區(qū)塊群組,每個區(qū)塊群組都有獨立的inode,數(shù)據(jù)區(qū)塊,超級數(shù)據(jù)區(qū)塊系統(tǒng)。
- 數(shù)據(jù)區(qū)塊
①原則上,區(qū)塊的大小與數(shù)量在格式化完成后,就不能再修改。
②每個區(qū)塊最多只能放置一個文件的數(shù)據(jù)。
③如果文件大于區(qū)塊的大小,則一個文件就會占有多個區(qū)塊數(shù)量
④若文件小于區(qū)塊,則該區(qū)塊的剩余容量就不能夠再被使用了(磁盤空間會浪費)
| block大小 | 1kb | 2kb | 4kb |
|---|---|---|---|
| 最大單一文件限制 | 16GB | 256GB | 2TB |
| 最大文件系統(tǒng)限制 | 2TB | 8TB | 16TB |
- inode表
1.內(nèi)容
①該文件的讀寫屬性
②該文件的擁有著與用戶組
③該文件的大小
④該文件建立或狀態(tài)改變的時間(ctime)
⑥最后一次讀取的時間(atime)
⑦最近修改內(nèi)容的時間(mtime)
⑧定義文件特性的表示(SUID,SGID,SBIT)
⑨該文件真正內(nèi)容的指向
- 特點
①每個inode大小均固定為128B(新的ext4與xfs可設置到256B),記錄一個數(shù)據(jù)區(qū)塊為4B。
②每個文件都僅會占用一個inode
③文件系統(tǒng)能夠建立的文件數(shù)量與inode的數(shù)量有關
④系統(tǒng)讀取文件時需要先找到inode,并分析inode所記錄的權限與用戶是否符合,若符合才能夠讀取區(qū)塊的內(nèi)容。
⑤為擴大支持單個文件的大小,將inode記錄區(qū)塊號碼的區(qū)域定義為12個直接,1個間接,一個雙間接,一個三間接。
- 超級區(qū)塊
——超級區(qū)塊是記錄整個文件系統(tǒng)相關信息的地方,沒有超級區(qū)塊,就沒有這個文件系統(tǒng)
①數(shù)據(jù)區(qū)塊與inode的總量
②未使用與已使用的inode與數(shù)據(jù)區(qū)塊的數(shù)量
③數(shù)據(jù)區(qū)塊與inode的大小(block為1,2,4k,inode為128B或256B)
④文件系統(tǒng)的掛載時間、最近一次寫入數(shù)據(jù)的時間、最近一次檢驗磁盤的時間等文件系統(tǒng)的相關信息。
⑤一個有效位數(shù)值,若此文件系統(tǒng)已被掛載,則有效位為0,若未被掛載,則有效位為1; - 文件系統(tǒng)描述性說明
描述每個區(qū)塊群組的開始與結束的區(qū)塊,以及說明每個區(qū)段分別介于哪一個區(qū)塊之間。 - 區(qū)塊對照表
記錄使用與未使用的區(qū)塊的號碼 - inode對照表
記錄使用與未使用的inode號碼
dumpe2fs:查詢ext系列超級區(qū)塊信息的命令
目錄文件與一般文件在文件系統(tǒng)中是如何記錄數(shù)據(jù)的?
- 目錄
當我們在linux下的文件系統(tǒng)建立一個目錄時,文件系統(tǒng)會分配一個inode與至少一個數(shù)據(jù)區(qū)塊給該目錄。其中inode記錄該目錄的相關權限與屬性,并可記錄分配到那塊數(shù)據(jù)區(qū)塊的號碼,而數(shù)據(jù)區(qū)塊則是記錄在這個目錄下的文件名與該文件名占用的inode號碼數(shù)據(jù)。 - 文件
當我們在linux下的ext2建立一個一般文件時,ext2會分配一個inode與相對于該文件大小的數(shù)據(jù)區(qū)塊數(shù)量給該文件。 - 目錄樹讀取
以讀取/etc/passwd為例
①根目錄/的inode
②/的數(shù)據(jù)區(qū)塊
③etc/的inode
④etc/的數(shù)據(jù)區(qū)塊
⑤passwd的inode
⑥passwd的數(shù)據(jù)區(qū)塊
新增一個文件時,文件系統(tǒng)的操作
①先確定用戶對于欲增加文件的目錄是否具有w和x的權限,若有的話才可以新增。
②根據(jù)inode對照表找到?jīng)]有使用的inode號碼,并將新文件的權限/屬性寫入。
③根據(jù)區(qū)塊對照表找到?jīng)]有使用的數(shù)據(jù)區(qū)塊的號碼,并將實際的數(shù)據(jù)寫入?yún)^(qū)塊中,且更新inode區(qū)塊指向數(shù)據(jù)區(qū)塊。
④將剛寫入的inode與數(shù)據(jù)區(qū)塊同步更新inode對照表,區(qū)塊對照表,并更新超級區(qū)塊的內(nèi)容。
inode區(qū)塊與數(shù)據(jù)區(qū)塊稱為數(shù)據(jù)存放區(qū)
inode對照表,區(qū)塊對照表和超級區(qū)塊被稱為元數(shù)據(jù)(因為每次新增,修改,刪除時都會影響這三部分的數(shù)據(jù))
e2fsck:強制進行數(shù)據(jù)一致性的檢查
linux內(nèi)存與磁盤的異步處理方式
當系統(tǒng)加載一個文件到內(nèi)存后,如果該文件沒有被修改,則在內(nèi)存區(qū)段的文件數(shù)據(jù)會被設置成clean,但如果內(nèi)存中的文件被修改,在內(nèi)存區(qū)段的文件數(shù)據(jù)就會被設置成dirty,此時所有的操作都還在內(nèi)存中執(zhí)行,并沒有寫入到磁盤中。系統(tǒng)會不定時的將設置為dirty的數(shù)據(jù)寫回磁盤,以保持磁盤與內(nèi)存數(shù)據(jù)的一致性。sync命令手動強制寫入磁盤
linux系統(tǒng)上的文件系統(tǒng)與內(nèi)存的關系
①系統(tǒng)會將常用的文件數(shù)據(jù)放置到內(nèi)存的緩沖區(qū),以加速文件系統(tǒng)的讀寫操作。
②Linux的物理內(nèi)存最后都會被用光,這是正?,F(xiàn)象。
③可以手動使用sync命令來強制內(nèi)存中設置為Dirty的文件回寫到磁盤中。
④正常關機時,關機命令會主動調(diào)用sync將內(nèi)存中數(shù)據(jù)回寫入磁盤中。
⑤若不正常關機,由于數(shù)據(jù)尚未回寫入磁盤中,因此啟動后可能會花很多時間進行磁盤校驗,甚至導致文件系統(tǒng)的損壞。
xfs文件系統(tǒng)的配置
xfs文件系統(tǒng)在數(shù)據(jù)的分布上,規(guī)劃為三部分,數(shù)據(jù)區(qū)、文件系統(tǒng)活動登錄區(qū)、實時運行區(qū)
- 數(shù)據(jù)區(qū)
xfs的數(shù)據(jù)區(qū)與ext系列一樣,包含inode、數(shù)據(jù)區(qū)塊、超級數(shù)據(jù)區(qū)塊等數(shù)據(jù),也分為多個存儲區(qū)群組分別放置文件系統(tǒng)所需要的數(shù)據(jù)。每個存儲區(qū)分組都包含①整個文件系統(tǒng)的超級區(qū)塊②剩余空間的管理機制③inode的分配與追蹤。inode與區(qū)塊都是系統(tǒng)需要時才動態(tài)配置產(chǎn)生的,所以格式化操作非???/strong> - 文件系統(tǒng)活動登錄區(qū)
用來記錄文件系統(tǒng)的變化。文件的變化會在這里記錄下來,直到該變化完整的寫入到數(shù)據(jù)區(qū),該條記錄才會被結束。如果文件系統(tǒng)由于某些緣故而損壞時,系統(tǒng)會拿這個登錄區(qū)塊進行檢驗,看看系統(tǒng)掛掉之前,文件系統(tǒng)正在運行啥操作,借以快速地修復文件系統(tǒng)。 - 實時運行區(qū)
當有文件要被建立時,xfs會在這個區(qū)段里面找一個或數(shù)個的extent區(qū)塊,將文件放置在這個區(qū)塊內(nèi),等到分配完畢后,再寫入到數(shù)據(jù)區(qū)的inode與數(shù)據(jù)區(qū)塊中。