- 相關(guān)推薦
Linux文件系統掛裝與高層體系結構
Windows XP高昂的價(jià)格和升級收費政策使更多企業(yè)和個(gè)人用戶(hù)轉向自由開(kāi)放的Linux操作系統,目標雇主群會(huì )迅速增長(cháng)。下面是小編整理的關(guān)于Linux文件系統掛裝與高層體系結構,希望大家認真閱讀!
文件系統體系結構
既然已經(jīng)看到了文件系統的構造方法,現在就看看Linux文件系統層的體系結構。本文從兩個(gè)角度考察Linux文件系統。首先采用高層體系結構的角度。然后進(jìn)行深層次討論,介紹實(shí)現文件系統層的主要結構。
高層體系結構
盡管大多數文件系統代碼在內核中(后面討論的用戶(hù)空間文件系統除外),但是圖 1 所示的體系結構顯示了用戶(hù)空間和內核中與文件系統相關(guān)的主要組件之間的關(guān)系。
圖 1.Linux文件系統組件的體系結構
用戶(hù)空間包含一些應用程序(例如,文件系統的使用者)和 GNU C 庫(glibc),它們?yōu)槲募到y調用(打開(kāi)、讀取、寫(xiě)和關(guān)閉)提供用戶(hù)接口。系統調用接口的作用就像是交換器,它將系統調用從用戶(hù)空間發(fā)送到內核空間中的適當端點(diǎn)。
VFS 是底層文件系統的主要接口。這個(gè)組件導出一組接口,然后將它們抽象到各個(gè)文件系統,各個(gè)文件系統的行為可能差異很大。有兩個(gè)針對文件系統對象的緩存(inode 和 dentry)。它們緩存最近使用過(guò)的文件系統對象。
每個(gè)文件系統實(shí)現(比如 ext2、JFS 等等)導出一組通用接口,供 VFS 使用。緩沖區緩存會(huì )緩存文件系統和相關(guān)塊設備之間的請求。例如,對底層設備驅動(dòng)程序的讀寫(xiě)請求會(huì )通過(guò)緩沖區緩存來(lái)傳遞。這就允許在其中緩存請求,減少訪(fǎng)問(wèn)物理設備的次數,加快訪(fǎng)問(wèn)速度。以最近使用(LRU)列表的形式管理緩沖區緩存。注意,可以使用 sync 命令將緩沖區緩存中的請求發(fā)送到存儲媒體(迫使所有未寫(xiě)的數據發(fā)送到設備驅動(dòng)程序,進(jìn)而發(fā)送到存儲設備)。
這就是 VFS 和文件系統組件的高層情況,F在,討論實(shí)現這個(gè)子系統的主要結構。
主要結構
Linux 以一組通用對象的角度看待所有文件系統。這些對象是超級塊(superblock)、inode、dentry 和文件。超級塊在每個(gè)文件系統的根上,超級塊描述和維護文件系統的狀態(tài)。文件系統中管理的每個(gè)對象(文件或目錄)在Linux中表示為一個(gè) inode。inode 包含管理文件系統中的對象所需的所有元數據(包括可以在對象上執行的操作)。另一組結構稱(chēng)為 dentry,它們用來(lái)實(shí)現名稱(chēng)和 inode 之間的映射,有一個(gè)目錄緩存用來(lái)保存最近使用的 dentry。dentry 還維護目錄和文件之間的關(guān)系,從而支持在文件系統中移動(dòng)。最后,VFS 文件表示一個(gè)打開(kāi)的文件(保存打開(kāi)的文件的狀態(tài),比如寫(xiě)偏移量等等)。
基本的文件系統體系結構
Linux 文件系統體系結構是一個(gè)對復雜系統進(jìn)行抽象化的有趣例子。通過(guò)使用一組通用的 API 函數,Linux 可以在許多種存儲設備上支持許多種文件系統。例如,read 函數調用可以從指定的文件描述符讀取一定數量的字節。read 函數不了解文件系統的類(lèi)型,比如 ext3 或 NFS。它也不了解文件系統所在的存儲媒體,比如 AT Attachment Packet Interface(ATAPI)磁盤(pán)、Serial-Attached SCSI(SAS)磁盤(pán)或 Serial Advanced Technology Attachment(SATA)磁盤(pán)。但是,當通過(guò)調用 read 函數讀取一個(gè)文件時(shí),數據會(huì )正常返回。本文講解這個(gè)機制的實(shí)現方法并介紹Linux文件系統層的主要結構。
什么是文件系統?
首先回答最常見(jiàn)的問(wèn)題,“什么是文件系統”。文件系統是對一個(gè)存儲設備上的數據和元數據進(jìn)行組織的機制。由于定義如此寬泛,支持它的代碼會(huì )很有意思。正如前面提到的,有許多種文件系統和媒體。由于存在這么多類(lèi)型,可以預料到Linux文件系統接口實(shí)現為分層的體系結構,從而將用戶(hù)接口層、文件系統實(shí)現和操作存儲設備的驅動(dòng)程序分隔開(kāi)。
掛裝
在Linux中將一個(gè)文件系統與一個(gè)存儲設備關(guān)聯(lián)起來(lái)的過(guò)程稱(chēng)為掛裝(mount)。使用 mount 命令將一個(gè)文件系統附著(zhù)到當前文件系統層次結構中(根)。在執行掛裝時(shí),要提供文件系統類(lèi)型、文件系統和一個(gè)掛裝點(diǎn)。
為了說(shuō)明Linux文件系統層的功能(以及掛裝的方法),我們在當前文件系統的一個(gè)文件中創(chuàng )建一個(gè)文件系統。實(shí)現的方法是,首先用 dd 命令創(chuàng )建一個(gè)指定大小的文件(使用 /dev/zero 作為源進(jìn)行文件復制)-- 換句話(huà)說(shuō),一個(gè)用零進(jìn)行初始化的文件,見(jiàn)清單 1。
清單 1. 創(chuàng )建一個(gè)經(jīng)過(guò)初始化的文件
1.$ dd if=/dev/zero of=file.img bs=1k count=10000
2.10000+0 records in
3.10000+0 records out
4.$
現在有了一個(gè) 10MB 的 file.img 文件。使用 losetup 命令將一個(gè)循環(huán)設備與這個(gè)文件關(guān)聯(lián)起來(lái),讓它看起來(lái)像一個(gè)塊設備,而不是文件系統中的常規文件:
1.$ losetup /dev/loop0 file.img
2.$
這個(gè)文件現在作為一個(gè)塊設備出現(由 /dev/loop0 表示)。然后用 mke2fs 在這個(gè)設備上創(chuàng )建一個(gè)文件系統。這個(gè)命令創(chuàng )建一個(gè)指定大小的新的 ext2 文件系統,見(jiàn)清單 2。
清單 2. 用循環(huán)設備創(chuàng )建 ext2 文件系統
1.$ mke2fs -c /dev/loop0 10000
2.mke2fs 1.35 (28-Feb-2004)
3.max_blocks 1024000, rsv_groups = 1250, rsv_gdb = 39
4.Filesystem label=
5.OS type: Linux
6.Block size=1024 (log=0)
7.Fragment size=1024 (log=0)
8.2512 inodes, 10000 blocks
9.500 blocks (5.00%) reserved for the super user
10....
11.$
使用 mount 命令將循環(huán)設備(/dev/loop0)所表示的 file.img 文件掛裝到掛裝點(diǎn) /mnt/point1。注意,文件系統類(lèi)型指定為 ext2。掛裝之后,就可以將這個(gè)掛裝點(diǎn)當作一個(gè)新的文件系統,比如使用 ls 命令,見(jiàn)清單 3。
【Linux文件系統掛裝與高層體系結構】相關(guān)文章:
Linux文件系統簡(jiǎn)介06-01
Linux btrfs文件系統及管理07-31
Linux文件系統操作命令大全07-03
linux文件系統基礎知識匯總06-29
Linux用戶(hù)/文件系統管理詳解05-10
Linux操作系統文件系統基礎知識07-25
嵌入式文件系統移植07-23
Linux認證概念10-29
Linux認證優(yōu)勢06-10
學(xué)習Linux的忠告09-27