|
’
如果要用好linux,熟悉linux的一些核心配置文件是必要的,而fstab則是其中之一。這個(gè)文件描述系統(tǒng)中各種文件系統(tǒng)的信息,應(yīng)用程序讀取這個(gè)文件,然后根據(jù)其內(nèi)容進(jìn)行自動(dòng)掛載的工作。因此,我們需要理解其中的內(nèi)容,了解它如何與mount命令配合工作,并能夠針對(duì)自己的情況進(jìn)行修改。
作為系統(tǒng)配置文件,fstab通常都位于/etc目錄下,它包括了所有分區(qū)和存儲(chǔ)設(shè)備的信息,以及它們應(yīng)該掛載到哪里,以什么樣子的方式掛載。如果遇到一些類(lèi)似于無(wú)法掛載你的windows分區(qū)阿,無(wú)法使用你的光驅(qū)阿,無(wú)法對(duì)某個(gè)分區(qū)進(jìn)行寫(xiě)入操作阿什么的,那么基本上可以斷定,你的fstab內(nèi)容有問(wèn)題了。也就是說(shuō),你可以通過(guò)修改它來(lái)搞定這些問(wèn)題,而不用去論壇冰天雪地裸體跪求答案了。
說(shuō)了半天,/etc/fstab其實(shí)就是一個(gè)文本文件,用gedit或者vi都可以打開(kāi),當(dāng)然,前提是root權(quán)限。在這個(gè)文件中,每個(gè)文件系統(tǒng)(包括分區(qū)或者設(shè)備)用一行來(lái)描述,在每一行中,用空格或TAB符號(hào)來(lái)分隔各個(gè)字段,文件中以*開(kāi)頭的行是注釋信息。Fstab文件中的紀(jì)錄的排序十分重要。因?yàn)閒sck,mount或umount等程序在做它們的工作時(shí)會(huì)按此順序進(jìn)行本。下面進(jìn)行詳細(xì)的講解,本文假設(shè)讀者已經(jīng)有掛載文件系統(tǒng)和分區(qū)的基礎(chǔ)知識(shí)。
首先請(qǐng)看下面這個(gè)例子:
/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
這些看起來(lái)毫無(wú)意義的字符代表了什么?在對(duì)應(yīng)相應(yīng)分區(qū)或者存儲(chǔ)設(shè)備信息的每一行中,每一列又是什么意思?先大體講一下,第一列表示設(shè)備的名稱,第二列表示該設(shè)備的掛載點(diǎn),第三列是文件系統(tǒng),第四列是掛載選項(xiàng),第五列是dump選項(xiàng)(用一個(gè)數(shù)字表示),第六列(接下來(lái)的數(shù)字)表示文件系統(tǒng)檢查選項(xiàng)。好了,接下來(lái),就要詳細(xì)介紹這些參數(shù)的具體含義了。
第一、二列:設(shè)備和默認(rèn)掛載點(diǎn)
說(shuō)實(shí)話,第一列和第二列的內(nèi)容是最簡(jiǎn)單最直接的,它們的作用就是告訴mount命令,我想掛載什么分區(qū)或者什么設(shè)備,以及我所希望的掛載點(diǎn)在哪里。在fstab中為某一個(gè)設(shè)備指定的掛載點(diǎn)是其默認(rèn)掛載點(diǎn),也就是當(dāng)你在掛載目錄的時(shí)候沒(méi)有手工指定其他目錄的話,系統(tǒng)就將該設(shè)備掛載到這個(gè)目錄。大多數(shù)Linux發(fā)行版都會(huì)為掛載點(diǎn)創(chuàng)建專門(mén)的目錄,大多數(shù)是在/mnt下,但是一些發(fā)行版(比如SUSE或者ubuntu)是在/media下。筆者使用的是ubuntu,所以示例信息中也是用的/media目錄。
按照我們給出的fstab示例,如果你敲入命令
$ mount /dev/fd0
你的軟驅(qū)就將掛載到/media/floppy,因?yàn)檫@是你告訴系統(tǒng)的軟驅(qū)默認(rèn)掛載點(diǎn)。如果沒(méi)有這個(gè)信息,當(dāng)你敲入mount命令時(shí),mount會(huì)感到很困惑:該死的,你想讓我把這玩意掛載到哪里去呢?當(dāng)然,如果你看fstab中發(fā)行版給你指定的默認(rèn)掛載點(diǎn)不順眼,也可以自由修改它,修改成任何一個(gè)你希望的目錄都可以。如果還不存在,就首先創(chuàng)建這個(gè)目錄。要知道,fstab是不會(huì)把所有工作都給你包干的哦。
另外,有一些分區(qū)和存儲(chǔ)設(shè)備是在Linux系統(tǒng)啟動(dòng)的時(shí)候就自動(dòng)掛載的,比如,讓我們看看剛才列出來(lái)的fstab示例信息,有兩行是這樣的:
/dev/hda2 / ext2 defaults 1 1
/dev/hdb1 /home ext2 defaults 1 2
正如剛才我們講到的那樣,這兩行表示/dev/hda2默認(rèn)掛載到/根目錄,而/dev/hdb1則默認(rèn)掛載到/home目錄,。這些工作在你Linux系統(tǒng)啟動(dòng)的時(shí)候就會(huì)通過(guò)讀取fstab自動(dòng)完成,否則的話……想象你會(huì)遭受什么樣的折磨吧,所有的程序都在/根目錄下,而你卻無(wú)法使用,因?yàn)槟銢](méi)有掛載/根目錄!恩,我保證,這將是一次讓人沮喪的系統(tǒng)使用經(jīng)歷。
除了顯示的使用設(shè)備名,你可以使用設(shè)備的UUID或設(shè)備的卷標(biāo)簽,例如,你可以在這個(gè)字段寫(xiě)成“LABAL=root”或“UUID=3e6be9de-8139-11d1-9106-a43f08d823a6”,這將使系統(tǒng)更具伸縮性。例如,如果你的系統(tǒng)添加或移除了一個(gè)SCSI硬盤(pán),這有可以改變你的設(shè)備名,但它不會(huì)修改你的卷標(biāo)簽。
對(duì)于NFSmount操作,這個(gè)字段應(yīng)該包含host:dir格式的信息,例如:knuth.aeb.nl:/,對(duì)于進(jìn)程文件系統(tǒng)procfs,使用proc.
第三列:文件系統(tǒng)類(lèi)型
fstab中的第三列指示了設(shè)備或者分區(qū)的文件系統(tǒng)類(lèi)型。它支持很多種類(lèi)的文件系統(tǒng),我們?cè)谶@里只介紹最為常用的。如果想了解你的kernel目前支持哪些文件系統(tǒng),可以查看/proc/filesystems的內(nèi)容。如果這個(gè)字段定義為swap,這條紀(jì)錄將關(guān)聯(lián)到一個(gè)用于交換目的的文件或分區(qū)。如果這個(gè)字段定義為ignored,這行將被忽略。這對(duì)于顯示目前沒(méi)有使用的分區(qū)非常有用。
ext2 和 ext3: Linux下的Ext2文件系統(tǒng),是 GNU/Linux系統(tǒng)中標(biāo)準(zhǔn)的文件系統(tǒng),其特點(diǎn)為存取文件的性能極好,對(duì)于中小型的文件更顯示出優(yōu)勢(shì),這主要得利于其簇快取層的優(yōu)良設(shè)計(jì)。至于Ext3文件系統(tǒng),它屬于一種日志文件系統(tǒng),是對(duì)ext2系統(tǒng)的擴(kuò)展。日志式文件系統(tǒng)的優(yōu)越性在于,它會(huì)將整個(gè)磁盤(pán)的寫(xiě)入動(dòng)作完整記錄在磁盤(pán)的某個(gè)區(qū)域上,以便有需要時(shí)可以回朔追蹤。由于詳細(xì)紀(jì)錄了每個(gè)細(xì)節(jié),故當(dāng)在某個(gè)過(guò)程中被中斷時(shí),系統(tǒng)可以根據(jù)這些記錄直接回朔并重整被中斷的部分,而不必花時(shí)間去檢查其他的部分,故文件系統(tǒng)檢測(cè)不一致時(shí),重整的工作速度相當(dāng)快,幾乎不需要花時(shí)間。
reiserfs:ReiserFS是一個(gè)非常優(yōu)秀的文件系統(tǒng)。也是最早用于Linux的日志文件系統(tǒng)之一,其機(jī)制比Ext3要先進(jìn)得多,風(fēng)雷小弟一直使用的就是它,很多發(fā)行版現(xiàn)在也把它作為默認(rèn)文件系統(tǒng)了??上渥髡咔岸螘r(shí)間出事了……具體情況就不說(shuō)了,也不知道下一代reiserfs4還能不能出來(lái),因?yàn)閑xt4都有了。
swap: Swap,即交換區(qū),把它想象成虛擬內(nèi)存就行了。
vfat 和ntfs:一看就知道是Windows分區(qū)格式了,呵呵。98,me等系統(tǒng)都是使用的vfat,也就是最流行的fat32格式,而NT系列則多使用NTFS,當(dāng)然也不是固定的,因此2000或者XP系統(tǒng)要具體情況具體分析。當(dāng)初Linux對(duì)NTFS的寫(xiě)入支持不好,所以大多數(shù)資料都建議用戶使用vfat格式,但是現(xiàn)在支持已經(jīng)很好了,即使不重新編譯內(nèi)核,也可以通過(guò)ntfs-3g來(lái)進(jìn)行寫(xiě)入支持(具體方法請(qǐng)參考這篇文章),因此不用太在意這個(gè)了。
auto:當(dāng)然,這不是一個(gè)文件系統(tǒng)類(lèi)型。auto只是表示,文件系統(tǒng)的類(lèi)型將被自動(dòng)檢測(cè)。在上面的示例中,你會(huì)發(fā)現(xiàn)軟驅(qū)和光驅(qū)的文件系統(tǒng)類(lèi)型都是auto,為什么呢?因?yàn)樗鼈兊奈募到y(tǒng)類(lèi)型隨時(shí)都可能改變,比如軟驅(qū),優(yōu)盤(pán)這種設(shè)備,可能今天是vfat格式,明天你就把它格式化成了ntfs,因此,最明智的做法就是告訴系統(tǒng),我沒(méi)法確定這東西的當(dāng)前類(lèi)型,還是你自己檢測(cè)吧。
udf: 由于刻錄光驅(qū)越來(lái)越流行,現(xiàn)在很多發(fā)行版自帶的fstab中,光驅(qū)的文件格式類(lèi)型是UDF,UDF是UniversalDisc Format的縮寫(xiě),與ISO 9660格式相容。它采用標(biāo)準(zhǔn)的封裝寫(xiě)入技術(shù)(PW,PacketWriting)將CD-R/CD-RW當(dāng)作硬盤(pán)使用,用戶可以在光盤(pán)上修改和刪除文件。利用UDF格式進(jìn)行刻錄時(shí),刻錄軟件將數(shù)據(jù)打包,并在內(nèi)存中臨時(shí)建立一個(gè)特殊文件目錄表,同時(shí)接管系統(tǒng)對(duì)光盤(pán)的訪問(wèn)。
iso9660:很多光驅(qū)也使用的這個(gè)選項(xiàng)。ISO9660是一種描述適合CD盤(pán)片的電腦文件結(jié)構(gòu)的國(guó)際標(biāo)準(zhǔn)。采用此標(biāo)準(zhǔn)的盤(pán)片可以在不同的操作系統(tǒng)上使用,如MAC和Windows.
第四列:掛載選項(xiàng)
fstab中的第四列表示設(shè)備或者分區(qū)所需要的掛載選項(xiàng)。這一列也是fstab中最復(fù)雜最容易出錯(cuò)的一列,當(dāng)然,只要你能知道一些最常用的選項(xiàng)是什么意思,就可以讓你從頭疼中解脫出來(lái)。如果要把可用的選項(xiàng)一項(xiàng)一項(xiàng)介紹……恩,我估計(jì)我會(huì)寫(xiě)到明天,所以,我還是只是分析最常用的一些選項(xiàng),如果你想知道更多的東西,還是求助于man吧。
auto 和 noauto:這是控制設(shè)備是否自動(dòng)掛載的選項(xiàng)。auto是默認(rèn)選擇的選項(xiàng),這樣,設(shè)備會(huì)在啟動(dòng)或者你使用mount-a命令時(shí)按照f(shuō)stab的內(nèi)容自動(dòng)掛載。如果你不希望這樣,就使用noauto選項(xiàng),如果這樣的話,你就只能明確地通過(guò)手工來(lái)掛載設(shè)備。
user 和nouser:這是一個(gè)非常有用的選項(xiàng),user選項(xiàng)允許普通用戶也能掛載設(shè)備,而nouser則只允許root用戶掛載。nouser是默認(rèn)選項(xiàng),這也是讓很多Linux新手頭疼的東西,因?yàn)樗麄儼l(fā)現(xiàn)沒(méi)有辦法正常掛載光驅(qū),Windows分區(qū)等。如果你作為普通身份用戶遇到類(lèi)似問(wèn)題,或者別的其他問(wèn)題,就請(qǐng)把user屬性增加到fstab中。
exec 和 noexec:exec允許你執(zhí)行對(duì)應(yīng)分區(qū)中的可執(zhí)行二進(jìn)制程序,同理,noexec的作用剛好相反。如果你擁有一個(gè)分區(qū),分區(qū)上有一些可執(zhí)行程序,而恰好你又不愿意,或者不能在你的系統(tǒng)中執(zhí)行他們,就可以使用noexec屬性。這種情況多發(fā)生于掛載Windows分區(qū)時(shí)。exec是默認(rèn)選項(xiàng),理由很簡(jiǎn)單,如果noexec變成了你/根分區(qū)的默認(rèn)選項(xiàng)的話……
ro: 以只讀來(lái)掛載文件系統(tǒng)。
rw: 以可讀可寫(xiě)的屬性來(lái)掛載系統(tǒng)。
sync 和async:對(duì)于該文件系統(tǒng)的輸入輸出應(yīng)該以什么方式完成。sync的意思就是同步完成,通俗點(diǎn)講,就是當(dāng)你拷貝一個(gè)東西到設(shè)備或者分區(qū)中時(shí),所有的寫(xiě)入變化將在你輸入cp命令后立即生效,這個(gè)東西應(yīng)該立馬就開(kāi)始往設(shè)備或者分區(qū)里面拷貝了。而如果是async,也就是輸入輸出異步完成的話,當(dāng)你拷貝一個(gè)東西到設(shè)備或者分區(qū)中時(shí),可能在你敲擊cp命令后很久,實(shí)際的寫(xiě)入操作才會(huì)執(zhí)行,換句話說(shuō),就是進(jìn)行了緩沖處理。
有時(shí)候這種機(jī)制蠻不錯(cuò)的,因?yàn)閟ync會(huì)影響你系統(tǒng)的運(yùn)行速度,但是這也會(huì)帶來(lái)一些問(wèn)題。想一想,當(dāng)你希望將一個(gè)文件拷貝到u盤(pán)上時(shí),你執(zhí)行了cp命令,卻忘記執(zhí)行umount命令(它會(huì)強(qiáng)行將緩沖區(qū)內(nèi)容寫(xiě)入),那么你拷貝的文件實(shí)際上并沒(méi)有在u盤(pán)上面。如果你是使用的mv命令,而你又很快將u盤(pán)拔出……恭喜你,文件會(huì)從這個(gè)星球上消失的。因此,雖然async是默認(rèn)屬性,但是對(duì)于u盤(pán),移動(dòng)硬盤(pán)這種可移動(dòng)存儲(chǔ)設(shè)備,最好還是讓他們使用sync選項(xiàng)。
defaults: 所有選項(xiàng)全部使用默認(rèn)配置,包括rw, suid, dev, exec, auto, nouser, 和async.
一般用戶沒(méi)有特殊需求,直接使用defaults就可以了??赐杲榻B,我們?cè)倩剡^(guò)頭去看看前面的示例內(nèi)容,以光驅(qū)為例,主要關(guān)注掛載選項(xiàng)這里,可以看到,光驅(qū)和其他分區(qū)設(shè)備的不同是ro,因?yàn)槠胀ü怛?qū)是只讀的。而exec則讓你可以從光驅(qū)上直接執(zhí)行某些程序。
第五、六列:dump和fsck選項(xiàng)
Dump和fsck?這是什么東西?恩,dump是一個(gè)備份工具,而fsck是一個(gè)文件系統(tǒng)掃描檢查工具。我不會(huì)在這里詳細(xì)介紹它們,因?yàn)橛胢an或者google都可以獲得更加詳細(xì)的信息。
fstab的第五列是表示dump選項(xiàng),dump工具通過(guò)這個(gè)選項(xiàng)位置上的數(shù)字來(lái)決定文件系統(tǒng)是否需要備份。如果是0,dump就會(huì)被忽略,事實(shí)上,大多數(shù)的dump設(shè)置都是0.而第六列是fsck選項(xiàng),fsck命令通過(guò)檢測(cè)該字段來(lái)決定文件系統(tǒng)通過(guò)什么順序來(lái)掃描檢查,根文件系統(tǒng)/對(duì)應(yīng)該字段的值應(yīng)該為1,其他文件系統(tǒng)應(yīng)該為2.若文件系統(tǒng)無(wú)需在啟動(dòng)時(shí)掃描檢查,則設(shè)置該字段為0.
聯(lián)系客服