Thinking in XiaoQiang
          世人皆有悲哀,只有你不明白
          posts - 56,comments - 150,trackbacks - 0
          在 Linux 中使用磁盤和設備

          級別: 初級

          Chris Walden
          電子商務架構師, IBM Developer Relations
          2004 年 1 月

          Column iconIBM 電子商務架構師 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 -l
          
          Disk /dev/hda: 240 heads, 63 sectors, 7752 cylinders
          Units = 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/hda
          
          The 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 drive
          mkfs.ext2 /dev/hda3
          
           # Create an ext3 file system on the first
           # partition of the 2nd SCSI hard drivemkfs.ext2
          mkfs.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 fsckinfo fsck ,以及本文最后的 參考資料中都提供了詳細的資料。

          Webmin
          Webmin 有一些工具用于管理文件系統和分區。

          圖 1. Webmin 分區工具
          圖 1. Webmin 分區工具

          硬件、本地磁盤上的分區
          每一個磁盤和分區以及它們的使用情況都被顯示出來。點擊一個文件系統可以查看詳細信息。對于已卸載的分區,可以編輯它的類型,以及格式化它的文件系統。

          系統、磁盤和網絡文件系統
          裝載的和卸載的文件系統都在 /etc/fstab 中列出。普通文件系統類型有一個用于創建條目的向導。沒有識別出的文件系統類型可以在這里裝載和缷載,但是只能手工編輯 /etc/fstab。大多數服務器文件系統在這里都可以很好地處理。

          完整的體系是分區的總和
          雖然在 Linux 中對分區和文件系統的管理與 Windows 中有很多類似之處,但是從驅動器字母過渡到完全的分層樹可能還需要作一些調整。因此,有一些健壯的控制臺工具可以使用這些功能及 /etc 目錄下的配置文件。Webmin 等基于瀏覽器的前端提供了一些有用的工具。

          參考資料

          關于作者
          Chris Walden 是位于德克薩斯州奧斯汀的 IBM Developer Relations Technical Consulting(也稱為 dragonslayers )的一名電子商務架構師,該公司為 IBM 商業伙伴提供教育、實現和咨詢。他致力于 Linux 相關工作,一有機會就向身邊的人宣傳 Linux 的種種好處。除了完成他的架構師的職責之外,他還精通 Linux 基礎設施服務器的各個領域,包括混合平臺用戶環境下的文件、打印以及其他應用服務等等。Chris 有 10 年的計算機行業經驗,從現場支持到 Web 應用開發和顧問,各個領域他都曾涉足。您可以通過 cmwalden-at-us.ibm.com 與 Chris 聯系。
          posted on 2005-10-27 09:27 小強 閱讀(243) 評論(0)  編輯  收藏 所屬分類: Linux
          主站蜘蛛池模板: 洱源县| 乐平市| 枝江市| 图木舒克市| 健康| 那曲县| 广饶县| 南岸区| 土默特左旗| 宣武区| 五河县| 民县| 安溪县| 郸城县| 开化县| 光泽县| 忻州市| 精河县| 泽库县| 哈密市| 宜黄县| 营口市| 曲松县| 张家港市| 宁蒗| 九龙县| 石景山区| 荣昌县| 曲沃县| 钟山县| 平顺县| 鄢陵县| 丰宁| 闻喜县| 定南县| 德钦县| 柳林县| 乌拉特中旗| 武功县| 阜新市| 浦东新区|