虛擬內核文件系統(VirtualKernel File Systems),是指那些是由內核產生但不存在於硬盤上(存在於內存中)的文件系統。例如
1、proc
proc文件系統為操作系統本身和應用程序之間的通信提供了一個安全的接口。通過它里面的一些文件,可以獲取系統狀態信息並修改某些系統的配置信息。當我們在內核中添加了新功能或設備驅動時,經常需要得到一些系統狀態的信息,一般這樣的功能需要經過一些像ioctl()這樣的系統調用來完成。
2、devfs
我們知道,/dev目錄下的每一個文件都對應的是一個設備,devfs也是掛載於/dev目錄下。在2.6內核以前使用devfs來提供一種類似於文件的方法來管理位於/dev目錄下的所有設備。但是devfs文件系統有一些缺點,有時一個設備映射的設備文件可能不同。例如,我的U盤可能對應sda,也可能對應sdb,沒有足夠的主/輔設備號,當設備過多的時候,顯然這會成為一個問題。
3、sysfs
為了克服devfs的上述問題,2.6內核引入了一個新的文件系統sysfs,它掛載於/sys目錄下。sysfs文件系統把連接在系統上的設備和總線組織成為一個分級的文件,用戶空間的程序同樣可以利用這些信息,以實現和內核的交互。sysfs文件系統是當前系統上實際設備樹的一個直觀反映,它是通過kobject子系統來建立這個信息的,當一個kobject被創建的時候,對應的文件和目錄也就被創建了。
4、tmpfs
tmpfs(temporary filesystem)是Linux特有的文件系統,標准掛載點是/dev/shm,默認大小是實際內存的一半,如下圖所示。當然,用戶也可以將tmpfs掛載在其他地方。tmpfs可以使用物理內存,也可以使用swap交換空間。
tmpfs有些像虛擬磁盤(ramdisk),但ramdisk是一個塊設備,而且需要一個mkfs之類的命令格式化后才能使用。而tmpfs是一個獨立的文件系統,不是塊設備,只要掛載,就可以立即使用。下面是tmpfs最主要的幾個特點:
Ø 臨時性:由於tmpfs是構建在內存中的,所以存放在tmpfs中的所有數據在卸載或斷電后都會丟失;
Ø 快速讀寫能力:內存的訪問速度要遠快於磁盤I/O操作,即使使用了swap,性能仍然非常卓越;
Ø 動態收縮:tmpfs一開始使用很小的空間,但隨着文件的復制和創建,tmpfs文件系統會分配更多的內存,並按照需求動態地增加文件系統的空間。而且,當tmpfs中的文件被刪除時,tmpfs文件系統會動態地減小文件並釋放內存資源。
tmpfs對於文件緩存和臨時數據來說,是一種較理想的做法。現在假設你想為大流量網站在/var/www/www.example.com/cache目錄下創建文件緩存。
首先,創建緩存目錄:
mkdir -p /var/www/www.example.cache
如有必要可以更改目錄的屬主,例如:
chownproxy:proxy /var/www/www.example.com/cache
現在我們把這個目錄加載到內存設備中(使用100MB大小,並且權限為755):
mount -ttmpfs -o size=100M,mode=0755 tmpfs /var/www/www.example.com/cache
如果想調整該緩存目錄使用的內存空間為200MB,可以使用下面的命令:
mount -o remount,size=200M /var/www/www.example.com/cache
如果還想在系統啟動時自動緩存這個目錄,編輯/etc/fstab並添加下面內容
tmpfs /var/www/www.example.com/cache tmpfssize=100M,mode=0755 0 0