最新日韩欧美在线综合网_成人在线视_自拍偷拍第八页_欧美又大又粗又硬又色A片_亚洲精品国产成人片_一级片手机在线

IT之道-艾銻知道

您當前位置: 主頁 > IT服務 > 服務器服務 >

IT系統(tǒng)運維中Linux文件系統(tǒng)詳解


2020-04-18 19:33 作者:艾銻無限 瀏覽量:

IT系統(tǒng)運維 | Linux文件系統(tǒng)詳解
 
Linux 文件系統(tǒng)體系結構是一個對復雜系統(tǒng)進行抽象化的有趣例子。通過使用一組通用的 API 函數(shù),Linux 可以在許多種存儲設備上支持許多種文件系統(tǒng)。例如,read 函數(shù)調(diào)用可以從指定的文件描述符讀取一定數(shù)量的字節(jié)。

read 函數(shù)不了解文件系統(tǒng)的類型,比如 ext3 或 NFS。它也不了解文件系統(tǒng)所在的存儲媒體,比如 AT Attachment Packet Interface(ATAPI)磁盤、Serial-Attached SCSI(SAS)磁盤或 Serial Advanced Technology Attachment(SATA)磁盤。但是,當通過調(diào)用 read 函數(shù)讀取一個文件時,數(shù)據(jù)會正常返回。本文講解這個機制的實現(xiàn)方法并介紹 Linux 文件系統(tǒng)層的主要結構。作為Linux系統(tǒng)運維工程師必須掌握

什么是文件系統(tǒng)?

首先回答最常見的問題,“什么是文件系統(tǒng)”。文件系統(tǒng)是對一個存儲設備上的數(shù)據(jù)和元數(shù)據(jù)進行組織的機制。由于定義如此寬泛,支持它的代碼會很有意思。正如前面提到的,有許多種文件系統(tǒng)和媒體。由于存在這么多類型,可以預料到 Linux 文件系統(tǒng)接口實現(xiàn)為分層的體系結構,從而將用戶接口層、文件系統(tǒng)實現(xiàn)和操作存儲設備的驅(qū)動程序分隔開。

掛裝

在 Linux 中將一個文件系統(tǒng)與一個存儲設備關聯(lián)起來的過程稱為掛裝(mount)。使用 mount 命令將一個文件系統(tǒng)附著到當前文件系統(tǒng)層次結構中(根)。在執(zhí)行掛裝時,要提供文件系統(tǒng)類型、文件系統(tǒng)和一個掛裝點。

為了說明 Linux 文件系統(tǒng)層的功能(以及掛裝的方法),我們在當前文件系統(tǒng)的一個文件中創(chuàng)建一個文件系統(tǒng)。實現(xiàn)的方法是,首先用 dd 命令創(chuàng)建一個指定大小的文件(使用 /dev/zero 作為源進行文件復制)—— 換句話說,一個用零進行初始化的文件

文件系統(tǒng)體系結構

既然已經(jīng)看到了文件系統(tǒng)的構造方法,現(xiàn)在就看看 Linux 文件系統(tǒng)層的體系結構。本文從兩個角度考察 Linux 文件系統(tǒng)。首先采用高層體系結構的角度。然后進行深層次討論,介紹實現(xiàn)文件系統(tǒng)層的主要結構。

高層體系結構

盡管大多數(shù)文件系統(tǒng)代碼在內(nèi)核中(后面討論的用戶空間文件系統(tǒng)除外),但是圖 1 所示的體系結構顯示了用戶空間和內(nèi)核中與文件系統(tǒng)相關的主要組件之間的關系。
Linux 文件系統(tǒng)組件的體系結構


 


 
用戶空間包含一些應用程序(例如,文件系統(tǒng)的使用者)和 GNU C 庫(glibc),它們?yōu)槲募到y(tǒng)調(diào)用(打開、讀取、寫和關閉)提供用戶接口。系統(tǒng)調(diào)用接口的作用就像是交換器,它將系統(tǒng)調(diào)用從用戶空間發(fā)送到內(nèi)核空間中的適當端點。

