在 Linux 中使用磁碟和裝置
Chris Walden (cmwalden-at-us.ibm.com)
電子商務架構師, IBM Developer Relations
2004 年 1 月
IBM 電子商務架構師 Chris Walden 將通過他在 developerWorks 上發表的九篇系列文章來指導您如何在 Linux 環境中運用您的 Windows 操作技巧。在本部分,我們研究了 Linux 的分層目錄結構,以及裝載和裝置。
在 Linux 中檔案和存放裝置的使用與 Windows 中不同。雖然同樣有檔案和分層目錄結構,但是除此以外您還需要建立一種不同的思維方式。
清單 1. 目錄結構
/|-- bin|-- boot|-- dev|-- etc|-- mnt|-- opt| |-- IBM| | |-- WebSphereStudio| | `-- db2| |-- IBMHttpServer|-- root|-- sbin|-- tmp|-- usr| |-- X11R6| | |-- bin| | |-- include| | |-- lib| | |-- man| | `-- share| |-- bin| |-- dict| |-- doc| |-- etc| |-- include| |-- lib| |-- libexec| |-- local| | |-- OpenOffice| | | |-- sbin
|
沒有磁碟機字母!
在 Linux 中沒有磁碟機字母,這確實相當有用。如果您曾經在複雜的網路環境中使用過 Windows 系統,並且運行這個系統的機器帶有若干個裝置,那麼您可能會發現字母表中的字母不夠用。在 Linux 中,只有一個檔案結構。它以 root (/) 開始,所有的本地檔案系統,所有本地裝置,以及所有的遠程檔案系統都表示為這個結構中的子目錄。
當 Linux 第一次引導時,它根據 /etc/fstab 檔案中的資訊構建這個檔案結構。Windows 為硬碟分區和其他存放裝置分配磁碟機字母,而 Linux 在 root 檔案結構中為它們分配目錄。這個分層的結構是完全可配置的,並且可以動態地修改。
裝載!
將一個裝置添加到檔案系統中,術語上稱為 裝載 。Linux 會自動裝載一個 / (root) 檔案系統。也可能會有一個單獨的 /boot 檔案系統,其中存放的是核心的核心引導檔案。Linux 還將裝載一些特殊的檔案系統。交換分區並不表示為檔案系統的一部分,但是核心會處理它。不過,其他特殊的檔案系統,比如 proc,被看作是檔案系統的常規部分,可以像普通檔案一樣對它進行處理。
什麼是 /proc? /proc 檔案系統是 Windows 思想與 Linux 思想不同之處的極好樣本。 /proc 儲存的是對正在啟動並執行系統各個方面的虛擬描述。在那裡有 IRQ 設定、記憶體使用量、載入的裝置磁碟機、網路狀態等很多資訊。甚至有一個叫做 /proc/kcore 的檔案,是所有用到的系統記憶體的虛擬描述。這裡的每一個檔案都可以像普通檔案或二進位檔案一樣解析。可以編寫某些檔案來改變運行著的核心的行為,而不用重新引導。例如,為開啟系統中啟用的第一個乙太網路裝置的 IP 轉寄,您可以使用一個檔案命令: echo 1 > /proc/sys/net/ipv4/conf/eth0/forwarding
這種系統的主要好處在於,您只需要使用簡單的指令碼技術,就可以對您的正在啟動並執行系統進行深入而有效操作。 |
其他檔案系統,比如可移動的媒體或者遠程檔案系統,需要手工裝載。裝載一個檔案系統時,您需要知道在 Linux 中對它進行引用的正確方法,還需要有一個空目錄作為 裝載點。對於抽取式媒體,Linux 可能在安裝時就為您建立了裝載點。在 Red Hat Linux 中,cdrom 裝置被設定裝載到 /mnt/cdrom 目錄。也就是說,當您將一張 CD 放入 CDROM 裝置後,輸入命令:
mount /mnt/cdrom
CD 就會被添加到檔案系統中,CDROM 裝置會被鎖定以使它不會被意外彈出。只需要到 /mnt/cdrom 目錄就可以訪問 CD 中的內容。當不再使用 CD 時,您可以用下面的命令將它從檔案系統中移除:
umount /mnt/cdrom
/mnt/cdrom 目錄將變空,CDROM 裝置的鎖定被解除。您現在可以安全地彈出 CD。對其他抽取式媒體也是如此,比如軟碟機 (/mnt/floppy)。
運行不帶參數的 mount 命令會顯示出當前已裝載的檔案系統。
為什麼都需要加鎖? 不要忘記,Linux 不僅是多使用者的,而且是多會話的。也就是說幾個使用者可以同時登入到系統中、運行程式、使用資源。這與 Windows 中的登入後使用共用檔案不同。每一個使用者都可以像自己坐在控制台前一樣使用系統。為了保持穩定,Linux 不允許任意釋放當前正在使用的檔案系統,通過鎖定 CD,在直到沒有人再使用之前 CD 不會被彈出。 |
/etc/fstab 檔案
裝置與其裝載點之間的關聯關係在 /etc/fstab 中配置。這個檔案可以直接修改,也可以由管理工具來維護。下面是一個 /etc/fstab 樣本:
理解 /etc/fstab
| /dev/hda5 |
|
ext3 |
defaults |
1 1 |
| /dev/hda2 |
/boot |
ext3 |
exec,dev,duid,rw |
1 2 |
| /dev/hda6 |
swap |
swap |
defaults |
0 0 |
| /dev/scd0 |
/mnt/cdrom |
auto |
ro,noauto,exec |
0 0 |
| none |
/dev/pts |
devpts |
id=5,mode=620 |
0 0 |
| none |
/proc |
proc |
defaults |
0 0 |
| none |
/dev/shm |
tmpfs |
defaults |
0 0 |
每一行表示一個要裝載的檔案系統。第一列指出的是要裝載的裝置。第二列是裝載點,也就是裝置在檔案系統中的位置。第三列指出了檔案系統的類型。第四列是處理檔案系統的選項。最後一列是檔案系統的標誌位。第一個數字是 1 或者 0,指定系統是否應該用 dump(系統備份的一個選項)進行複製。第二個數字是 0、1 或者 2,指定了在引導時檢查檔案系統的次序。0 表示完全不檢查。1 表示要最先檢查, root (/) 檔案系統需要指定為 1。其他檔案系統應該是 2。
在上面列出的 fstab 檔案中,root 檔案系統位於第一個 IDE 硬碟的第五個分區中,這個分區是擴充分區的第一個邏輯磁碟機。/boot 檔案系統位於第一個 IDE 硬碟的第二個主要磁碟分割中,其中存放的是核心開機檔案。交換分區位於第一個 IDE 硬碟的第六個分區,也就是擴充分區的第二個邏輯磁碟機。列表中的其他檔案系統相應的裝置是“none”。我們馬上就要闡述這一問題。現在我們先來關注物理磁碟。
什麼都是檔案 在 Linux 中,檔案系統由類似於檔案的名稱來表示。在 /dev 目錄下的所有檔案都是稱為 nodes 的特殊檔案,它們通過裝置驅動程式連結到物理裝置。這就使得您可以做一些有趣的事情。例如,為製作一張 CD 的 ISO 映像,您可以使用 cp (copy) 命令: cp /dev/cdrecorder MyCD.iso
這樣複製的是一個二進位映像而不是 CD 的檔案結構。 以檔案為中心的方法還允許您可以為裝置名稱指定有意義的別名。例如,通常有一個叫做 /dev/cdrom 的別名,指向物理 CDROM 裝置,而這個裝置通常是 /dev/hdc。 一旦建立了別名,您就可以通過 /dev/cdrom 訪問那個裝置,這樣更好記。別名技術還允許您標準化指令碼,使這些指令碼可以在物理配置不同的系統上使用。 |
第四列中的選項將隨檔案系統類型而不同。在上面的例子中,/ 和 /boot 的裝載選項為“default”。也就是說,它們使用非同步 I/O 以可讀寫方式自動裝載。只有 root 可以裝載或者缷載裝置,但是使用者可以執行二進位檔案和使用“sticky bit”(稍後介紹)。檔案系統將被作為塊字元裝置來處理。然而,對 /mnt/cdrom 來說,選項就不同了。它不會被自動裝載,並且將會作為唯讀檔案系統裝載。使用者將可以在該檔案系統中執行指令碼和程式。
添加檔案系統
在 /etc/fstab 檔案中添加新的一行,您就可以將檔案系統添加到 /etc/fstab。作為一個實際的例子,我有一個 RAID 裝置,儲存的是部門所用到的檔案資源。這個裝置中只有資料檔案,並且保持與作業系統分離,這樣在出現硬體故障時可以將它轉移到另一個系統。RAID 已經配置好,在 Linux 中識別為 /dev/sdc,即第三個 SCSI 裝置。在第一個分區上建立了帶日誌的 ext3 檔案系統,這樣我們通過 /dev/sdc1 就可以訪問它。我希望在電腦引導時自動將這個 RAID 裝載到檔案系統中。
我在 /etc/fstab 中添加了如下一行:
/dev/sdc1 /data ext3 defaults 0 0
這樣在引導時 RAID 就會像 / 和 /boot 系統一樣被裝載。現在我只要再建立一個目錄作為指定的裝載點:
mkdir /data
一旦建立了這個空目錄,我們可以將檔案系統裝載到它:
mount /data
RAID 現在關聯到了 /data。如果系統被重新引導,/data 將自動裝載。
分區
在 Linux 中分區與 Windows 中本質上相同。控制台命令 fdisk 可以建立和管理分區。當您使用 fdisk 時,您必須指明它要操作哪個裝置。可使用命令 fdisk -l 來查看可用裝置。
清單 2. 使用 fdisk
[root@cmw-t30 root]# fdisk -lDisk /dev/hda: 240 heads, 63 sectors, 7752 cylindersUnits = cylinders of 15120 * 512 bytes Device Boot Start End Blocks Id System/dev/hda1 1 8 60448+ 8e Linux LVM/dev/hda2 9 15 52920 83 Linux/dev/hda3 * 16 1403 10493280 c Win95 FAT32 (LBA)/dev/hda4 1404 7751 47990880 f Win95 Ext'd (LBA)/dev/hda5 1404 5565 31464688+ 83 Linux/dev/hda6 5566 5635 529168+ 82 Linux swap/dev/hda7 5636 7751 15996928+ b Win95 FAT32
|
上面的清單來自於一台膝上型電腦,所以它顯示的結構與伺服器有些不同。它顯示了一個有若干個分區的 IDE 硬碟。如果有其他裝置,同樣也將會被列出。例如,第二個 IDE 硬碟可能會顯示為 /dev/hdb。
指定一個裝置再次運行 fdisk,您會得到一個簡短的提示。
清單 3. 對一個裝置運行 fdisk
[root@cmw-t30 root]# fdisk /dev/hdaThe number of cylinders for this disk is set to 7752.There is nothing wrong with that, but this is larger than 1024,and could in certain setups cause problems with:1) software that runs at boot time (e.g., old versions of LILO)2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK)Command (m for help):
|
輸入“m”可以查看命令菜單。您可以使用“p”來顯示當前的分區表。您可以建立、刪除和修改現有分區的類型。“l”將為您列出可用分區類型的完全列表。用“w”將您的修改寫入到分區表並退出程式,或者使用“q”不儲存修改而退出。一些修改會立即生效。有一些修改需要系統重新引導方能生效。
Linux 下的分區規則與 Windows 中相同。您可以使用 4 個主要磁碟分割,每個都可以成為擴充分區。
檔案系統類型
Linux 可以處理核心所能識別的任何檔案系統類型。相當多的類型是預設編譯到核心中的,並且可以再添加新的檔案系統。下面是一些重要的檔案系統類型:
- ext2:標準 Linux 檔案系統
- ext3:帶日誌的標準 Linux 檔案系統
- vfat:Microsoft 的 Fat32 檔案系統
- jfs:IBM 的記錄檔系統
- reiserfs:另一個流行的記錄檔系統
日誌節約時間,保全資料 記錄檔系統有助於在非正常關閉時保護資料。如果一個卷沒有缷載就被關閉,可能還遺留下未完成的工作,以及處於 in-between 狀態的檔案。在典型的檔案系統中,需要對這個卷進行全面的檢查,對較大的捲來說這需要比較長的時間。記錄檔系統會對磁碟的每一個寫操作的事務記錄保持一段時間(比如 5 秒)。當這個卷沒有被完全地缷載時,檔案系統只需要復原到最後一個已知的正常狀態。原來恢複一個卷需要 20 分鐘時間,現在只需要幾秒! |
格式化分區
分區建立完成後,用適當版本的 mkfs 命令對其進行格式化。檔案系統將有其自己版本的 mkfs ,比如 mkfs.ext2 或者 mkfs.ext3。這些助手指令碼讓您可以只需要指定分區就可以建立一個檔案系統。下面是一些例子:
清單 4. 使用 mkfs
# Create an ext2 file system on the third # parition of the first IDE hard drivemkfs.ext2 /dev/hda3 # Create an ext3 file system on the first # partition of the 2nd SCSI hard drivemkfs.ext2mkfs.ext3 /dev/sdb1 # Create a jfs file system in an extended # partition on the first IDE hard drive.mkfs.jfs /dev/hda5
|
有一些進階的參數會影響分區如何格式化,但是對通常的用途來說,使用預設的參數就可以了。一旦分區經過了格式化,它就可以裝載到 / 檔案系統中。一個檔案系統必須在被缷載後才可以重新格式化。
其他檔案系統工具
讓我們來看一看其他有用的工具。
控制台工具
有幾個工具可以查看磁碟和檔案系統的狀態。
df
df 表示“disk free”。它會報告裝載的檔案系統上已用的和可用的磁碟空間的大小。有用的開關:
檢查磁碟空間
df -h |
人類可讀的格式;以易讀的 k、M、G 而不是以位元組為單位來顯示檔案的大小 |
df -l |
僅列出本地檔案系統;預設情況下,遠程檔案系統也會被列出 |
du
du 表示“disk usage”。它會報告特定的檔案和每個子目錄 (參數中指定的目錄) 所使用的磁碟空間大小。有用的開關:
檢查磁碟使用方式
du -a |
列出所有檔案所佔的空間,而不僅是目錄 |
du -h |
人類可讀的格式;以易讀的 k、M、G 而不是以位元組為單位來顯示檔案的大小 |
du -c |
在所有的參數處理完成後輸出一個總計;可以用來得到給定的一組檔案或目錄所佔的總的磁碟空間 |
du -s |
只顯示出每個參數指定的檔案大小的總和 |
fsck
這個程式用來檢查和修複檔案系統,相當於 Windows 中的 chkdsk。如同 mkfs 一樣,對應不同的檔案系統類型它有不同的版本。 fsck 必須運行於已缷載的卷上,雖然除非是在檔案系統沒有缷載完全的時候,否則很少會用到它。 man fsck 和 info fsck,以及本文最後的 參考資料 中都提供了詳細的資料。
Webmin
Webmin 有一些工具用於管理檔案系統和分區。
圖 1. Webmin 分區工具
硬體、本地磁碟上的分區
每一個磁碟和分區以及它們的使用方式都被顯示出來。點擊一個檔案系統可以查看詳細資料。對於已卸載的分區,可以編輯它的類型,以及格式化它的檔案系統。
系統、磁碟和網路檔案系統
裝載的和卸載的檔案系統都在 /etc/fstab 中列出。普通檔案系統類型有一個用於建立條目的嚮導。沒有識別出的檔案系統類型可以在這裡裝載和缷載,但是只能手工編輯 /etc/fstab。大多數伺服器檔案系統在這裡都可以很好地處理。
完整的體系是分區的總和
雖然在 Linux 中對分區和檔案系統的管理與 Windows 中有很多類似之處,但是從磁碟機字母過渡到完全的分層樹可能還需要作一些調整。因此,有一些健壯的控制台工具可以使用這些功能及 /etc 目錄下的設定檔。Webmin 等基於瀏覽器的前端提供了一些有用的工具。
參考資料
- 閱讀 Windows 到 Linux 之旅系列文章 的其他部分( developerWorks, 2003 年 11 月)。
- Linux Partition HOWTO 深入討論了分區的機制,並詳細介紹了可用的工具。
- 雖然 Linux Administration Made Easy 是一個比較老的參考資料,不過它還是有用的,因為 Linux 通常的程式和技術仍然一致。
- Multi Disk System Tuning HOWTO 描述了 Linux 中如何最好地使用多個磁碟和分區。
- “安裝和配置 SuSE Linux Enterprise Server(SLES)8”介紹了如何安裝和配置 SuSE Linux Enterprise Server (SLES) 8,包括使用 YaST 進行圖形化配置的步驟。
- Linux System Administrator's Guide 是為新手準備的 Linux 系統管理介紹。
- developerWorks 教程 “LPI certification 101 exam prep, Part 4: Advanced administration” 中頁介紹了檔案系統、quotas 等內容。
- IBM developerWorks 系列文章 進階檔案系統實現者指南 關注的是進階主題,不過也向您介紹了 Linux 下可用的不同檔案系統。
- 通過 IBM developerWorks 文章 使虛擬檔案系統工作 來學習如何在您的代碼中使用虛擬檔案系統。
- 格式化一個新系統?請首先閱讀來自 IBM developerWorks 的兩篇文章:“Partition planning tips”和“在系統工作時調整分區”。
- IBM developerWorks 的“雙引導 Linux”一文向您介紹了如何容易地在一台機器上同時安裝 Windows 和 Linux。
- IBM developerWorks 文章“Maximum swappage”可以協助您提高 Linux 伺服器的交換分區的效能。
- Linux Loader,或者說是 LILO,已經被取代了! 閱讀 developerWorks 教程“GRUB 入門”瞭解全部情況。
- 當您學習了 IBM developerWorks 上的“在 Linux 上燒錄 CD”指導文章後,就可以在 Linux 上輕鬆燒制光碟片。
- Linux Documentation Project 的 Introduction to Linux 指導的 第 3 章 講述了檔案許可權和安全。
- Linux 使用者技術 FAQ 也可以協助您順利地從 Windows 過渡到 Linux。
- 要開始在 Linux 上使用 IBM 的軟體產品, 為您的 Linux 應用開發加油提速 將為您提供最好的參考資料。您可以找到關於 DB2、Lotus Domino、WebSphere Application Server、WebSphere Studio 等多種應用軟體的安裝提示和參考資料。您還可以登入獲得免費的 Linux Software Evaluation Kit,裡面有試用軟體和培訓資料。
- 在 developerWorks Linux 專區可以找到更多 為 Linux 開發人員準備的參考資料。
關於作者 Chris Walden 是位於德克薩斯州奧斯汀的 IBM Developer Relations Technical Consulting(也稱為 dragonslayers)的一名電子商務架構師,該公司為 IBM 商業夥伴提供教育、實現和諮詢。他致力於 Linux 相關工作,一有機會就向身邊的人宣傳 Linux 的種種好處。除了完成他的架構師的職責之外,他還精通 Linux 基礎設施伺服器的各個領域,包括混合平台使用者環境下的檔案、列印以及其他應用服務等等。Chris 有 10 年的電腦行業經驗,從現場支援到 Web 應用程式開發和顧問,各個領域他都曾涉足。您可以通過 cmwalden-at-us.ibm.com 與 Chris 聯絡。 |