- 論壇徽章:
- 0
|
在本教程中,我們將通過討論多個主題(包括 Linux 文件系統(tǒng)、Linux 引導(dǎo)過程、運行級別、文件系統(tǒng)限額和系統(tǒng)日志),來鞏固您在重要的 Linux 管理技能方面的知識。
一。關(guān)于教程
本教程涉及哪些內(nèi)容?
在本教程中,我們將通過討論多個主題(包括 Linux 文件系統(tǒng)、Linux 引導(dǎo)過程、運行級別、文件系統(tǒng)限額和系統(tǒng)日志),來鞏固您在重要的 Linux 管理技能方面的知識。
在本系列教程(共 8 部分)結(jié)束時,您將具備成為 Linux 系統(tǒng)管理員所必需的知識,并且如果您選擇參加 LPI 考試,您將準(zhǔn)備好取得 Linux Professional Institute 頒發(fā)的 LPIC Level 1 證書。
LPI 徽標(biāo)是 Linux Professional Institute 的商標(biāo)。
我應(yīng)該學(xué)習(xí)這一教程嗎?
這篇高級管理教程(第 4 部分)是那些希望學(xué)習(xí)或提高 Linux 文件系統(tǒng)相關(guān)技能的人的理想選擇。本教程特別適合剛剛成為初級系統(tǒng)管理員的人們使用,因為我們介紹了許多所有系統(tǒng)管理員都應(yīng)該知道的簡單問題。對于許多人,文中的許多問題可能是初次遇到,但經(jīng)驗較豐富的 Linux 用戶會發(fā)現(xiàn)這個教程是鞏固重要的 Linux 系統(tǒng)管理技能和準(zhǔn)備更高級別 LPI 認(rèn)證的極佳途徑。
如果您是 Linux 新手,我們建議您在繼續(xù)之前先學(xué)完
Part 1: Linux fundamentals
、
Part 2: Basic administration
和
Part 3: Intermediate administration
。
關(guān)于作者
有關(guān)本教程內(nèi)容中的技術(shù)問題,請與作者聯(lián)系:
Daniel Robbins 居住在美國新墨西哥州阿爾伯克基(Albuquerque),他是
Gentoo Technologies, Inc.
的總裁兼 CEO,也是 Gentoo Linux(PC 上的高級 Linux)和 Portage 系統(tǒng)(Linux 的下一代移植系統(tǒng))的創(chuàng)造者。他還是 Macmillan 出版的 Caldera OpenLinux Unleashed、SuSE Linux Unleashed 和 Samba Unleashed 等書的撰稿作者。Daniel 自小學(xué)二年級起就和計算機結(jié)下不解之緣,那時他第一次接觸 Logo 編程語言,并沉溺于 Pac-Man 游戲中。這也許就是為什么至今他仍擔(dān)任 SONY Electronic Publishing/Psygnosis 首席圖形設(shè)計師的原因所在。Daniel 喜歡與妻子 Mary 和他們的女兒 Hadassah 一起共度時光。
Chris Houser 在他的許多朋友中以“欺騙專家”而聞名,自 1994 年加入印第安納州泰勒大學(xué)計算機科學(xué)網(wǎng)絡(luò)管理團隊以來,一直是 UNIX 的擁護者,在那里,他獲得了計算機科學(xué)和數(shù)學(xué)學(xué)士學(xué)位。從那以后,他從事過 Web 應(yīng)用程序設(shè)計、用戶界面設(shè)計、專業(yè)視頻軟件支持,目前他在
Compaq
從事 Tru64 UNIX 設(shè)備驅(qū)動程序編程。他還參與了多個自由軟件項目,最近的項目是
Gentoo Linux
。他和他的妻子以及他們的兩只貓一起住在美國新罕布什爾州。
Aron Griffis 畢業(yè)于泰勒大學(xué),在該校獲得計算機學(xué)士學(xué)位并被授予“理想 UNIX 公社未來的創(chuàng)立者”榮譽稱號。懷著這一目標(biāo),Aron 受雇于
Compaq
從事編寫 Tru64 UNIX 網(wǎng)絡(luò)驅(qū)動程序的工作,并在閑暇時間對鋼琴調(diào)音或開發(fā)
Gentoo Linux
。他和妻子 Amy(也是 UNIX 工程師)住在美國新罕布什爾州的 Nashua。
二。linux文件系統(tǒng)
塊設(shè)備
在本節(jié)中,我們將仔細(xì)研究 Linux 文件系統(tǒng),以便您熟悉管理員需要知道的所有具體的詳細(xì)資料。我將從介紹“塊設(shè)備”開始。最為人們熟知的塊設(shè)備可能是表示 Linux 系統(tǒng)中第一個 IDE 驅(qū)動器的塊設(shè)備:
/dev/hda
如果您的系統(tǒng)使用 SCSI 驅(qū)動器,那么您的第一個硬盤驅(qū)動器將是:
/dev/sda
以上的塊設(shè)備表示磁盤的抽象接口。用戶程序可以使用這些塊設(shè)備與磁盤進行交互而無需擔(dān)心驅(qū)動器是 IDE、SCSI 或其它東西。程序只需將磁盤上的存儲信息視為一串大小為 512 字節(jié)、連續(xù)的、可隨機訪問的塊來進行尋址。
完整的磁盤和分區(qū)
在 Linux 下,我們可以使用特殊的“mkfs”命令并將特殊塊設(shè)備指定為命令行參數(shù)來創(chuàng)建文件系統(tǒng)。
然而,盡管理論上可以使用一個象 /dev/hda 或 /dev/sda 那樣的“完整的磁盤”的塊設(shè)備(表示整個磁盤)來包含單個文件系統(tǒng),但實際上從未采取過這種方法。而是將整個磁盤塊設(shè)備分成更小、更可管理的、名為“分區(qū)”的塊設(shè)備?梢允褂妹麨 fdisk 的工具創(chuàng)建分區(qū),該工具用來創(chuàng)建和編輯存儲在磁盤上的分區(qū)表。分區(qū)表對如何分割整個磁盤進行了精確定義。
介紹 fdisk
為了研究磁盤的分區(qū)表,我們可以運行 fdisk,其中將表示整個磁盤的塊設(shè)備指定為參數(shù):
# fdisk /dev/hda
# fdisk /dev/sda
請注意:如果磁盤的任何分區(qū)包含正在使用的文件系統(tǒng)或包含重要的數(shù)據(jù),則不應(yīng)該保存或作出任何對磁盤分區(qū)的更改。那樣做會導(dǎo)致磁盤上的數(shù)據(jù)丟失。
使用 fdisk
在 fdisk 中,您將看到與下面相似的提示符:
Command (m for help):
輸入 p 以顯示磁盤的當(dāng)前分區(qū)配置:
Command (m for help): p
Disk /dev/hda: 240 heads, 63 sectors, 2184 cylinders
Units = cylinders of 15120 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hda1 1 14 105808+ 83 Linux
/dev/hda2 15 49 264600 82 Linux swap
/dev/hda3 50 70 158760 83 Linux
/dev/hda4 71 2184 15981840 5 Extended
/dev/hda5 71 209 1050808+ 83 Linux
/dev/hda6 210 348 1050808+ 83 Linux
/dev/hda7 349 626 2101648+ 83 Linux
/dev/hda8 627 904 2101648+ 83 Linux
/dev/hda9 905 2184 9676768+ 83 Linux
Command (m for help):
我們將這個特殊磁盤配置成包含七個 Linux 文件系統(tǒng)(以“Linux”列出)和一個交換分區(qū)(以“Linux swap”列出)。請注意左邊相應(yīng)的分區(qū)塊設(shè)備名稱,從 /dev/hda1 開始直到 /dev/hda9。在 PC 的早期,分區(qū)軟件最多只允許四個分區(qū)(稱為“主”分區(qū))。由于這限制過多,因此產(chǎn)生了一個名為擴展分區(qū)的變通方法。擴展分區(qū)和主分區(qū)非常相似,并且占據(jù)四個主分區(qū)限制中的一個。然而,擴展分區(qū)可以擁有任意數(shù)目的所謂邏輯分區(qū),這有效地解決了四個分區(qū)的限制。在我們的示例中,hda1 到 hda3 是主分區(qū)。hda4 是包含邏輯分區(qū) hda5 到 hda9 的擴展分區(qū)。因此,在本示例中,您實際上永遠(yuǎn)不可能使用 /dev/hda4 直接存儲任何文件系統(tǒng) ― 它只能作為分區(qū) hda5 到 hda9 的容器。另外,請注意每個分區(qū)都有一個“標(biāo)識(Id)”,這也稱做“分區(qū)類型”。無論您何時創(chuàng)建新的分區(qū),您都必須確保正確設(shè)置了分區(qū)類型!83’是包含 Linux 文件系統(tǒng)的分區(qū)的正確類型,‘82’是用于 Linux 交換分區(qū)的正確類型。您可以使用 fdisk 中的 t 選項設(shè)置分區(qū)類型。Linux 內(nèi)核在引導(dǎo)期間用分區(qū)類型設(shè)置來自動檢測磁盤上的文件系統(tǒng)和交換設(shè)備。fdisk 以及更多內(nèi)容關(guān)于 fdisk 的內(nèi)容還有很多,由于篇幅所限無法在這里全都討論,這其中還包括新分區(qū)的創(chuàng)建(用 n 命令)以及將更改寫入磁盤(用 w 命令)。請記住您可以輸入 m 來獲得幫助。如果您初次接觸 fdisk,我建議您通過在沒有數(shù)據(jù)丟失危險的空閑磁盤上創(chuàng)建一些分區(qū)來熟悉該程序的用法。一旦創(chuàng)建分區(qū)并將它們寫入磁盤,您的新分區(qū)塊設(shè)備就準(zhǔn)備好可以使用了。我們馬上將用這些新的塊設(shè)備來存儲新的 Linux 文件系統(tǒng)。有關(guān)分區(qū)的更多信息,請參見以下分區(qū)技巧:
創(chuàng)建文件系統(tǒng)
在新的塊設(shè)備可用來存儲文件以前,我們需要在上面創(chuàng)建新的文件系統(tǒng)。我們通過使用 mkfs 命令做到這一點 ― 我們根據(jù)要創(chuàng)建的文件系統(tǒng)的類型來使用特殊的 mkfs。在本示例中,我們使用 mke2fs 在 /dev/hda6(一個空的、未使用的分區(qū)塊設(shè)備)上創(chuàng)建 ext2 文件系統(tǒng):
# mke2fs /dev/hdc6
mke2fs 1.25 (20-Sep-2001)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
1537088 inodes, 3072423 blocks
153621 blocks (5.00%) reserved for the super user
First data block=0
94 block groups
32768 blocks per group, 32768 fragments per group
16352 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 22 mounts or 180 days,
whichever comes first. Use tune2fs -c or -i to override.
通過上述命令,mke2fs 在 /dev/hda6 上創(chuàng)建了空白的 ext2 文件系統(tǒng)。
掛裝文件系統(tǒng)
創(chuàng)建文件系統(tǒng)之后,我們就可以使用 mount 命令掛裝它:
# mount /dev/hdc6 /mnt
要掛裝一個文件系統(tǒng),需要將分區(qū)塊設(shè)備指定為第一個參數(shù),將“掛裝點”指定為第二個參數(shù)。新的文件系統(tǒng)將在掛裝點處“嫁接”。這樣做的另一個效果是“隱藏”位于父文件系統(tǒng)上 /mnt 目錄中的任何文件。以后卸裝該文件系統(tǒng)時,這些文件將重新出現(xiàn)。執(zhí)行掛裝命令后,所有添加到 /mnt 的文件將存儲在新的 ext2 文件系統(tǒng)上。
創(chuàng)建和使用交換分區(qū)
如果我們剛剛創(chuàng)建了一個分區(qū)作為交換設(shè)備使用,我們要使用 mkswap 命令初始化該分區(qū),并將這個分區(qū)塊設(shè)備作為參數(shù)指定:
# mkswap /dev/hdc6
不同于常規(guī)文件系統(tǒng),我們不掛裝交換分區(qū)。而是用 swapon 命令啟用交換分區(qū):
# swapon /dev/hdc6
通常,Linux 系統(tǒng)的啟動腳本將負(fù)責(zé)自動啟用交換分區(qū)。因此,swapon 命令通常只在您要立即添加剛創(chuàng)建的交換分區(qū)時才需要。要查看當(dāng)前啟用的交換設(shè)備,請輸入 cat /proc/swaps。
查看掛裝的文件系統(tǒng)
要查看掛裝了什么文件系統(tǒng),只需輸入 mount 本身即可:
# mount
/dev/ide/host0/bus1/target0/lun0/part7 on / type xfs (rw,noatime,nodiratime)
proc on /proc type proc (rw)
none on /dev type devfs (rw)
tmpfs on /dev/shm type tmpfs (rw)
/dev/hdc6 on /mnt type ext2 (rw)
您也可以通過輸入 cat /proc/mounts 查看類似信息。因為我的 Linux 系統(tǒng)使用 devfs,所以 mount 輸出的第一行列出了較長的“根(root)”分區(qū)塊設(shè)備路徑!案蔽募到y(tǒng)將在引導(dǎo)期間由內(nèi)核自動掛裝。對 /dev 使用新的 devfs 設(shè)備管理文件系統(tǒng)的系統(tǒng)所用的正式的分區(qū)和磁盤塊設(shè)備名稱比 Linux 過去一直使用的更長。例如,/dev/ide/host0/bus1/target0/lun0/part7 是 /dev/hdc7 的正式名稱,而 /dev/hdc7 本身只是指向正式塊設(shè)備的符號鏈接。通過查看 /dev/.devfsd 文件是否存在,您可以確定文件系統(tǒng)是否在使用 devfs;如果該文件存在,則 devfs 是活動的。
掛裝選項
可以通過指定掛裝選項來定制待掛裝文件系統(tǒng)的各種屬性。例如,您可以使用“ro”選項將文件系統(tǒng)掛裝為“只讀”:
# mount /dev/hdc6 /mnt -o ro
/dev/hdc6 掛裝為只讀后,就不能修改 /mnt 中的任何文件 ― 只能讀取。如果您的文件系統(tǒng)已經(jīng)掛裝為“讀/寫”方式,而您想把它切換為只讀方式,您可以使用“remount”選項以避免再次卸裝和重新掛裝該文件系統(tǒng):
# mount /mnt -o remount,ro
請注意:不需要指定分區(qū)塊設(shè)備,因為已經(jīng)掛裝了文件系統(tǒng)而且 mount 知道 /mnt 與 /dev/hdc6 相關(guān)聯(lián)。要使文件系統(tǒng)再次為可寫,我們可以將它重新掛裝為讀/寫方式:
# mount /mnt -o remount,rw
請注意:如果有任何進程打開了 /mnt 中的任何文件或目錄,那么這些重新掛裝命令將不會成功地完成。要熟悉 Linux 下所有可用的掛裝選項,請輸入 man mount。
介紹 fstab
到目前為止,我們已經(jīng)了解了如何手工掛裝文件系統(tǒng)。一般而言,如果您要經(jīng)常掛裝一個文件系統(tǒng),那么手工掛裝往往有些麻煩。而且對于基本的文件系統(tǒng)(如一個單獨的 /var 文件系統(tǒng)),手工掛裝是不可能的。這些文件系統(tǒng)需要在引導(dǎo)期間自動掛裝,只要向 /etc/fstab 文件添加合適的項,我們就可以告訴系統(tǒng)做這些事情。即使您不希望在引導(dǎo)期間自動掛裝該文件系統(tǒng),一個 /etc/fstab 項也可以使掛裝變得比較容易,正如我們馬上會看到的那樣。
樣本 fstab
讓我們考察一個樣本 /etc/fstab 文件:
#
/dev/hda1 /boot ext2 noauto,noatime 1 2
/dev/hdc7 / xfs noatime,osyncisdsync,nodiratime 0 1
/dev/hdc5 none swap sw 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,ro,user 0 0
# /proc should always be enabled
proc /proc proc defaults 0 0
如上所示,/etc/fstab 中的每個未注釋行指定一個分區(qū)塊設(shè)備、一個掛裝點、一個文件系統(tǒng)類型、掛裝該文件系統(tǒng)時要用到的文件系統(tǒng)選項以及兩個數(shù)字字段。第一個數(shù)字字段用來向 dump 備份命令指明應(yīng)該備份的文件系統(tǒng)。當(dāng)然,如果您不打算在系統(tǒng)上使用 dump 命令,那么忽略這個字段不會有問題。后一個字段由 fsck 文件系統(tǒng)完整性檢查程序使用,并告訴該程序在引導(dǎo)時檢查文件系統(tǒng)所應(yīng)采用的順序。我們將在下幾屏再次接觸 fsck。
觀察 /dev/hda1 行;您會發(fā)現(xiàn) /dev/hda1 是一個應(yīng)該掛裝在 /boot 掛裝點的 ext2 文件系統(tǒng)。現(xiàn)在,觀察 列中 /dev/hda1 的掛裝選項。noauto 選項告訴系統(tǒng)在引導(dǎo)期間不要自動掛裝 /dev/hda1;如果沒有這個選項,系統(tǒng)引導(dǎo)時會自動將 /dev/hda1 掛裝到 /boot。
還要注意 noatime 選項,它關(guān)閉了磁盤上 atime (最近訪問時間)信息的記錄。該信息通常是不需要的,關(guān)閉 atime 更新對文件系統(tǒng)性能有積極作用。您還可以使用 nodiratime 掛裝選項來關(guān)閉目錄 atime 更新。
現(xiàn)在,觀察 /proc 行并注意 defaults 選項。當(dāng)希望只用標(biāo)準(zhǔn)掛裝選項掛裝文件系統(tǒng)時,請使用 defaults。因為 /etc/fstab 有多個字段,所以我們不能簡單地讓這個選項字段留作空白。
還要注意 的 /etc/fstab 中的為 /dev/hdc5 定義的行。該行將 /dev/hdc5 定義為交換設(shè)備。因為交換設(shè)備不象文件系統(tǒng)那樣被掛裝,所以在掛裝點字段指定 none。由于這個 /etc/fstab 項,系統(tǒng)啟動時將自動啟用 /dev/hdc5 交換設(shè)備。
如果有如上所示用于 /dev/cdrom 的 /etc/fstab 項,掛裝 CD-ROM 驅(qū)動器會變得更加簡單。我們不再輸入:
# mount -t iso9660 /dev/cdrom /mnt/cdrom -o ro
我們現(xiàn)在可以輸入:
# mount /dev/cdrom
事實上,使用 /etc/fstab 允許我們利用 user 選項。user 掛裝選項告訴系統(tǒng)允許任何用戶掛裝這個特殊的文件系統(tǒng)。這對于可移動媒體設(shè)備(象 CD-ROM 驅(qū)動器)很方便。如果沒有這個 fstab 掛裝選項,則只有 root 用戶能夠使用 CD-ROM 驅(qū)動器。
卸裝文件系統(tǒng)
通常情況下,所有掛裝的文件系統(tǒng)在系統(tǒng)重新引導(dǎo)或關(guān)機時都會自動卸裝。當(dāng)卸裝文件系統(tǒng)時,內(nèi)存中所有位于高速緩存中的文件系統(tǒng)數(shù)據(jù)都被刷新到磁盤中。
然而,也可以手工卸裝文件系統(tǒng)。在可以卸裝文件系統(tǒng)以前,您首先必須確保正在運行的進程在當(dāng)前討論的文件系統(tǒng)上沒有打開的文件。然后,使用 umount 命令,將設(shè)備名稱或者掛裝點指定為參數(shù):
# umount /mnt
或# umount /dev/hdc6
卸裝之后,/mnt 中被以前掛裝的文件系統(tǒng)所“覆蓋”的所有文件將重新出現(xiàn)。
介紹 fsck
如果您的系統(tǒng)因某種原因崩潰或鎖定,那么系統(tǒng)將無法徹底卸裝您的文件系統(tǒng)。如果發(fā)生了這種情況,您的文件系統(tǒng)就處于不一致(不可預(yù)測)狀態(tài)。當(dāng)系統(tǒng)重新引導(dǎo)時,fsck 程序?qū)z測出文件系統(tǒng)沒有完全卸裝,并希望對 /etc/fstab 中列出的文件系統(tǒng)進行一致性檢查。
有一點很重要 ― 對于由 fsck 檢查的文件系統(tǒng),必須在 /etc/fstab 的“pass”字段(最后一個字段)中有非零數(shù)字。通常情況下,應(yīng)將根文件系統(tǒng)的 passno 設(shè)置為 1,這指定應(yīng)首先檢查它。所有其它應(yīng)在啟動期間檢查的文件系統(tǒng)的 passno 應(yīng)為 2 或更高。
有時候,您會發(fā)現(xiàn) fsck 在重新引導(dǎo)后不能完全修復(fù)一個部分損壞的文件系統(tǒng)。在這些情況下,您所能做的就是將系統(tǒng)降為單用戶模式,然后手工運行 fsck ,并將這個分區(qū)塊設(shè)備作為參數(shù)提供。在 fsck 進行文件系統(tǒng)修復(fù)時,它可能會問您是否修復(fù)特殊的文件系統(tǒng)缺陷。通常情況下,您應(yīng)該對所有這些問題回答 y(yes)并允許 fsck 執(zhí)行它的工作。
fsck 的問題
fsck 掃描的問題之一是需要花較長的時間才能完成,因為它要掃描整個文件系統(tǒng)的元數(shù)據(jù)(內(nèi)部數(shù)據(jù)結(jié)構(gòu))以確保其一致性。對于一些非常大的文件系統(tǒng),用超過一小時的時間進行一次徹底的 fsck 并不罕見。
為了解決這個問題,人們設(shè)計了一種新的文件系統(tǒng),名為日志記錄文件系統(tǒng)(journaling filesystem)。日志記錄文件系統(tǒng)記錄一個近期對文件系統(tǒng)元數(shù)據(jù)所做更改的磁盤日志。如果發(fā)生崩潰,該文件系統(tǒng)驅(qū)動程序檢查日志。因為日志含有磁盤上近期更改的精確記錄,所以只需檢查這部分文件系統(tǒng)元數(shù)據(jù)來找出錯誤。多虧這一重要的設(shè)計差異,對一個日志記錄系統(tǒng)進行一致性檢查通常只需大約幾秒鐘(不管文件有多大)。出于這個原因,日志記錄文件系統(tǒng)正在 Linux 社區(qū)流行起來。有關(guān)日志記錄文件系統(tǒng)的更多信息,請參閱
高級文件系統(tǒng)實現(xiàn)者指南, 第一部分: 日志和 ReiserFS
。
現(xiàn)在,讓我們研究可用于 Linux 的各種文件系統(tǒng)。
ext2 文件系統(tǒng)
ext2 文件系統(tǒng)多年來已經(jīng)成為標(biāo)準(zhǔn)的 Linux 文件系統(tǒng)。對于大多數(shù)應(yīng)用程序,它通常都有很好的性能,但它沒有任何日志記錄能力。這使得它不適合非常大的文件系統(tǒng),因為執(zhí)行 fscks 要花太多的時間。另外,由于每個 ext2 文件系統(tǒng)只能擁有固定數(shù)目的索引節(jié)點(inode),所以 ext2 有些內(nèi)置的限制?梢赃@么說,通常認(rèn)為 ext2 是一個非常健壯和有效的非日志記錄文件系統(tǒng)。
- 內(nèi)核:2.0+
- 日志記錄:無
- mkfs 命令:mke2fs
- mkfs 示例:mke2fs /dev/hdc7
- 相關(guān)命令:debugfs、tune2fs 和 chattr
- 與性能相關(guān)的掛裝選項:noatime 和 nodiratime
ext3 文件系統(tǒng)
ext3 文件系統(tǒng)使用與 ext2 相同的磁盤格式,但增加了日志記錄能力。事實上,在所有的 Linux 文件系統(tǒng)中,ext3 具有最廣泛的日志記錄支持,它不僅支持元數(shù)據(jù)日志記錄,還支持有序日志記錄(缺省)和完全的“元數(shù)據(jù)+數(shù)據(jù)”日志記錄。這些“特殊”日志記錄方式有助于確保數(shù)據(jù)完整性,而不象其它日志記錄實現(xiàn)僅僅縮短 fsck 的運行時間。出于這個原因,如果數(shù)據(jù)完整性是絕對最重要的,那么 ext3 是可用的最佳文件系統(tǒng)。然而,這些數(shù)據(jù)完整性功能確實會在某種程度上影響性能。另外,因為 ext3 使用與 ext2 相同的磁盤格式,所以和它的非日志記錄表親(ext2)一樣,它也受到同樣的可伸縮性限制。如果您在尋找一個出色的、通用的同時又非常健壯的日志記錄文件系統(tǒng),那么 ext3 是很好的選擇。
- 內(nèi)核:2.4.16+
- 日志記錄:元數(shù)據(jù)、有序數(shù)據(jù)寫入和完全的“元數(shù)據(jù)+數(shù)據(jù)”
- mkfs 命令:mke2fs -j
- mkfs 示例:mke2fs -j /dev/hdc7
- 相關(guān)命令:debugfs、tune2fs 和 chattr
- 與性能相關(guān)的掛裝選項:noatime 和 nodiratime
- 其它掛裝選項:
- data=writeback(禁用日志記錄)
- data=ordered(缺省值,將元數(shù)據(jù)日志記錄和數(shù)據(jù)與元數(shù)據(jù)一起寫到磁盤)
- data=journal(用于數(shù)據(jù)和元數(shù)據(jù)完整性的完全數(shù)據(jù)日志記錄。寫操作性能降低一半。)
- ext3 參考資料:
ReiserFS 文件系統(tǒng)
ReiserFS 是一個相對較新的文件系統(tǒng),它的設(shè)計目標(biāo)是提供非常好的小文件性能、非常好的通用性能以及是非?缮炜s的。ReiserFS 使用元數(shù)據(jù)日志以避免長時間的 fsck,但日志實現(xiàn)可能使最近修改的數(shù)據(jù)在系統(tǒng)鎖定時被毀壞。通常情況下,ReiserFS 有非常好的性能,但在裝入特定種類的文件系統(tǒng)時可能出現(xiàn)某種性能反常的情況。另外,ReiserFS 的 fsck 工具還不成熟,因此從毀壞的文件系統(tǒng)恢復(fù)數(shù)據(jù)可能會有困難。這些問題中的很多是由于 ReiserFS 相對較新、仍在發(fā)展過程中。許多人因 ReiserFS 的速度和可伸縮性而喜愛它。
- 內(nèi)核:2.4.0+(推薦 2.4.16+)
- 日志記錄:元數(shù)據(jù)
- mkfs 命令:mkreiserfs
- mkfs 示例:mkreiserfs /dev/hdc7
- 與性能相關(guān)的掛裝選項:noatime、nodiratime 和 notail
- ReiserFS 參考資料:
XFS 文件系統(tǒng)
XFS 文件系統(tǒng)是正在由
SGI
移植到 Linux 的企業(yè)級日志記錄文件系統(tǒng),F(xiàn)成的內(nèi)核中還沒有 XFS,不過可以在
http://oss.sgi.com/projects/xfs
找到有關(guān) XFS 的更多信息。有關(guān) XFS 的簡介,請參閱
高級文件系統(tǒng)實現(xiàn)者指南,第 9 部分: XFS 簡介
。
JFS 文件系統(tǒng)
JFS 是一個由 IBM 移植到 Linux 的高性能日志記錄文件系統(tǒng)。JFS 由 IBM 企業(yè)服務(wù)器使用,并且是為高性能應(yīng)用程序而設(shè)計的,F(xiàn)成的內(nèi)核中還沒有 JFS。您可以在
JFS 項目網(wǎng)站
學(xué)習(xí)更多有關(guān) JFS 的知識。
VFAT
VFAT 文件系統(tǒng)實際不是那種您可以選擇用于存儲 Linux 文件的文件系統(tǒng)。相反,它是一種與 DOS 兼容的文件系統(tǒng)驅(qū)動程序,允許您掛裝基于 DOS 和 Windows FAT 的文件系統(tǒng)并與之交換數(shù)據(jù)。VFAT 文件系統(tǒng)驅(qū)動程序在標(biāo)準(zhǔn) Linux 內(nèi)核中存在。
三。引導(dǎo)系統(tǒng)
關(guān)于本節(jié)
本節(jié)介紹 Linux 引導(dǎo)過程。我們將介紹引導(dǎo)裝入程序的概念、如何在引導(dǎo)時設(shè)置內(nèi)核選項以及如何檢查引導(dǎo)日志以找出錯誤。
MBR
不管安裝的是哪個分發(fā)版(distribution),所有機器的引導(dǎo)過程都很相似?紤]下列硬盤示例:
+----------------+
| MBR |
+----------------+
| Partition 1: |
| Linux root (/) |
| containing |
| kernel and |
| system. |
+----------------+
| Partition 2: |
| Linux swap |
+----------------+
| Partition 3: |
| Windows 3.0 |
| (last booted |
| in 1992) |
+----------------+
首先,計算機的 BIOS 讀取硬盤上的頭幾個扇區(qū)。這些扇區(qū)包含一個非常小的程序,名為“主引導(dǎo)記錄(Master Boot Record)”,或簡稱為“MBR”。MBR 已經(jīng)存儲了 Linux 內(nèi)核在硬盤上的位置(在上面的示例中是分區(qū) 1),因此它將內(nèi)核裝入內(nèi)存,然后啟動它。
內(nèi)核引導(dǎo)過程
接下來您看到的東西(盡管它可能一閃而過)是與下面類似的一行:
Linux version 2.4.16 (root@time.flatmonk.org) (gcc version 2.95.3 20010315 (release)) #1 Sat Jan 12 19:23:04 EST 2002
這就是內(nèi)核開始運行時所打印的第一行信息。首先是內(nèi)核版本,接著是構(gòu)建該內(nèi)核的用戶標(biāo)識(通常是 root 用戶),然后是構(gòu)建它的編譯器,最后是構(gòu)建時的時間戳記。
那一行之后是來自內(nèi)核的關(guān)于系統(tǒng)硬件的大量輸出:處理器、PCI 總線、磁盤控制器、磁盤、串口、軟驅(qū)、USB 設(shè)備、網(wǎng)絡(luò)適配器、聲卡和其它可能的設(shè)備將依次報告它們的狀態(tài)。
/sbin/init
當(dāng)內(nèi)核裝入結(jié)束時,它啟動一個名為 init 的程序。該程序直到系統(tǒng)關(guān)機才停止運行。如您所見,始終給它分配進程標(biāo)識 1:
$ ps --pid 1
PID TTY TIME CMD
1 ? 00:00:04 init.system
init 程序通過運行一系列腳本來引導(dǎo)分發(fā)版的余下部分。這些腳本通常位于 /etc/rc.d/init.d 或 /etc/init.d 中,它們執(zhí)行的服務(wù)有設(shè)置系統(tǒng)主機名、檢查文件系統(tǒng)是否有錯誤、掛裝附加的文件系統(tǒng)、啟用聯(lián)網(wǎng)以及啟動打印服務(wù)等等。當(dāng)腳本運行結(jié)束時,init 啟動名為 getty 的程序,該程序會顯示登錄提示符,然后您就可以開始使用了!
深入研究:LILO
既然我們已經(jīng)快速了解了引導(dǎo)過程,現(xiàn)在讓我們更仔細(xì)地研究第一個部分:MBR 和裝入內(nèi)核。維護 MBR 是“引導(dǎo)裝入程序”的職責(zé); x86 的 Linux 的兩個最流行的引導(dǎo)裝入程序是“LILO”(LInux LOader 的縮寫)和“GRUB”(GRand Unified Bootloader 的縮寫)。
LILO 是二者中出現(xiàn)得較早、較常用的引導(dǎo)裝入程序。引導(dǎo)時會出現(xiàn)簡短的“LILO boot:”提示符,說明 LILO 存在于您的系統(tǒng)上。請注意,您可能要在引導(dǎo)時按住 shift 鍵才能看到提示符,因為系統(tǒng)常常被配置為不間歇地快速運行,從而會很快閃過這個畫面。
LILO 提示符沒有太多華而不實的東西,不過如果您按一下 鍵,您會看到一個可引導(dǎo)的可選內(nèi)核(或其它操作系統(tǒng))列表。通常列表中只有一項。您可以輸入其中一項的名稱然后按 來引導(dǎo)它;蛘吣梢院唵蔚匕匆幌 ,在缺省情況下將引導(dǎo)列表中的第一項。
使用 LILO
有時候您希望在引導(dǎo)期間將一個選項傳遞到內(nèi)核。一些較常用的選項是:root= 用來指定替代的引導(dǎo)文件系統(tǒng),init= 用來指定替代的 init 程序(如指定 init=/bin/sh 來挽救被錯誤配置的系統(tǒng)),mem= 指定系統(tǒng)中的內(nèi)存數(shù)量(例如,在 Linux 只自動識別了 128 M 的情況下使用 mem=512M)。您可以在 LILO 引導(dǎo)提示符下向內(nèi)核傳遞下列選項:
LILO boot: linux root=/dev/hdb2 init=/bin/sh mem=512M
如果您需要經(jīng)常指定命令行選項,您應(yīng)該考慮把它們添加到 /etc/lilo.conf 文件。該文件的格式在 lilo.conf(5) 手冊頁中有描述。
一個重要的 LILO 問題
在轉(zhuǎn)向討論 GRUB 以前,還要討論一個重要的 LILO 問題。只要您對 /etc/lilo.conf 做了更改,或安裝了新的內(nèi)核,您都必須運行 lilo。lilo 程序會重寫 MBR 以反映您所做的更改,包括記錄內(nèi)核的絕對磁盤位置。這里的示例利用 -v 標(biāo)記進行詳細(xì)信息描述。
# lilo -v
LILO version 21.4-4, Copyright (C) 1992-1998 Werner Almesberger
'lba32' extensions Copyright (C) 1999,2000 John Coffman
Reading boot sector from /dev/hda
Merging with /boot/boot.b
Mapping message file /boot/message
Boot image: /boot/vmlinuz-2.2.16-22
Added linux *
/boot/boot.0300 exists - no backup copy made.
Writing boot sector.
深入研究:GRUBGRUB 引導(dǎo)裝入程序被認(rèn)為是繼 LILO 之后的下一代引導(dǎo)裝入程序。對用戶而言,最顯而易見的是它用一個菜單界面取代了 LILO 的原始提示符。對于系統(tǒng)管理員而言,改變更為顯著。GRUB 比 LILO 支持更多的操作系統(tǒng),它在引導(dǎo)菜單中提供了基于密碼的安全性,并且更易于管理。通常用 grub-install 命令安裝 GRUB。安裝完畢后,可以編輯文件 /boot/grub/menu.lst 來管理 GRUB 菜單。這兩個任務(wù)都超出了本文的討論范圍;在試圖安裝或管理 GRUB 之前,您應(yīng)該閱讀 GRUB 信息頁。使用 GRUB要向內(nèi)核傳遞參數(shù),您可以在引導(dǎo)菜單上按 e。這使您有機會編輯(再次按 e)要裝入的內(nèi)核名稱或傳遞給它的參數(shù)。當(dāng)您結(jié)束編輯后,按 鍵,然后按 b 鍵以用您所做的更改來引導(dǎo)。LILO 與 GRUB 之間值得一提的顯著區(qū)別是:GRUB 不需要在每次更改配置或安裝新內(nèi)核后重新安裝其引導(dǎo)裝入程序。這是因為 GRUB 理解 Linux 文件系統(tǒng),而 LILO 只是存儲要裝入內(nèi)核的絕對磁盤位置。當(dāng)系統(tǒng)管理員安裝新內(nèi)核后忘了輸入 lilo 時,GRUB 的這一簡單事實可以緩解他們的挫折感。dmesg來自內(nèi)核和 init 腳本的引導(dǎo)消息通常在屏幕上停留的時間很短,您可能會注意到一個錯誤消息,但在您能看清楚它以前,它已經(jīng)消失了。在這種情況下,您可以在系統(tǒng)引導(dǎo)之后到兩個地方去查看以找出錯誤(并且有希望找到修復(fù)它的方法)。如果錯誤出現(xiàn)在內(nèi)核正在裝入或檢測硬件設(shè)備的時候,您可以用 dmesg 命令獲得一個內(nèi)核日志的副本。
# dmesg | head -1
Linux version 2.4.16 (root@time.flatmonk.org) (gcc version 2.95.3 20010315 (release)) #1 Sat Jan 12 19:23:04 EST 2002
嘿,我們認(rèn)得那一行!這就是內(nèi)核在裝入時打印的第一行信息。的確,如果您將 dmesg 的輸出傳送到分頁程序上,您會看到內(nèi)核在引導(dǎo)時打印的所有消息以及內(nèi)核在那段時間已打印到控制臺的所有消息。/var/log/messages第二個查看信息的地方在 /var/log/messages 文件中。該文件由 syslog 守護程序記錄,syslog 守護程序接受來自庫、守護程序和內(nèi)核的輸入。消息文件中的每一行都被打上時間戳記。這個文件是查找引導(dǎo)期間的 init 腳本階段出現(xiàn)的錯誤的好位置。例如,要查看來自名稱服務(wù)器的最后幾條消息:
# grep named /var/log/messages | tail -3
Jan 12 20:17:41 time /usr/sbin/named[350]: listening on IPv4 interface lo, 127.0.0.1#53
Jan 12 20:17:41 time /usr/sbin/named[350]: listening on IPv4 interface eth0, 10.0.0.1#53
Jan 12 20:17:41 time /usr/sbin/named[350]: running單用戶方式我們知道,可以在內(nèi)核引導(dǎo)時向它傳遞參數(shù)。最常使用的參數(shù)之一是 s,它使系統(tǒng)以“單用戶”方式啟動。這一方式通常只掛裝根文件系統(tǒng),啟動 init 腳本的最小子集,然后啟動 shell 而不是提供登錄提示符。另外,沒有配置聯(lián)網(wǎng),因此外部因素沒有機會影響您的工作。使用單用戶方式那么在這樣的狀態(tài)下我們能夠“做什么”呢?要回答這個問題,我們必須認(rèn)識到 Linux 和 Windows 之間的巨大差異。Windows 被設(shè)計成通常在同一時間內(nèi)只能由坐在控制臺前的一個人使用。它實際上一直處于“單用戶”方式。相反,Linux 更多地用于為網(wǎng)絡(luò)應(yīng)用程序服務(wù),或為網(wǎng)絡(luò)上的遠(yuǎn)程用戶提供 shell 或 X 會話。當(dāng)您希望執(zhí)行維護操作(如:從備份中恢復(fù)、創(chuàng)建或修改文件系統(tǒng)、從 CD 升級系統(tǒng)等等)時,您不希望有這些額外的變數(shù)。在這些情況下,您應(yīng)該使用單用戶方式。更改運行級別 事實上,要進入單用戶方式不必重新引導(dǎo)。init 程序管理系統(tǒng)的當(dāng)前方式(或稱為“運行級別(runlevel)”)。Linux 系統(tǒng)的標(biāo)準(zhǔn)運行級別按如下分類并定義:- 0:停止計算機
- 1 或 s:單用戶方式
- 2:多用戶,無網(wǎng)絡(luò)
- 3:多用戶,文本控制臺
- 4:多用戶,圖形控制臺
- 5:同 4
- 6:重新引導(dǎo)計算機
這些運行級別因分發(fā)版而異,所以請確保參考您的分發(fā)版的文檔。要轉(zhuǎn)至單用戶方式,可以使用 telinit 命令,它指示 init 更改運行級別:# telinit 1
從上表中您可以看到您還可以用這種方式關(guān)閉或重新引導(dǎo)系統(tǒng)。telinit 0 將停機;telinit 6 將重新引導(dǎo)計算機。當(dāng)您發(fā)出 telinit 命令更改運行級別時,init 腳本的一個子集將運行以關(guān)閉或啟動系統(tǒng)服務(wù)。恰當(dāng)?shù)仃P(guān)機 然而,如果還有用戶在使用系統(tǒng),那么此時關(guān)機是相當(dāng)粗魯?shù)模ㄓ脩艨赡軙浅I鷼猓?strong>shutdown 命令提供了一種方法,以一種合理對待用戶的方式來更改運行級別。類似于 kill 命令那種可以向一個進程發(fā)送多種信號的能力,shutdown 可以用來停機、重新引導(dǎo)或轉(zhuǎn)至單用戶方式。例如,要在 5 分鐘內(nèi)轉(zhuǎn)至單用戶方式:# shutdown 5
Broadcast message from root (pts/2) (Tue Jan 15 19:40:02 2002):
The system is going DOWN to maintenance mode in 5 minutes!
如果此時您按 control-c 組合鍵,您可以取消切換至單用戶方式前的延時等待。上面的消息將在系統(tǒng)的所有終端上出現(xiàn),因此用戶有合理數(shù)量的時間保存他們的工作并注銷。(有些人可能會爭論 5 分鐘是不是“合理”的)。立即關(guān)機如果您是唯一使用系統(tǒng)的人,您可以用“now”代替以分鐘為單位的參數(shù)。例如,要立即重新引導(dǎo)系統(tǒng):# shutdown -r now
在此情況下,您沒有機會按 control-c 組合鍵;因為系統(tǒng)已經(jīng)在進行關(guān)機了。最后,-h 選項使系統(tǒng)停機:# shutdown -h 1
Broadcast message from root (pts/2) (Tue Jan 15 19:50:58 2002):
The system is going DOWN for system halt in 1 minute!
缺省運行級別此時您可能已得出結(jié)論:init 程序在 Linux 系統(tǒng)上是非常重要的。您可以編輯文件 /etc/initttab 來配置 init,這在 inittab(5) 手冊頁中有描述。我們只討論這個文件中的關(guān)鍵一行。# grep ^id: /etc/inittab
id:3:initdefault:
在我的系統(tǒng)上,運行級別 3 是缺省運行級別。如果您更喜歡您的系統(tǒng)立即引導(dǎo)至圖形登錄界面(通常為運行級別 4 或 5),那么更改這個值會有用。要那樣做的話,只需簡單地編輯文件并更改那一行的值。但要小心!如果您將它改為某個無效值,您可能不得不使用我們在前面提到的 init=/bin/sh 技巧。其它信息 可以在下面找到與這一節(jié)有關(guān)的其它信息:
四。運行級別
單用戶方式
還記得關(guān)于引導(dǎo)裝入程序一節(jié)所講的嗎?在引導(dǎo)內(nèi)核時向它傳遞參數(shù)是可能的。最常用的參數(shù)之一是 s,它使系統(tǒng)以“單用戶”方式啟動。這一方式通常只掛裝根文件系統(tǒng),啟動 init 腳本的最小子集,然后啟動 shell 而不是提供登錄提示符。另外,它不配置聯(lián)網(wǎng),因此外部因素沒有機會影響您的工作。
那么在這樣的狀態(tài)下我們能夠“做什么”呢?要回答這個問題,我們必須認(rèn)識到 Linux 和 Windows 之間的巨大差異。Windows 被設(shè)計成通常在同一時間內(nèi)只能由坐在控制臺前的一個人使用。它實際上一直處于“單用戶”方式。相反,Linux 更多地用于為網(wǎng)絡(luò)應(yīng)用程序服務(wù),或為網(wǎng)絡(luò)上的遠(yuǎn)程用戶提供 shell 或 X 會話。當(dāng)您希望執(zhí)行維護操作(如:從備份中恢復(fù)、創(chuàng)建或修改文件系統(tǒng)、從 CD 升級系統(tǒng)等等)時,您不希望有這些額外的變數(shù)。在這些情況下,您應(yīng)該使用單用戶方式。
運行級別
事實上,要進入單用戶方式不必重新引導(dǎo)。init 程序管理系統(tǒng)的當(dāng)前方式(或稱為“運行級別”)。Linux 系統(tǒng)的標(biāo)準(zhǔn)運行級別按如下分類并定義:
- 0:停止計算機
- 1 或 s:單用戶方式
- 2:多用戶,無網(wǎng)絡(luò)
- 3:多用戶,文本控制臺
- 4:多用戶,圖形控制臺
- 5:同 4
- 6:重新引導(dǎo)計算機
這些運行級別因分發(fā)版而異,所以請確保參考您的分發(fā)版的文檔。
telinit
要轉(zhuǎn)至單用戶方式,可以使用 telinit 命令,它指示 init 更改運行級別:
# telinit 1
從上表中您可以看到您還可以用這種方式關(guān)機或重新引導(dǎo)系統(tǒng)。telinit 0 將停機;telinit 6 將重新引導(dǎo)計算機。當(dāng)您使用 telinit 命令更改運行級別時,init 腳本的一個子集將運行以關(guān)閉或啟動系統(tǒng)服務(wù)。
運行級別規(guī)則
然而,如果還有用戶在使用系統(tǒng),那么此時關(guān)機是相當(dāng)粗魯?shù)模ㄓ脩艨赡軙浅I鷼猓?strong>shutdown 命令提供了一種方法,以一種合理對待用戶的方式來更改運行級別。類似于 kill 命令那種可以向一個進程發(fā)送多種信號的能力,shutdown 以用來停機、重新引導(dǎo)或轉(zhuǎn)至單用戶方式。例如,要在 5 分鐘內(nèi)轉(zhuǎn)至單用戶方式:
# shutdown 5
Broadcast message from root (pts/2) (Tue Jan 15 19:40:02 2002):
The system is going DOWN to maintenance mode in 5 minutes!
如果此時您按 control-c 組合鍵,您可以取消切換至單用戶方式前的延時等待。上面的消息將在系統(tǒng)的所有終端上出現(xiàn),因此用戶有合理數(shù)量的時間保存他們的工作并注銷。(有些人可能會爭論 5 分鐘是不是“合理”的)。
“now”和停機
如果您是唯一使用系統(tǒng)的人,您可以用 now 代替以分鐘為單位的參數(shù)。例如,要立即重新引導(dǎo)系統(tǒng):
# shutdown -r now
在此情況下,您沒有機會按 control-c 組合鍵;因為系統(tǒng)已經(jīng)在進行關(guān)機了。最后,-h 選項使系統(tǒng)停機:
# shutdown -h 1
Broadcast message from root (pts/2) (Tue Jan 15 19:50:58 2002):
The system is going DOWN for system halt in 1 minute!
配置 init
此時您可能已得出結(jié)論:init 程序在 Linux 系統(tǒng)上是非常重要的。您可以編輯文件 /etc/initttab 來配置 init,這在 inittab(5) 手冊頁中有描述。我們只討論這個文件中的關(guān)鍵一行。
# grep ^id: /etc/inittab
id:3:initdefault:
在我的系統(tǒng)上,運行級別 3 是缺省運行級別。如果您更喜歡您的系統(tǒng)立即引導(dǎo)至圖形登錄(通常為運行級別 4 或 5),那么更改這個值會有用。要那樣做的話,只需簡單地編輯文件并在那一行更改那個值。但要小心!如果您將它改為某個無效值,您可能不得不使用我們在前面提到的 init=/bin/sh 技巧。
五。文件系統(tǒng)限額
介紹限額
限額(quota)是 Linux 的一個特性,它讓您跟蹤用戶或組的磁盤使用情況。它們可用于防止任何單個用戶或組不公平地使用文件系統(tǒng)的一部分或?qū)⑺顫M。限額只能由 root 用戶啟用和管理。在本節(jié)中,我將介紹如何在 Linux 系統(tǒng)上設(shè)置限額并有效地管理它們。
內(nèi)核支持
限額是文件系統(tǒng)的一個特性;因此,它們需要內(nèi)核支持。首先需要做的是驗證您的內(nèi)核支持限額。您可以用 grep 做到這一點:
# cd /usr/src/linux
# grep -i quota .config
CONFIG_QUOTA=y
CONFIG_XFS_QUOTA=y
如果難以用該命令返回的信息作出結(jié)論(如未設(shè)置 CONFIG_QUOTA),那么您應(yīng)該重新構(gòu)建內(nèi)核以包含限額支持。這一過程并不困難,但超出本教程這一節(jié)的討論范圍之外。如果您不熟悉構(gòu)建和安裝新內(nèi)核的步驟,您應(yīng)該考慮參考
這個教程
。
文件系統(tǒng)支持
在深入研究限額管理以前,請注意到 2.4.x 內(nèi)核為止的 Linux 系列上的限額支持尚不完整。限額目前在 ext2 和 ext3 文件系統(tǒng)中還存在問題,而 ReiserFs 似乎根本不支持限額。本教程的示例使用的是 XFS,它
似乎可以較好地支持 quota
。
配置限額
要開始在系統(tǒng)配置限額,您應(yīng)該編輯 /etc/fstab 文件以掛裝受啟用限額影響的文件系統(tǒng)。在我們的示例中,我們使用掛裝時啟用用戶和組限額的 XFS 文件系統(tǒng)。
# grep quota /etc/fstab
/usr/users /mnt/hdc1 xfs usrquota,grpquota,noauto 0 0
# mount /usr/users
請注意:usrquota 和 grpquota 選項不一定在文件系統(tǒng)上啟用限額。要確保啟用了限額,您可以使用 quotaon 命令:
# quotaon /usr/users
如果您想以后禁用限額,則有一個相應(yīng)的 quotaoff 命令:
# quotaoff /usr/users
但在目前,如果您正在嘗試本教程中的幾個示例,請確保啟用了限額。
quota 命令
quota 命令顯示了當(dāng)前掛裝的所有文件系統(tǒng)的用戶磁盤使用情況和限制。-v 選項包括啟用了限額的文件系統(tǒng)列表,但當(dāng)前沒有給用戶分配存儲空間。
# quota -v
Disk quotas for user root (uid 0):
Filesystem blocks quota limit grace files quota limit grace
/dev/hdc1 0 0 0 3 0 0
第一列 blocks 顯示 root 用戶當(dāng)前在每個列出的文件系統(tǒng)上正在使用多少磁盤空間。接下來的 quota 和 limit 列顯示當(dāng)前的磁盤空間限制。我們稍后將解釋 quota 和 limit 之間的區(qū)別以及 grace 列的含義。files 列顯示 root 用戶在特定文件系統(tǒng)上擁有多少文件。其后的 quota 和 limit 列則顯示對這些文件的限制。
查看限額
任何用戶都可以使用 quota 命令查看自己的限額報告,如前一個示例所示。但是只有 root 用戶可以查看其他用戶和組的限額。例如,假設(shè)我們在 /usr/users 上掛裝了一個文件系統(tǒng) /dev/hdc1,并且有兩個用戶:jane 和 john。首先,讓我們看看 jane 的磁盤使用情況和限制。
# quota -v jane
Disk quotas for user jane (uid 1003):
Filesystem blocks quota limit grace files quota limit grace
/dev/hdc1 4100 0 0 6 0 0
在這一示例中,我們看到 jane 的 quota 被設(shè)置為零,這表示沒有限制。edquota
現(xiàn)在假設(shè)我們希望給用戶 jane 一個限額。我們用 edquota 命令實現(xiàn)。在我們開始編輯限額之前,讓我們看看我們在 /usr/users 上還有多少可用空間:
# df /usr/users
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hdc1 610048 4276 605772 1% /usr/users
這不是一個特別大的文件系統(tǒng),僅僅 600M 左右。給 jane 一個限額似乎是明智的,這樣她所用的空間就不會超過她應(yīng)得的空間。當(dāng)您運行 edquota 時,會為您在命令行指定的每個用戶或組創(chuàng)建一個臨時文件。
edquota 命令為您提供一個編輯器,它使您能通過這個臨時文件添加和/或修改 quota。
# edquota jane
Disk quotas for user jane (uid 1003):
Filesystem blocks soft hard inodes soft hard
/dev/hdc1 4100 0 0 6 0 0
與上面 quota 命令的輸出相似,這個臨時文件中的 blocks 和 inodes 列顯示 jane 當(dāng)前正在使用的磁盤空間和文件數(shù)目。您不能修改 blocks 或 inodes 的數(shù)量;任何這樣的嘗試都將立即被系統(tǒng)廢棄。soft 和 hard 列顯示 jane 的限額,我們可以看到當(dāng)前對它沒有限制(零表明沒有限額)。
理解 edquota
soft 限制是在文件系統(tǒng)上分配給 jane 的磁盤空間最大使用量(也就是她的限額)。如果 jane 使用的磁盤空間數(shù)量超過在 soft 限制中分配給她的空間數(shù)量,將通過電子郵件就她的違規(guī)行為提出警告。hard 限制表明對磁盤使用的絕對限制,用戶不能超過該限制。如果 jane 試圖使用的磁盤空間多于 hard 限制中指定的磁盤空間,她將得到“Disk quota exceeded”錯誤信息并且不能完成該操作。
進行更改
那么我們在這里更改 jane 的 soft 和 hard 限制,然后保存該文件:
Disk quotas for user jane (uid 1003):
Filesystem blocks soft hard inodes soft hard
/dev/hdc1 4100 10000 11500 6 2000 2500
運行 quota 命令,我們可以檢查我們所做的修改:
# quota jane
Disk quotas for user jane (uid 1003):
Filesystem blocks quota limit grace files quota limit grace
/dev/hdc1 4100 10000 11500 6 2000 2500
復(fù)制限額
您會記得在這個文件系統(tǒng)上我們還有另一個用戶 john。如果我們希望給 john 的限額與 jane 的限額相同,我們可以在 edquota 命令中使用 -p 選項,它會將 jane 的限額作為原型用于命令行上所有隨后的用戶。這是一個為用戶組設(shè)置限額的簡便方法。
# edquota -p jane john
# quota john
Disk quotas for user john (uid 1003):
Filesystem blocks quota limit grace files quota limit grace
/dev/hdc1 0 10000 11500 1 2000 2500 組限制 使用 edquota,我們還可以根據(jù)文件的組所有權(quán)來限制磁盤空間分配。例如,要編輯 users 組的限額:# edquota -g users Disk quotas for group users (gid 100): Filesystem blocks soft hard inodes soft hard /dev/hdc1 4100 500000 510000 7 100000 125000 然后要查看修改的 users 組的限額:# quota -g users Disk quotas for group users (gid 100): Filesystem blocks quota limit grace files quota limit grace /dev/hdc1 4100 500000 510000 7 100000 125000 repquota 命令
如果您的文件系統(tǒng)有很多用戶,那么使用限額命令查看每個用戶的限額會比較麻煩。repquota 命令將文件系統(tǒng)的限額以一個清楚易懂的報告進行總結(jié)。例如,要查看 /usr/users 上所有用戶和組的限額:
# repquota -ug /usr/users
*** Report for user quotas on device /dev/hdc1
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 0 0 0 3 0 0
john -- 0 10000 11500 1 2000 2500
jane -- 4100 10000 11500 6 2000 2500
*** Report for group quotas on device /dev/hdc1
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
Group used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 0 0 0 3 0 0
users -- 4100 500000 510000 7 100000 125000
repquota 選項
repquota 有其它兩個選項值得一提。repquota -a 將報告所有啟用了限額并且當(dāng)前已掛裝的讀-寫文件系統(tǒng)。repquota -n 將不把 uid 和 gid 解析為名稱。這可以加快大型列表的輸出。
監(jiān)控限額
如果您是系統(tǒng)管理員,您會希望有一種方法可以監(jiān)控限額以確保沒有用戶超過它們。實現(xiàn)它的一個簡單方法是使用 warnquota。warnquota 命令會向超過 soft 限制的用戶發(fā)送電子郵件。通常將 warnquota 作為 cron 作業(yè)運行。
當(dāng)用戶超過 soft 限制時,quota 命令輸出中的 grace 列將指出寬限時間 ― 在該文件系統(tǒng)強制執(zhí)行 soft 限制之前有多少時間。
Disk quotas for user jane (uid 1003):
Filesystem blocks quota limit grace files quota limit grace
/dev/hdc1 10800* 10000 11500 7days 7 2000 2500
缺省情況下,blocks 和 inodes 的寬限時間是 7 天。
修改寬限時間
您可以用 equota 修改文件系統(tǒng)的寬限時間:
# edquota -t
這為您提供一個臨時文件編輯器,它看起來與下面相似:
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/hdc1 7days 7days
該文件中的文本簡單明了,無需解釋。請確保給您的用戶足夠的時間來接收警告電子郵件并找出一些要刪除的文件!
在引導(dǎo)時檢查限額
您可能還希望在引導(dǎo)時檢查限額。要實現(xiàn)這一點,您可以使用一個腳本運行 quotacheck 命令;在
Quota Mini HOWTO
有一個腳本示例。quotacheck 命令還具有修復(fù)損壞的限額文件的能力;請閱讀 quotacheck(8) 手冊頁來熟悉這一點。
還要記住我前面提到的關(guān)于 quotaon 和 quotaoff 的內(nèi)容。您應(yīng)該將 quotaon 合并到引導(dǎo)腳本中以啟用限額。要在所有支持限額的文件系統(tǒng)上啟用 quota,請使用 -a 選項:
# quotaon -a
六。系統(tǒng)日志介紹 syslogd
syslog 守護程序為記錄來自運行于系統(tǒng)之上的程序的消息提供了一種成熟的客戶機-服務(wù)器機制。syslog 接收來自守護程序或程序的消息,根據(jù)優(yōu)先級和類型將該消息分類,然后根據(jù)由管理員可配置的規(guī)則將它寫入日志。結(jié)果是一個健壯而統(tǒng)一的管理日志的方法。
讀取日志
讓我們跳過一些內(nèi)容來直接研究一個 syslog 記錄的日志文件的內(nèi)容。之后我們再回過頭研究 syslog 配置。FHS(請參閱本教程系列的
第 2 部分
)要求將日志文件放在 /var/log 中。我們在這里使用 tail 命令來顯示“messages”文件中的最后 10 行:
# cd /var/log
# tail messages
Jan 12 20:17:39 bilbo init: Entering runlevel: 3
Jan 12 20:17:40 bilbo /usr/sbin/named[337]: starting BIND 9.1.3
Jan 12 20:17:40 bilbo /usr/sbin/named[337]: using 1 CPU
Jan 12 20:17:41 bilbo /usr/sbin/named[350]: loading configuration from '/etc/bind/named.conf'
Jan 12 20:17:41 bilbo /usr/sbin/named[350]: no IPv6 interfaces found
Jan 12 20:17:41 bilbo /usr/sbin/named[350]: listening on IPv4 interface lo, 127.0.0.1#53
Jan 12 20:17:41 bilbo /usr/sbin/named[350]: listening on IPv4 interface eth0, 10.0.0.1#53
Jan 12 20:17:41 bilbo /usr/sbin/named[350]: running
Jan 12 20:41:58 bilbo gnome-name-server[11288]: starting
Jan 12 20:41:58 bilbo gnome-name-server[11288]: name server starting
我們希望您能在文本處理的紛亂事件中記得 tail 命令顯示文件的最后幾行。在本示例中,我們可以看到最近在這個系統(tǒng)上啟動了名為 bilbo 的名稱服務(wù)器 named。如果我們在部署 IPv6,我們可能會注意到 named 找不到 IPv6 接口,這表明可能出現(xiàn)了問題。另外,我們可以看到最近可能有用戶已經(jīng)啟動了
GNOME
,這可以由 gnome-name-server 的存在看出。
跟蹤日志文件
有經(jīng)驗的系統(tǒng)管理員可能會使用 tail -f 以便當(dāng)日志文件的輸出出現(xiàn)時進行跟蹤:
# tail -f /var/log/messages
例如,以調(diào)試?yán)碚撋系?IPv6 問題為例,在停止和啟動 named 時在一個終端運行上述命令會立即顯示來自該守護程序的消息。這在調(diào)試時是一個有用的技術(shù)。有些管理員甚至喜歡在終端上一直運行 tail -f messages,這樣他們可以隨時關(guān)注系統(tǒng)事件。
查找日志
另一種有用的技術(shù)是使用 grep 實用程序搜索日志文件,這在本教程系列的
第 2 部分
有描述。在上述示例中,我們可以使用 grep 找到“named”行為發(fā)生改變的地方:
# grep named /var/log/messages
日志概述以下內(nèi)容概括了通常位于 /var/log 并由 syslog 維護的日志文件:- messages:來自一般系統(tǒng)程序和守護程序的信息性與錯誤消息
- secure:認(rèn)證消息與錯誤,為了額外的安全性而與“message”分隔
- maillog:與郵件相關(guān)的消息與錯誤
- cron:與 cron 相關(guān)的消息與錯誤
- spooler:UUCP 和與新聞相關(guān)的消息與錯誤
syslog.conf
事實上,現(xiàn)在是研究 syslog 配置文件 /etc/syslog.conf 的時候了。(注:如果您沒有 syslog.conf,為了獲得信息請繼續(xù)閱讀,不過您可以使用另一個 syslog 守護程序)。通過瀏覽那個文件,我們發(fā)現(xiàn)以上提到的每個常見日志文件都有項,可能還有其它項。該文件的格式為 facility.priority action,這些字段的定義如下:
facility
指定產(chǎn)生消息的子系統(tǒng)。facility 有效的關(guān)鍵字有 auth、authpriv、cron、daemon、kern、lpr、mail、news、syslog、user、uucp 以及 local0 到 local7。
priority
指定消息的最低嚴(yán)重性,即此優(yōu)先級和高于此優(yōu)先級的消息將由這個規(guī)則匹配。priority 的有效關(guān)鍵字有 debug、info、notice、warning、err、crit、alert 和 emerg。
action
action 字段可以是文件名、tty(如 /dev/console)、以 @ 為前綴的遠(yuǎn)程機器、以逗號分隔的用戶列表,或是 * 以表明向所有登錄用戶發(fā)送消息。最常見的操作是一個簡單的文件名。
重新裝入和附加信息
希望這個配置文件的概述有助于您體驗 syslog 系統(tǒng)的長處。您應(yīng)該在進行更改之前閱讀 syslog.conf(5) 手冊頁來獲得更多的信息。另外,syslogd(8) 手冊頁提供了更詳細(xì)的信息。
請注意:在對該配置文件的更改生效前,您需要向 syslog 守護程序通知所做的更改。向它發(fā)送 SIGHUP 是個正確的辦法,您可以用 killall 命令輕松地做到這一點:
# killall -HUP syslogd
安全性注釋您應(yīng)該清楚如果 syslogd 寫的日志文件還不存在的話,程序?qū)?chuàng)建它們。無論您當(dāng)前的 umask 如何設(shè)置,該文件將被創(chuàng)建為可被所有用戶讀取。如果您關(guān)心安全性,那么您應(yīng)該用 chmod 命令將該文件設(shè)置為僅 root 用戶可讀寫。此外,可以用適當(dāng)?shù)脑S可權(quán)配置 logrotate 程序(在下面描述)以創(chuàng)建新的日志文件。syslog 守護程序始終會保留現(xiàn)有日志文件的當(dāng)前屬性,因此一旦創(chuàng)建了文件,您就不需要擔(dān)心它。logrotate/var/log 中的日志文件將隨時間而變大,并有可能填滿文件系統(tǒng)。建議利用 logrotate 這樣的程序來管理日志的自動歸檔。logrotate 程序通常作為日常 cron 作業(yè)運行,并且可以配置為對日志文件執(zhí)行循環(huán)、壓縮、除去或發(fā)送電子郵件等操作。例如,logrotate 的缺省配置會每周循環(huán)日志,保留 4 周的備份日志(通過在文件名后附加序號),并且壓縮備份日志以節(jié)省空間。另外,還可以將該程序配置成將 SIGHUP 發(fā)送到 syslogd,這樣守護程序?qū)⒆⒁獾浆F(xiàn)在為空的日志文件,并會適當(dāng)?shù)亟o它們附加信息。有關(guān) logrotate 的更多信息,請參閱 logrotate(8) 手冊頁,它包含該程序的描述以及配置文件的語法。高級主題 ― klogd在結(jié)束 syslog 的討論之前,我想為渴望了解更多知識的讀者提及幾個高級主題。在您嘗試?yán)斫馀c syslog 相關(guān)的主題時,這些提示會使您免去一些麻煩。首先,syslog 守護程序?qū)嶋H上是 sysklogd 軟件包的一部分,這個軟件包有另一個守護程序,名為 klogd。klogd 的任務(wù)是接收來自內(nèi)核的信息和錯誤消息,然后將它們傳遞到 syslogd 進行分類和日志記錄。klogd 接收到的消息和您可以用 dmesg 命令獲得的消息完全相同。區(qū)別是 dmesg 打印內(nèi)核中環(huán)形緩沖區(qū)(ring buffer)的當(dāng)前內(nèi)容,而 klogd 將消息傳遞到 syslogd 使它們不會因環(huán)形緩沖區(qū)被覆蓋而丟失。高級主題 ― 替代日志記錄器其次,標(biāo)準(zhǔn) sysklogd 包有替代選項。這些替代選項試圖比 sysklogd 更有效、更易于配置,而且功能盡可能更豐富。
Syslog-ng
和
Metalog
似乎是較受歡迎的替代項中的幾個;如果您覺得 syslogd 達不到您所需的功能級別,您可以研究它們。最后,您可以在腳本中使用 logger 命令記錄消息。請參閱 logger(1) 手冊頁以獲得更多信息。七。參考資料和反饋意見本教程結(jié)束了 ... 幾乎結(jié)束了! 恭喜,您到了本教程的結(jié)尾!哦,幾乎到了。因為篇幅所限,我們沒能在最初四篇教程中包含幾個主題。所幸我們有幾個好的參考資料可以幫您很快地掌握這些主題。如果您計劃獲得 LPIC level 1 認(rèn)證,請一定要學(xué)習(xí)這些特別的教程。關(guān)于系統(tǒng)備份的重要主題,我們向您推薦有關(guān)這一主題的 IBM developerWorks Linux 專區(qū)中的教程
Linux 機器備份
。在這一教程中,您將學(xué)習(xí)如何使用名為 star 的 tar 變體來備份 Linux 系統(tǒng)。您還將學(xué)習(xí)如何使用 mt 命令來控制磁帶功能。第二個我們沒能討論的主題是時間調(diào)度。幸好
thelinuxgurus.org 上的 cron 和 at 教程
不錯。cron 和 at 用來在特定時間執(zhí)行來調(diào)度作業(yè),這對任何系統(tǒng)管理員都是重要的知識。在下一屏中,您將找到許多參考資料,您將發(fā)現(xiàn)它們可以幫助您學(xué)習(xí)有關(guān)本教程中介紹的主題的更多內(nèi)容。參考資料要找到有關(guān) Linux 下限額支持的更多內(nèi)容,請務(wù)必查看
Linux Quota mini-HOWTO
。還請務(wù)必參考您的系統(tǒng)上的 quota(1)、edquota(8)、repquota(8)、quotacheck(8) 和 quotaon(8) 手冊頁?梢栽谙旅嬲业接嘘P(guān)系統(tǒng)引導(dǎo)過程和引導(dǎo)裝入程序的其它信息: 要學(xué)習(xí)有關(guān) Linux 文件系統(tǒng)的更多內(nèi)容,請在 IBM developerWorks Linux 專區(qū)閱讀包含多個部分的高級文件系統(tǒng)實現(xiàn)者指南,其中包括: 有關(guān)分區(qū)的更多信息,請在 IBM developerWorks Linux 專區(qū)中參考以下分區(qū)技巧文章:
本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u/3984/showart_11769.html |
|