linux裸设备文件系统,Linux当中的文件系统
1. 設備專用文件(設備文件)
設備專用文件與系統的某個設備相對應。在內核中,每種設備類型都有閾值向對應的設備驅動程序,用來處理設備的所有I/O請求。可以將設備劃分為字符設備和塊設備兩種。
每個設備文件都有主、輔id號各一個。主id號標識一般的設備等級,內核會使用主ID號通過一顆設備相應的紅黑樹來找到相應的驅動程序。輔id號能夠標識特定設備。
設備文件的inode中記錄了設備文件的主、輔id。每個設備驅動程序都會將自己與特定主設備號的關聯關系向內核注冊(上面說的紅黑樹),一次建立設備專用文件和設備驅動程序之間的關系。內核是不會使用設備文件名來查找驅動程序的。
2. 磁盤和分區
磁盤分區可以容納任何類型的信息,但通常只會包含以下之一:
文件系統:用來存放常規文件
數據區域:可以作為裸設備來對其進行訪問
交換區域:供內核的內存管理之用
3. 文件系統
在文件系統中,用來分配空間的基本單位是邏輯塊,即文件系統所在磁盤設備上若干連續的物理塊
引導塊:總是作為文件系統的首塊,不為文件系統所用,只包含用來引導操作系統的信息
超級塊:包含用于文件系統有關的參考信息:inode表容量、文件系統中邏輯塊的大小、以邏輯塊計,文件系統的大小
文件系統中的每個文件或目錄在inode表中都對應著唯一一條記錄。這條記錄登記關乎文件的各種信息
數據塊:文件系統的大部分空間都用于存放數據
5. inode
針對駐留于文件系統上的每個文件,文件系統的inode表會包含一個inode,inode所維護的信息如下:
文件類型
文件屬主
文件屬組
三類用戶的訪問權限
三個時間戳(文件的最后訪問時間a,文件最后修改時間m、文件狀態的最后改變時間c)
指向文件的硬鏈接數量
文件的大小,以字節為單位
實際分配給文件的塊數量,以512字節塊為單位
指向文件數據塊的指針
6. 虛擬文件系統
linux所支持的各種文件系統,其實現細節均不相同。虛擬文件系統是一種內核特性,通過為文件系統操作創建抽象層來解決問題:
vfs針對文件系統定義了一套通用接口。所有與文件交互的程序都會按照這一接口來進行操作
每種文件系統都會提供vfs接口的實現
7. 日志系統
系統崩潰之后,為了確保文件系統的完整性,充氣式就必須對文件系統的一致性進行檢查fsck。如果過大,就會非常瑪法。
采用日志文件系統,則無需在系統崩潰后對文件進行漫長的一致性檢查。在實際更新元數據前,日志文件系統會將這些更新操作記錄與專用的磁盤日志文件中,對元數據更新的記錄是按照其相關性分組進行的。在事務處理過程中,一旦系統崩潰,系統重啟時便可以利用日志重做(redo)任何不完整的更新,同時為文件系統恢復一致性狀態。借用數據庫的說法,日志文件系統能夠確保總是將文件元數據事務作為一個完整丹玉來提交。
8. 文件系統的掛載和卸載
點擊(此處)折疊或打開
1. #include
2. intmount(constchar\*source,constchar\*target,constchar\*fstype,unsigned long mountflags,constvoid\*data);
3. /\*returns 0onsuccess,or\-1onerror\*/
fstype是一個字符串,用來標識設備所含文件系統的類型
data是一個指向信息緩沖區的指針,對其的解釋則取決于文件系統,就大多數文件系統而言,該參數就是一個字符串,包含了以逗號分隔的選項設置
點擊(此處)折疊或打開
1. #include
2. intumount(constchar\*target);
3. /\*returns 0onsuccess,or\-1onerror\*/
4. intumount2(constchar\*target,intflags);
5. /\*returns 0onsuccess,or\-1onerror\*/
9\. 獲得與文件系統 有關的信息:statvfs()
點擊(此處)折疊或打開
1. #include
2. intstatvfs(constchar\*pathname,struct statvfs\*statvfsbuf);
3. intfstatvfs(intfd,struct statvfs\*statvfsbuf);
4. /\*both return 0onsuccess,or\-1onerror\*/
5. struct statvfs{
6. ????unsigned long f\_bsize;/\*file\-system block size\*/
7. ????unsigned long f\_frsize;/\*fundamental file\-system block size\*/
8. ????fsblkcnt\_t f\_blocks;/\*total number of blocksinfile system(inunits of f\_frsize)\*/
9. ????fsblkcnt\_t f\_bfree;/\*total number of free blocks\*/
10. ????fsblkcnt\_t f\_bavail;/\*number of free blocks availabletounprivileged process\*/
11. ????fsfilcnt\_t f\_files;/\*total number of i\-nodes\*/
12. ????fsfilcnt\_t f\_ffree;/\*total number of free i\-nodes\*/
13. ????fsfilcnt\_t f\_favail;/\*number of i\-nodes availabletounprivileged process\*/
14. ????unsigned long f\_fsid;/\*file\-system ID\*/
15. ????unsigned long f\_flag;/\*mount flags\*/
16. ????unsigned long f\_namemax;/\*maximun length of filenamesonthis file system\*/
17. };
以上兩個函數能夠獲得與已掛載文件系統有關的信息
總結
以上是生活随笔為你收集整理的linux裸设备文件系统,Linux当中的文件系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux网络设备驱动结构体,Linux
- 下一篇: linux apache守护进程,Lin