fstab詳解

 可能玩Linux的朋友都知道fstab這個文件,如果要用好linux,熟悉linux的一些核心配置文件是必要的,而fstab則是其中之一。這個文 件描述系統中各種文件系統的信息,應用程序讀取這個文件,然後根據其內容進行自動掛載的工作。因此,我們需要理解其中的內容,瞭解它如何與 mount命令配合工作,並能夠針對自己的情況進行修改。

作爲系統配置文件,fstab通常都位於/etc目錄下,它包括了所有分區和存儲設備的信息,以及它們應該掛載到哪裏,以什麼樣子的方式掛載。如 果遇到一些類似於無法掛載你的windows分區阿,無法使用你的光驅阿,無法對某個分區進行寫入操作阿什麼的,那麼基本上可以斷定,你的fstab內容 有問題了。也就是說,你可以通過修改它來搞定這些問題,而不用去論壇冰天雪地裸體跪求答案了。

說了半天,/etc/fstab其實就是一個文本文件,用gedit或者vi都可以打開,當然,前提是root權限。在這個文件中,每個文件系統 (包括分區或者設備)用一行來描述,在每一行中,用空格或TAB符號來分隔各個字段,文件中以*開頭的行是註釋信息。Fstab文件中的紀錄的排序十分重 要。因爲 fsck,mount或umount等程序在做它們的工作時會按此順序進行本。下面進行詳細的講解,本文假設讀者已經有掛載文件系統和分區的基礎知識。

在講解之前要說一下,每個人所使用的系統情況都是不同的,包括硬件種類,所用系統等,因此fstab文件肯定是有所差異的。但是其基本結構,如上所述,都不會變。所以我們先以一個fstab內容作爲模板進行講解。

首先請看下面這個例子:
/dev/hda2 / ext2 defaults 1 1
/dev/hdb1 /home ext2 defaults 1 2
/dev/cdrom /media/cdrom auto ro,noauto,user,exec 0 0
/dev/fd0 /media/floppy auto rw,noauto,user,sync 0 0
proc /proc proc defaults 0 0
/dev/hda1 swap swap pri=42 0 0

這些看起來毫無意義的字符代表了什麼?在對應相應分區或者存儲設備信息的每一行中,每一列又是什麼意思?先大體講一下,第一列表示設備的名稱,第 二列表示該設備的掛載點,第三列是文件系統,第四列是掛載選項,第五列是dump選項(用一個數字表示),第六列(接下來的數字)表示文件系統檢查選項。 好了,接下來,就要詳細介紹這些參數的具體含義了。

第一、二列:設備和默認掛載點


說實話,第一列和第二列的內容是最簡單最直接的,它們的作用就是告訴mount命令,我想掛載什麼分區或者什麼設備,以及我所希望的掛載點在哪 裏。在fstab中爲某一個設備指定的掛載點是其默認掛載點,也就是當你在掛載目錄的時候沒有手工指定其他目錄的話,系統就將該設備掛載到這個目錄。大多 數 Linux發行版都會爲掛載點創建專門的目錄,大多數是在/mnt下,但是一些發行版(比如SUSE或者ubuntu)是在/media下。筆者使用的是 ubuntu,所以示例信息中也是用的/media目錄。

按照我們給出的fstab示例,如果你敲入命令

$ mount /dev/fd0

你的軟驅就將掛載到/media/floppy,因爲這是你告訴系統的軟驅默認掛載點。如果沒有這個信息,當你敲入mount命令時,mount 會感到很困惑:該死的,你想讓我把這玩意掛載到哪裏去呢?當然,如果你看fstab中發行版給你指定的默認掛載點不順眼,也可以自由修改它,修改成任何一 個你希望的目錄都可以。如果還不存在,就首先創建這個目錄。要知道,fstab是不會把所有工作都給你包乾的哦。

另外,有一些分區和存儲設備是在Linux系統啓動的時候就自動掛載的,比如,讓我們看看剛纔列出來的fstab示例信息,有兩行是這樣的:
/dev/hda2 / ext2 defaults 1 1
/dev/hdb1 /home ext2 defaults 1 2

