文件系統后續ing

先根據讀內核源碼一書的理解,做如下記錄:

1.內存緩沖區是用戶和硬盤文件進行交互的必經之地。當進行讀硬盤時,先依據dev、塊號等信息獲取緩沖塊(這是由bread-->getblk),然后調用ll_rw_block函數創造讀請求,然后調用hd_out函數讀取后放入緩沖區內,中斷返回。

2.超級塊(super_block)主要用于存放整個文件系統的信息,當創建新的硬盤邏輯塊時會調用new_block,該函數會先讀取超級塊(get_super(dev))的信息,看看是否滿足條件、設置位圖等等。

一:

什么是文件系統,詳見:http://zh.wikipedia.org/zh/%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F

其實一句話就是管理這塊文件的機制(組織方式,數據結構之類...)

Linux系統中存在很多的文件系統,例如常見的ext2,ext3,ext4,sysfs,rootfs,proc...很多很多。。。我們知道每個文件系統是獨立的,有自己的組織方法,操作方法。那么對于用戶來說,不可能所有的文件系統都了解,那么怎么做到讓用戶透明的去處理文件呢?例如:我想寫文件,那就直接read就OK,不管你是什么文件系統,具體怎么去讀!OK,這里就需要引入虛擬文件系統。

所以虛擬文件系統就是:對于一個system,可以存在多個“實際的文件系統”,例如:ext2,ext3,fat32,ntfs...例如我現在有多個分區,對于每一個分區我們知道可以是不同的“實際文件系統”,例如現在三個磁盤分區分別是:ext2,ext3,fat32,那么每個“實際的文件系統”的操作和數據結構什么肯定不一樣,那么,用戶怎么能透明使用它們呢?那么這個時候就需要VFS作為中間一層!用戶直接和VFS打交道。例如read,write,那么映射到VFS中就是sys_read,sys_write,那么VFS可以根據你操作的是哪個“實際文件系統”(哪個分區)來進行不同的實際的操作!那么這個技術也是很熟悉的“鉤子結構”(此名稱不知道是否合理,自己一直這樣叫了)技術來處理的。其實就是VFS中提供一個抽象的struct結構體,然后對于每一個具體的文件系統要把自己的字段和函數填充進去,這樣就解決了異構問題。

如圖:

二:

Linux虛擬文件系統四大對象:

1)超級塊(super?block)

2)索引節點(inode)

3)目錄項(dentry)

4)文件對象(file)

=> 超級塊:一個超級塊對應一個文件系統(已經安裝的文件系統類型如ext2,此處是實際的文件系統哦,不是VFS)。之前我們已經說了文件系統用于管理這些文件的數據格式和操作之類的,系統文件有系統文件自己的文件系統,同時對于不同的磁盤分區也有可以是不同的文件系統。那么一個超級塊對于一個獨立的文件系統。保存文件系統的類型、大小、狀態等等。

(“文件系統”和“文件系統類型”不一樣!一個文件系統類型下可以包括很多文件系統即很多的super_block)

既然我們知道對于不同的文件系統有不同的super_block,那么對于不同的super_block的操作肯定也是不同的,所以我們在下面的super_block結構中可以看到上面說的抽象的struct結構(例如下面的:struct super_operations):

http://blog.csdn.net/sdulibh/article/details/50574595


1.Linux磁盤分區和目錄

Linux發行版本之間的差別很少,差別主要表現在系統管理的特色工具以及軟件包管理方式的不同。目錄結構基本上都是一樣的。Windows的文件結構是多個并列的樹狀結構,最頂部的是不同的磁盤(分區),如:C,D,E,F等。

Linux的文件結構是單個的樹狀結構.可以用tree進行展示。在Ubuntu下安裝tree(sudo apt-get install tree),并可通過命令來查看。

每次安裝系統的時候我們都會進行分區,Linux下磁盤分區和目錄的關系如下:

–任何一個分區都必須掛載到某個目錄上。

–目錄是邏輯上的區分。分區是物理上的區分。

–磁盤Linux分區都必須掛載到目錄樹中的某個具體的目錄上才能進行讀寫操作。

–根目錄是所有Linux的文件和目錄所在的地方,需要掛載上一個磁盤分區。

以下是我們可能存在的一種目錄和分區關系:

圖1:目錄和分區關系

Q:如何查看分區和目錄及使用情況?

–fdisk查看硬盤分區表

–df:查看分區使用情況

–du:查看文件占用空間情況

Q:為什么要分區,如何分區?

–可以把不同資料,分別放入不同分區中管理,降低風險。

–大硬盤搜索范圍大,效率低

–磁盤配合只能對分區做設定

–/home /var /usr/local經常是單獨分區,因為經常會操作,容易產生碎片

2.Mount掛載和NFS簡介

