Linux虛擬檔案系統

2021-05-23 16:09:15 字數 3484 閱讀 4768

這一周主要學了檔案系統的相關知識,通過學習基本上掌握了

linux

檔案系統的結構,檔案型別,以及讀取模式等等,也學會怎麼用命令簡單的建立乙個檔案系統。

linux

的檔案系統主要有

ext2

、ext3

、ext4

,在windows

下乙個分割槽會採用的一棵目錄樹來管理,而

linux

則只有一棵目錄樹,除了系統安裝所在分割槽外,不管還有多少分割槽,什麼樣的檔案系統,都只是目錄樹下的支幹。根目錄下的目錄結構大致為

bin 、

dev 、

etc 、

home

、lib

、sbin

、tmp

、root

、mnt

、proc

、usr

、var

等。linux

中檔案型別主要有五種:常規檔案(用

- 表示)、目錄檔案(用

d 表示)、裝置檔案(塊裝置用

b 表示,字元裝置用

c 表示)、管道檔案(用

p 表示)、鏈結檔案(用

l 表示)。訪問許可權根據使用者型別分檔案所有者、所有者所在的組、其他使用者,操作模式只分成三種:讀(

4 )、寫(

2 )、執行(

1 ),根據使用者型別正好分成三組操作模式共

9 位來表示,對應於三位的八進位制。

本週學習用命令建立乙個

ext2

檔案系統的例項,由於檔案系統較為複雜,並且可能需要隨機併發讀取檔案,所以檔案系統必須安裝在塊裝置上,因為

linux

下裝置也是一種特殊的檔案,所以可以來模擬塊裝置檔案,並在其上建立檔案系統,最後用

mount

命令來掛載檔案系統到某個目錄下。詳細**如下:

sudo dd if=/dev/zero of=file.img bs=1k count=10000 /*

把輸入檔案

/dev/zero

拷貝到輸出檔案

file.img

中,輸入輸出的塊大小為

1k, 拷貝的數量為

10000

塊,這樣

file.img

檔案的總大小就是

10m 了*/

losetup /dev/loop0 file.img /*

使用losetup

建立乙個迴圈裝置

loop0

,並將其與

file.img

關聯起來,這樣就得到了乙個近似的塊裝置*/

mke2fs -c /dev/loop0 10000 /*

用mke2fs

建立乙個

10m 的

ext2

檔案系統*/

mkdir /mnt/point1 /*

建立乙個掛載位置*/

mount -t ext2 /dev/loop0 /mnt/point1

/*mount

是linux

下的檔案系統的掛載命令,

-t 用來指定檔案系統型別,後來跟上源路徑和目的路徑*/

ls /mnt/point1 /*

列出檔案系統裡的所有檔案,顯示結果檔案系統中只有

lost+found

乙個預設目錄*/

linux

對於檔案系統的支援較

windows

不僅僅是量的超躍,更是質的飛躍,

linux

從最早期的

minux

檔案系統為起點,目前常見的檔案系統幾乎全部支援,這不禁讓我們驚嘆

linux

的偉大和包容,為了實現這一功能,

linux

必須提供乙個統一的介面平台,這就是

vfs(

虛擬檔案系統

) ,這是乙個虛擬的檔案系統,指其並不在磁碟中真實的存在,剛進入系統時只進行簡單的初始化,只有當對檔案進行操作時才會進行複雜的轉換。

vfs有四個主要的物件型別,也就是四種資料結構,它們分別是超級塊物件(

super_block

)、索引節點物件(

inode

)、目錄項物件(

dentry

)、檔案物件(

file

),這四個物件協同來唯一標識乙個檔案,並完成對檔案的操作。這四個資料結構都有相對應的操作函式集,結構體定義大致示如下:

struct super_block ;

超級塊結構體用於獲取已安裝的檔案系統的相關資訊,並通過呼叫對應檔案系統的函式集來完成一些操作,昨天我把系統所在的

ext4

分割槽的容量擴充套件了一些後再重啟後便發現系統進不去了,想從光碟進入

livecd

後掛載這個分割槽拷貝一些重要的檔案時卻發現系統提示此分割槽的超級已損壞,看來對於

linux

分割槽最好不要隨便的調節分割槽容量,以妨超級塊損壞。

struct inode

索引節點用於提供核心對檔案操作的所有資訊,包括檔案大小,訪問時間,訪問許可權等等,這些資訊是真實的存放在磁碟中的,這裡涉及的檔案泛指全部的檔案型別,包括目錄檔案、裝置檔案或管道檔案等,如用

i_devices

、 i_bdev

、i_cdev

等等項來表示相關的裝置檔案。

struct dentry ;

這個結構體的主要功能便是抽象出檔案的邏輯關係,結構體本身並非實際的存放在磁碟上,當對檔案進行操作時才會應運而生。

vfs 中目錄看作檔案,這個結構體中形成了兩個主要的鏈,包括當前目錄的兄弟鏈和兒子鏈,並且有指向你目錄的指標,還有乙個目錄項樹的根,也就是檔案所在的檔案系統,這樣基本上就能定位任意乙個檔案了。

struct file ;

file

結構體主要的功能是為了標識檔案的開啟位置,這對共享檔案的讀寫至關重要,這個結構體也與

dentry

結構體相似,並非實際的存放在磁碟上,只有在檔案開啟時才會產生這個結構體來描述檔案的開啟位置,第乙個成員便是關鍵所有開啟的檔案。與其相關有

file_operations

結構體來描述對檔案物件的操作,裡面定義的全是函式指標成員,可以根據需要來為其賦於相關的函式,基本上用不到的則可以賦

null

。核心為每個程序提供了另外乙個結構體(使用者開啟表),它是程序的私有資料,主要功能是來記錄每個程序開啟的檔案,這裡採用的並非常用的鍊錶方法,而是用了指標陣列的方法來存放某個程序所有開啟檔案的指標。

與檔案系統相關的結構體還有

fs_struct

,它主要是用來關聯程序所要訪問的檔案,這些檔案可能不在同乙個檔案系統中,涉及的主要成員有

struct dentry * root, * pwd, * altroot;struct vfsmount * rootmnt, * pwdmnt, * altrootmnt; 分別用來標識檔案的根目錄項、當前目錄項、替換目錄項;已安裝的根檔案系統、當前檔案系統、替換檔案系統。

以上就是與檔案系統相關的主要結構體的描述。

linux虛擬檔案系統

虛擬檔案系統 virtual filesystem 也可以稱為虛擬檔案系統轉換 virtual filesystem switch vfs 是乙個核心軟體層,用來處理與unix標準檔案系統相關的所有系統呼叫。其健壯性表現在能為各種檔案系統提供乙個通用介面。cp floppy test tmp tes...

Linux虛擬檔案系統

檔案系統是一套實現了資料的儲存 分級組織 訪問和獲取等操作的抽象資料型別 檔案系統是一種用於向使用者提供底層資料訪問的機制。它將裝置中的空間劃分為特定大小的塊,一般每塊512位元組。資料儲存在這些塊中,大小被修正為占用整數個塊。由檔案系統軟體來負責將這些塊組織為檔案和目錄,並記錄哪些塊被分配給了哪個...

虛擬檔案系統

虛擬檔案系統 virtual file system,簡稱 vfs 是 linux 核心中的乙個軟體層,用於給使用者空間的程式提供檔案系統介面 同時,它也提供了核心中的乙個 抽象功能,允許不同的檔案系統共存。系統中所有的檔案系統不但依賴 vfs 共存,而且也依靠 vfs 協同工作。為了能夠支援各種實...