正如剛纔我們講到的那樣,這兩行表示/dev/hda2默認掛載到/根目錄,而 /dev/hdb1則默認掛載到/home目錄,。這些工作在你Linux系統啓動的時候就會通過讀取fstab自動完成,否則的話……想象你會遭受什麼 樣的折磨吧,所有的程序都在/根目錄下,而你卻無法使用,因爲你沒有掛載/根目錄!恩,我保證,這將是一次讓人沮喪的系統使用經歷。

除了顯示的使用設備名,你可以使用設備的UUID或設備的卷標籤,例如,你可以在這個字段寫成“LABAL=root”或“UUID= 3e6be9de- 8139-11d1-9106-a43f08d823a6”,這將使系統更具伸縮性。例如,如果你的系統添加或移除了一個SCSI硬盤,這有可以改變你的 設備名,但它不會修改你的卷標籤。

對於NFS mount操作,這個字段應該包含host:dir格式的信息,例如:knuth.aeb.nl:/,對於進程文件系統procfs,使用proc。

第三列:文件系統類型

fstab中的第三列指示了設備或者分區的文件系統類型。它支持很多種類的文件系統,我們在這裏只介紹最爲常用的。如果想了解你的kernel目 前支持哪些文件系統,可以查看/proc/filesystems的內容。如果這個字段定義爲swap,這條紀錄將關聯到一個用於交換目的的文件或分區。 如果這個字段定義爲ignored,這行將被忽略。這對於顯示目前沒有使用的分區非常有用。

ext2 和 ext3: Linux下的Ext2文件系統,是 GNU/Linux 系統中標準的文件系統,其特點爲存取文件的性能極好,對於中小型的文件更顯示出優勢,這主要得利於其簇快取層的優良設計。至於Ext3文件系統,它屬於一 種日誌文件系統,是對ext2系統的擴展。日誌式文件系統的優越性在於,它會將整個磁盤的寫入動作完整記錄在磁盤的某個區域上,以便有需要時可以回朔追 蹤。由於詳細紀錄了每個細節,故當在某個過程中被中斷時,系統可以根據這些記錄直接回朔並重整被中斷的部分,而不必花時間去檢查其他的部分,故文件系統檢 測不一致時,重整的工作速度相當快,幾乎不需要花時間。

reiserfs: ReiserFS是一個非常優秀的文件系統。也是最早用於Linux的日誌文件系統之一,其機制比Ext3要先進得多,風雷小弟一直使用的就是它,很多發 行版現在也把它作爲默認文件系統了。可惜其作者前段時間出事了……具體情況就不說了,也不知道下一代reiserfs4還能不能出來,因爲ext4都有 了。

swap: Swap,即交換區,把它想象成虛擬內存就行了。

vfat 和 ntfs:一看就知道是Windows分區格式了,呵呵。98,me等系統都是使用的vfat,也就是最流行的fat32格式,而NT系列則多使用 NTFS,當然也不是固定的,因此2000或者XP系統要具體情況具體分析。當初Linux對NTFS的寫入支持不好,所以大多數資料都建議用戶使用 vfat格式,但是現在支持已經很好了,即使不重新編譯內核,也可以通過ntfs-3g來進行寫入支持(具體方法請參考這篇文章),因此不用太在意這個 了。

auto:當然,這不是一個文件系統類型。auto只是表示,文件系統的類型將被自動檢測。在上面的示例中,你會發現軟驅和光驅的文件系統類型都 是auto,爲什麼呢?因爲它們的文件系統類型隨時都可能改變,比如軟驅,優盤這種設備,可能今天是vfat格式,明天你就把它格式化成了ntfs,因 此,最明智的做法就是告訴系統,我沒法確定這東西的當前類型,還是你自己檢測吧。

udf: 由於刻錄光驅越來越流行,現在很多發行版自帶的fstab中,光驅的文件格式類型是UDF,UDF是Universal Disc Format的縮寫,與ISO 9660格式相容。它採用標準的封裝寫入技術(PW,Packet Writing)將CD-R/CD-RW當作硬盤使用,用戶可以在光盤上修改和刪除文件。利用UDF格式進行刻錄時,刻錄軟件將數據打包,並在內存中臨時 建立一個特殊文件目錄表,同時接管系統對光盤的訪問。