VFS 是底層文件系統(tǒng)的主要接口。這個組件導出一組接口,然后將它們抽象到各個文件系統(tǒng),各個文件系統(tǒng)的行為可能差異很大。有兩個針對文件系統(tǒng)對象的緩存(inode 和 dentry)。它們緩存最近使用過的文件系統(tǒng)對象。每個文件系統(tǒng)實現(xiàn)(比如 ext2、JFS 等等)導出一組通用接口,供 VFS 使用。緩沖區(qū)緩存會緩存文件系統(tǒng)和相關塊設備之間的請求。例如,對底層設備驅(qū)動程序的讀寫請求會通過緩沖區(qū)緩存來傳遞。這就允許在其中緩存請求,減少訪問物理設備的次數(shù),加快訪問速度。以最近使用(LRU)列表的形式管理緩沖區(qū)緩存。注意,可以使用 sync 命令將緩沖區(qū)緩存中的請求發(fā)送到存儲媒體(迫使所有未寫的數(shù)據(jù)發(fā)送到設備驅(qū)動程序,進而發(fā)送到存儲設備)。這就是 VFS 和文件系統(tǒng)組件的高層情況。現(xiàn)在,討論實現(xiàn)這個子系統(tǒng)的主要結構。

主要結構

Linux 以一組通用對象的角度看待所有文件系統(tǒng)。這些對象是超級塊(superblock)、inode、dentry 和文件。超級塊在每個文件系統(tǒng)的根上,超級塊描述和維護文件系統(tǒng)的狀態(tài)。文件系統(tǒng)中管理的每個對象(文件或目錄)在 Linux 中表示為一個 inode。inode 包含管理文件系統(tǒng)中的對象所需的所有元數(shù)據(jù)(包括可以在對象上執(zhí)行的操作)。另一組結構稱為 dentry,它們用來實現(xiàn)名稱和 inode 之間的映射,有一個目錄緩存用來保存最近使用的 dentry。dentry 還維護目錄和文件之間的關系,從而支持在文件系統(tǒng)中移動。最后,VFS 文件表示一個打開的文件(保存打開的文件的狀態(tài),比如寫偏移量等等)。

虛擬文件系統(tǒng)層

VFS 作為文件系統(tǒng)接口的根層。VFS 記錄當前支持的文件系統(tǒng)以及當前掛裝的文件系統(tǒng)。

可以使用一組注冊函數(shù)在 Linux 中動態(tài)地添加或刪除文件系統(tǒng)。內(nèi)核保存當前支持的文件系統(tǒng)的列表,可以通過 /proc 文件系統(tǒng)在用戶空間中查看這個列表。這個虛擬文件還顯示當前與這些文件系統(tǒng)相關聯(lián)的設備。在 Linux 中添加新文件系統(tǒng)的方法是調(diào)用 register_filesystem。這個函數(shù)的參數(shù)定義一個文件系統(tǒng)結構(file_system_type)的引用,這個結構定義文件系統(tǒng)的名稱、一組屬性和兩個超級塊函數(shù)。也可以注銷文件系統(tǒng)。

在注冊新的文件系統(tǒng)時,會把這個文件系統(tǒng)和它的相關信息添加到 file_systems 列表中。這個列表定義可以支持的文件系統(tǒng)。在命令行上輸入 cat /proc/filesystems,就可以查看這個列表。

向內(nèi)核注冊的文件系統(tǒng)

 

 
VFS 中維護的另一個結構是掛裝的文件系統(tǒng)。這個結構提供當前掛裝的文件系統(tǒng)(見 linux /include /linux/fs.h)。它鏈接下面討論的超級塊結構。

掛裝的文件系統(tǒng)列表


 

 
超級塊

超級塊結構表示一個文件系統(tǒng)。它包含管理文件系統(tǒng)所需的信息,包括文件系統(tǒng)名稱(比如 ext2)、文件系統(tǒng)的大小和狀態(tài)、塊設備的引用和元數(shù)據(jù)信息(比如空閑列表等等)。超級塊通常存儲在存儲媒體上,但是如果超級塊不存在,也可以實時創(chuàng)建它。可以在 ./linux/include/linux/fs.h 中找到超級塊結構。

超級塊結構和 inode 操作

 

 
超級塊中的一個重要元素是超級塊操作的定義。這個結構定義一組用來管理這個文件系統(tǒng)中的 inode 的函數(shù)。例如,可以用 alloc_inode 分配 inode,用 destroy_inode 刪除 inode。可以用 read_inode 和 write_inode 讀寫 inode,用 sync_fs 執(zhí)行文件系統(tǒng)同步。可以在 ./linux /include/ linux/fs.h 中找到 super_operations 結構。每個文件系統(tǒng)提供自己的 inode 方法,這些方法實現(xiàn)操作并向 VFS 層提供通用的抽象。

inode和dentry