掛載的概念:當要使用某個設備時,例如要讀取硬盤中的一個格式化好的分區、光盤或軟件等設備時,必須先把這些設備對應到某個目錄上,而這個目錄就稱為“掛載點(mount point)”,這樣才可以讀取這些設備,而這些對應的動作就是“掛載”。將物理分區細節屏蔽掉。用戶只有統一的邏輯概念。所有的東西都是文件。Mount命令可以實現掛載:

mount [-fnrsvw] [-t vfstype] [-o options] device dir

Q:所有的磁盤分區都必須被掛載上才能使用,那么我們機器上的硬盤分區是如何被掛載的?

A:這主要是它利用了/etc/fstab文件。每次內核加載它知道從這里開始mount文件系統。每次系統啟動會根據該文件定義自動掛載。若沒有被自動掛載,分區將不能使用。如下是我的/etc/fstab的定義,主要是根據裝機的分區來的:

#

proc/procprocdefaults00

#/dev/sda1被自動掛載到/

UUID=cb1934d0-4b72-4bbf-9fad-885d2a8eeeb1 /ext3relatime,errors=remount-ro 01

# /dev/sda5被自動掛載到分區/home

UUID=c40f813b-bb0e-463e-aa85-5092a17c9b94 /homeext3relatime02

#/dev/sda7被自動掛載到/work

UUID=0f918e7e-721a-41c6-af82-f92352a568af /workext3relatime02

#分區/dev/sda6被自動掛載到swap

UUID=2f8bdd05-6f8e-4a6b-b166-12bb52591a1f noneswapsw00

Q:移動硬盤如何掛載?如何掛載一個新的分區?

移動硬盤有驅動模塊會自動掛載,如果有個新硬盤,要先進行分區,并通過mount命令掛載到某個文件夾。如果要自動掛載則可以修改/etc/fstab文件.

NFS簡介:NFS相信在很多地方都有廣泛使用,是一個非常好的文件共享方式。我們公司所使用的上傳服務就是把文件上傳到某臺網絡服務器上,中間就是通過NFS實現。

使用NFS客戶端可以透明的地訪問服務器端的文件。NFS也是通過mount來實現,底層是通過NFS通信協議實現。基本原理:

圖2:NFS基本原理

Ubuntu下面Ubuntu下的例子

服務端:

$apt-get install nfs-kernel-server

vi /etc/exports添加nfs目錄: /personal/nfs_share

10.1.60.34(rw,sync,no_root_squash)

$sudo exportfs -r

$sudo /etc/init.d/portmap start

$sudo /etc/init.d/nfs-kernel-server start

客戶端:

$sudo apt-get install nfs-common

$sudo mount 10.19.34.76:/personal/nfs_share ~/nfsshare例子:

3.文件類型

Linux下面的文件類型主要有:

a)普通文件:C語言元代碼、SHELL腳本、二進制的可執行文件等。分為純文本和二進制。

b)目錄文件:目錄,存儲文件的唯一地方。

c)鏈接文件:指向同一個文件或目錄的的文件。

d)特殊文件:與系統外設相關的,通常在/dev下面。分為塊設備和字符設備。

可以通過ls –l, file, stat幾個命令來查看文件的類型等相關信息。

4.文件存儲結構

Linux正統的文件系統(如ext2、ext3)一個文件由目錄項、inode和數據塊組成。

目錄項:包括文件名和inode節點號。

Inode:又稱文件索引節點,是文件基本信息的存放地和數據塊指針存放地。

數據塊:文件的具體內容存放地。

Linux正統的文件系統(如ext2、3等)將硬盤分區時會劃分出目錄塊、inode Table區塊和data block數據區域。一個文件由一個目錄項、inode和數據區域塊組成。Inode包含文件的屬性(如讀寫屬性、owner等,以及指向數據塊的指針),數據區域塊則是文件內容。當查看某個文件時,會先從inode table中查出文件屬性及數據存放點,再從數據塊中讀取數據。

站在2w英尺視圖,文件存儲結構大概如下:

圖3:文件存儲結構2w英尺視圖

其中目錄項的結構如下(每個文件的目錄項存儲在改文件所屬目錄的文件內容里):

圖4:目錄項結構

其中文件的inode結構如下(inode里所包含的文件信息可以通過stat filename查看得到):

圖5:inode結構

以上只反映大體的結構,linux文件系統本身在不斷發展。但是以上概念基本是不變的。且如ext2、ext3、ext4文件系統也存在很大差別,如果要了解可以查看專門的文件系統介紹。

http://www.iteye.com/topic/816268


https://www.ibm.com/developerworks/cn/linux/l-linux-filesystem/

http://blog.csdn.net/younger_china/article/details/7068773

http://blog.csdn.net/hudan2714/article/details/14452981

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,316評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,481評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,241評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,939評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,697評論 6 409
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,182評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,247評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,406評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,933評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,772評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,973評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,516評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,638評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,866評論 1 285
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,644評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,953評論 2 373

推薦閱讀更多精彩內容