iso9660: 很多光驅也使用的這個選項。ISO9660是一種描述適合CD盤片的電腦文件結構的國際標準。採用此標準的盤片可以在不同的操作系統上使用,如MAC和Windows。

第四列:掛載選項

fstab中的第四列表示設備或者分區所需要的掛載選項。這一列也是fstab中最複雜最容易出錯的一列,當然,只要你能知道一些最常用的選項是 什麼意思,就可以讓你從頭疼中解脫出來。如果要把可用的選項一項一項介紹……恩,我估計我會寫到明天,所以,我還是隻是分析最常用的一些選項,如果你想知 道更多的東西,還是求助於man吧。

auto 和 noauto: 這是控制設備是否自動掛載的選項。auto是默認選擇的選項,這樣,設備會在啓動或者你使用mount -a命令時按照fstab的內容自動掛載。如果你不希望這樣,就使用noauto選項,如果這樣的話,你就只能明確地通過手工來掛載設備。

user 和 nouser:這是一個非常有用的選項,user選項允許普通用戶也能掛載設備,而nouser則只允許root用戶掛載。nouser是默認選項,這也 是讓很多 Linux新手頭疼的東西,因爲他們發現沒有辦法正常掛載光驅,Windows分區等。如果你作爲普通身份用戶遇到類似問題,或者別的其他問題,就請把 user屬性增加到fstab中。

exec 和 noexec: exec允許你執行對應分區中的可執行二進制程序,同理,noexec的作用剛好相反。如果你擁有一個分區,分區上有一些可執行程序,而恰好你又不願意, 或者不能在你的系統中執行他們,就可以使用noexec屬性。這種情況多發生於掛載Windows分區時。exec是默認選項,理由很簡單,如果 noexec變成了你/根分區的默認選項的話……

ro: 以只讀來掛載文件系統。

rw: 以可讀可寫的屬性來掛載系統。

sync 和 async:對於該文件系統的輸入輸出應該以什麼方式完成。sync的意思就是同步完成,通俗點講,就是當你拷貝一個東西到設備或者分區中時,所有的寫入 變化將在你輸入cp命令後立即生效,這個東西應該立馬就開始往設備或者分區裏面拷貝了。而如果是async,也就是輸入輸出異步完成的話,當你拷貝一個東 西到設備或者分區中時,可能在你敲擊cp命令後很久,實際的寫入操作纔會執行,換句話說,就是進行了緩衝處理。

有時候這種機制蠻不錯的,因爲sync會影響你係統的運行速度,但是這也會帶來一些問題。想一想,當你希望將一個文件拷貝到u盤上時,你執行了 cp 命令,卻忘記執行umount命令(它會強行將緩衝區內容寫入),那麼你拷貝的文件實際上並沒有在u盤上面。如果你是使用的mv命令,而你又很快將u盤拔 出……恭喜你,文件會從這個星球上消失的。因此,雖然async是默認屬性,但是對於u盤,移動硬盤這種可移動存儲設備,最好還是讓他們使用sync選 項。

defaults: 所有選項全部使用默認配置,包括rw, suid, dev, exec, auto, nouser, 和 async。

一般用戶沒有特殊需求,直接使用defaults就可以了。看完介紹,我們再回過頭去看看前面的示例內容,以光驅爲例,主要關注掛載選項這裏,可以看到,光驅和其他分區設備的不同是ro,因爲普通光驅是隻讀的。而exec則讓你可以從光驅上直接執行某些程序。

第五、六列:dump和fsck選項

Dump和fsck?這是什麼東西?恩,dump是一個備份工具,而fsck是一個文件系統掃描檢查工具。我不會在這裏詳細介紹它們,因爲用man或者google都可以獲得更加詳細的信息。

fstab的第五列是表示dump選項,dump工具通過這個選項位置上的數字來決定文件系統是否需要備份。如果是0,dump就會被忽略,事實 上,大多數的dump設置都是0。而第六列是fsck選項,fsck命令通過檢測該字段來決定文件系統通過什麼順序來掃描檢查,根文件系統/對應該字段的 值應該爲1,其他文件系統應該爲2。若文件系統無需在啓動時掃描檢查,則設置該字段爲0。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章