inode 表示文件系統(tǒng)中的一個對象,它具有惟一標識符。各個文件系統(tǒng)提供將文件名映射為惟一 inode 標識符和 inode 引用的方法。下面顯示 inode 結構的一部分以及兩個相關結構。請?zhí)貏e注意 inode_operations 和 file_operations。這些結構表示可以在這個 inode 上執(zhí)行的操作。inode_operations 定義直接在 inode 上執(zhí)行的操作,而 file_operations 定義與文件和目錄相關的方法(標準系統(tǒng)調(diào)用)。

inode 結構和相關聯(lián)的操作

 

 
inode 和目錄緩存分別保存最近使用的 inode 和 dentry。注意,對于 inode 緩存中的每個 inode,在目錄緩存中都有一個對應的 dentry。可以在 ./linux/include/linux/fs.h 中找到 inode 和 dentry 結構。

緩沖區(qū)緩存

除了各個文件系統(tǒng)實現(xiàn)(可以在 ./linux/fs 中找到)之外,文件系統(tǒng)層的底部是緩沖區(qū)緩存。這個組件跟蹤來自文件系統(tǒng)實現(xiàn)和物理設備(通過設備驅(qū)動程序)的讀寫請求。為了提高效率,Linux 對請求進行緩存,避免將所有請求發(fā)送到物理設備。緩存中緩存最近使用的緩沖區(qū)(頁面),這些緩沖區(qū)可以快速提供給各個文件系統(tǒng)。

有趣的文件系統(tǒng)

本文沒有討論 Linux 中可用的具體文件系統(tǒng),但是值得在這里稍微提一下。Linux 支持許多種文件系統(tǒng),包括 MINIX、MS-DOS 和 ext2 等老式文件系統(tǒng)。Linux 還支持 ext3、JFS 和 ReiserFS 等新的日志型文件系統(tǒng)。另外,Linux 支持加密文件系統(tǒng)(比如 CFS)和虛擬文件系統(tǒng)(比如 /proc)。

最后一種值得注意的文件系統(tǒng)是 Filesystem in Userspace(FUSE)。這種文件系統(tǒng)可以將文件系統(tǒng)請求通過 VFS 發(fā)送回用戶空間。所以,如果您有興趣創(chuàng)建自己的文件系統(tǒng),那么通過使用 FUSE 進行開發(fā)是一種不錯的方法。

結束語

盡管文件系統(tǒng)的實現(xiàn)并不復雜,但它是可伸縮可擴展的體系結構的好例子。文件系統(tǒng)體系結構已經(jīng)發(fā)展了許多年,并成功地支持了許多不同類型的文件系統(tǒng)和許多目標存儲設備類型。由于使用了基于插件的體系結構和多層的函數(shù)間接性,Linux 文件系統(tǒng)在近期的發(fā)展很值得關注。
 
以上內(nèi)容由北京艾銻無限科技發(fā)展有限公司整理

相關文章

IT外包服務
二維碼 關閉
主站蜘蛛池模板: 成年人黄色av | 日本一卡2卡三卡4卡无卡免费网站 | www·377黄·com| 欧美日韩国产综合新一区 | 久久久久国产精品一区 | 亚洲免费一级 | 亚洲国产成人精品视频 | 麻豆精品无码国产在线果冻 | 爱爱视频天天干 | 天天天天色 | 中文字幕第25页 | 亚洲无码精品在线观看影院 | 东方800av | 色翁荡熄又大又硬又粗又视频软件 | 国产精品xxx视频 | 免费精品人在线二线三线区别 | 黄色动漫影院 | 欧美视频三区 | 亚洲欧美国产欧美色欲 | 久久久噜噜噜久久久精品 | .com久久久 | 玩弄放荡人妇系列AV在线网站 | 一本一道久久a久久精品综合蜜臀 | 国产一区二区三区免费观看视频 | 日韩成人久久 | 免费一级肉体全黄毛片 | 91看片在线看片 | 被义子侵犯漂亮人妻HD | 人人色在线视频播放 | 黄色变态网站 | 国产亚洲精品久久久闺蜜 | 国产午夜精品一区二区三区在线观看 | 穿乳环蒂环上锁调教老师 | 人妻少妇被猛烈进入中文字幕 | 国产成人精品无码播放 | 国产在线一二三区 | 精品无码人妻一区二区三区品 | 一级做受 | 欧美日韩在线精品一区二区三区激情福利综合 | 欧美视频在线二区 | 性高潮一级片 |