Linux 磁碟與硬體管理
本文目前已不再更新,更新文章請參考 這裡
最近更新日期:2004/03/16
 
我們在前面的檔案權限介紹的章節當中,提到很多的權限與屬性的觀念,那麼接下來要瞭解的是,這些屬性是記錄在硬碟的那個地方?這裡就要特別瞭解到 Linux 檔案系統( filesystem )是如何記錄檔案,與檔案是如何被讀取的囉!而要瞭解整個檔案系統的觀念,就不能不知道硬碟的組成元件!所以,在這個章節當中,我們由最基礎的硬碟組成元件介紹起,並介紹 inode 與連結檔等基本知識,以及如何利用開機即可掛載的方式來使我們的各個 partition 可以在開機時就已經進行好掛載的動作喔!
 
認識硬碟
  :物理組成
  :磁碟分割
  :檔案系統
  :Linux 的檔案系統(inode)
  :Linux 檔案系統的運作
查看硬碟或目錄的容量df, du,
連結檔的介紹ln,
切割與格 式化硬碟fdisk, mke2fs, e2label, mknod,
檢查硬碟壞軌與資料同步化寫入fsck, badblocks, sync,
關於軟碟開機片mkbootdisk, fdformat,
各式磁區的掛載mount, 軟碟, 光碟, Windows磁區, Windows 中文磁區, 新硬碟, umount,
設定開機時即掛載的方式/etc/fstab
虛擬記憶體 Swapswap partition, swap file, dd, mkswap, swapon, swapoff,
磁碟效能hdparm,
附錄一:第二延伸檔案系統 ext2
附錄二:為何選擇 ext3 呢
本章習題練習

認識硬碟

圖三、讀取 /etc/crontab 的簡易流程示意。
整個讀取的流程大致上就是這樣,不過這裡有幾點小事情要提醒一下:



Linux 檔案系統的運作
好了,知道了 Linux 標準的 ext2 檔案系統的狀況後,再來瞭解一下那麼 Linux 系統在運作時,他是如何進行資料的存取呢?!我們知道,整個電腦主機當中,輸出輸入 (I/O) 最快速的應該是 CPU 的快取了,然後則是主記憶體,至於硬碟的存取則比前兩個慢上許多。為了讓 Linux 加快整個系統的存取效率,因此在 Linux 上面通常採取非同步處理( asynchronously )的方式。什麼是非同步呢?舉例來說:當系統讀取了某一個檔案, 則該檔案所在的 區塊資料會被載入到記憶體當中,所以該磁碟區塊就會被放置在主記憶體的緩衝快取區中,若這些區塊的資料被改變時,剛開始資料僅有主記憶體的區塊資料會被改 變,而且在緩衝區當中的區塊資料會被標記為” Dirty “,這個時候磁碟實體區塊尚未被修正!所以亦即表示,這些” Dirty “區塊的資料必需回寫到磁碟當中,以維持磁碟實體區塊上的資料與主記憶體中的區塊資料的一致性。
 
為什麼要這麼做呢?這是因為主記憶體的運作速度比起硬碟來實在是快太多了,萬一系統當中有一個檔案相當的大,而又持續性的存取,那麼由於較慢的硬碟存取速 度,將使得整個 Linux 速度被拖垮,所以才會使用非同步方式的資料處理啊!不過,也由於硬碟與主記憶體的資料可能沒有同步化,因此,如果 Linux 不正常關機( 例如跳電或者是當機 )時,則由於資料尚未回寫入磁碟當中,會導致系統在再次開機時,會花相當多的時間進行磁碟檢驗,同時也有可能造成磁碟的損毀啊!



查看硬碟或目錄的容量
瞭解了硬碟之後,接下來當然要知道我的 Linux 系統裡面還剩下多少磁碟空間囉!嗯,那麼在文字介面底下有什麼方法可以查看目前的磁碟最大容許容量、已經使用掉的容量、目前所在目錄的已使用容量?還有還 有, 怎麼知道目前目錄底下使用掉的硬碟容量呢?以及如何查詢目前的 inodes 數目?呵呵!底下我們就來談一談主要的兩個指令:
df 查看已掛載磁碟的總容量、使用容量與 inode 等等
du 查看檔案使用掉的容量有多少?

  • df

  • 語法
    [root @tsai /root ]# df -[ikm]
    參數說明:
    -i:  使用 i-nodes 顯示結果
    -k:  使用 KBytes 顯示結果
    -m:  使用 MBytes 顯示結果
    範例:
    [root @test /root ]# df -k       <==以 KB 顯示磁碟空間
    Filesystem           1k-blocks      Used Available Use% Mounted on
    /dev/hda1              2118832    904600   1106600  45% /
    /dev/hda3               497861     37525    434632   8% /disk1
    none                     31220         0     31220   0% /dev/shm
    /dev/hda5               101089      4127     91743   5% /proxy1
    /dev/hda6               101089      4127     91743   5% /proxy2
    /dev/hda2              1004052     38360    914688   5% /var
    /dev/fd0                  1423      1405        19  99% /mnt/floppy
    說明
    這是用來顯示目前磁碟空間的指令!需要注意的是,由於我們的檔案或者是外掛的磁碟都是加在『 / 』底下,所以當根目錄沒有空間的時後,嘿嘿!你的 Linux 系統大概就是掛了吧∼(說個笑話!當初 我們系上有個研究生在管理 Sun 的工作站,是別研究室的,他的硬碟明明有好幾 GB ,但是就是沒有辦法將幾 MB 的資料 copy 進去,他就去跟老闆講說機器壞了!嘿!明明才來維護過幾天而已為何會壞了!結果老闆將維護商叫來罵了 2 小時左右吧!後來,維護商發現原來硬碟的『總空間』還有很多,只是某個磁區填滿了,偏偏該研究生就是要將資料 copy 去那個磁區!呵呵!後來那個研究生就被命令『再也不許碰 Sun 主機』了∼∼)當然囉!你可以將你的資料放置在加掛的硬碟中, 那麼如何知道目前哪一個磁碟還有多少空間呢?!
     
    這裡要請大家再複習一下,我們的硬碟磁區規劃中, primary 磁區每一顆硬碟只允許 4 個,其他的就放置在 Extended 磁區中了!而,硬碟的代號與 IDE 的插槽是有關係的!如果忘記了,那就回去安裝 Linux 那一章複習一下吧!好了!假設我只有一棵硬碟,且放在 IDE 的 master ,那麼我的硬碟就是 /dev/hda 囉!而在這顆硬碟中的分割磁區就可以由 /dev/hda1 開始向上加!
     
    OK,那麼使用 df -k 之後,出現的上面的資料中,可以知道我的硬碟更分為 /dev/hda1, /dev/hda2, /dev/hda3, /dev/hda5 與 /dev/hda6 ,咦! /dev/hda4 跑去哪裡了!呵呵!其實 /dev/hda4 通常就是 Extended 磁區啦!而後面的 /dev/hda5, /dev/hda6 等磁區就是由 /dev/hda4 所切出來的!所以 /dev/hda5 + /dev/hda6 = /dev/hda4 !當然,如果還有沒有顯示出來的,例如 Swap ,則 /dev/hda4 還有可能更大呦!
    那麼來解釋一下上面的資料吧! 另外,需要注意的是,有的時後某些系統會出現 /proc 這個磁區,但是裡面的東西都是 0 ,不要緊張! /proc 的東西都是 Linux 系統所需要載入的系統資料,而且是掛載在『記憶體 當中』的,所以當然沒有佔任何的硬碟空間囉!
     

  • du

  • 語法
    [root @test /root ]# du [-abckms] [目錄名稱]
    參數說明:
    [目錄名稱] 可以省略,如果省略的話,表示要統計目前所在目錄的檔案容量
    -a   :全部的檔案與目錄都列出來!預設值是指列出目錄的值!
    -b   :列出的值以 bytes 輸出
    -c   :最後加總 total !
    -k   :列出的值以 KB 輸出
    -m  :列出的值以 MB 輸出
    -s   :只列出最後加總的值!
    範例:
    [root @test /root]# du -m    <==列出 /root 底下的目錄與檔案所佔的容量以 MB 輸出
    [root @test /root]# du -s /home <==將 /home 底下的目錄與檔案的容量加總後輸出,這裡只會輸出總容量!
    說明
    在 Windows 底下可以使用檔案總管來管理你的磁碟,在 Linux 底下也可以輕易的以 du 來知道目前磁碟的檔案容量耶!在預設的情況下,容量的輸出是以 KB 來設計的,如果你想要知道目錄佔了多少 MB ,那麼就使用 -m 這個參數即可囉!而,如果你只想要知道該目錄佔了多少容量的話,呵呵,使 用 -s 就可以啦



    連結檔的介紹:
    什麼是連結檔呢?其實連結檔有點類似 Windows 底下的『捷徑』!也就是很多的連結檔案( link file )其實都指向同一個來源檔案( source file )!不過,在所有的檔案類型當中,連結檔算是比較難理解的一部份了!因為連結檔還分成 Hard link 與 symbolic link 兩種,這兩種連結檔在架構上是完全不一樣的咚咚,底下就來好好的談一談先!
     

    Hard Link

    Symbolic Link
    相對於 hard link , Symbolic link 可就好理解多了,基本上,他就是在建立一個獨立的檔案,而這個檔案會讓資料的讀取指向他 link 的那個檔案內容!由於只是利用檔案來做為指向的動作,所以,當來源檔被刪除之後,symbolic link 的檔案會『開不了』,會一直說『無法開啟某檔案!』。這裡還是得特別留意,這個 Symbolic Link 與 Windows 的捷徑可以給他劃上等號,由 Symbolic link 所建立的檔案為一個獨立的新的檔案,所以會佔用掉 inode 與 block 喔!
    由上面的說明來看,似乎 hard link 比較安全,因為即使某一個目錄下的關連資料被殺掉了,也沒有關係,只要有任何一個目錄下存在著關連資料,那麼該檔案就不會不見!舉上面的例子來說,我的 /etc/crontab 與 /home/vbird/crontab 指向同一個檔案,如果我刪除了 /etc/crontab 這個檔案,該刪除的動作其實只是將 /etc 目錄下關於 crontab 的關連資料拿掉而已, crontab 所在的 inode 與 block 其實都沒有被變動喔!不過,不幸的是,由於 Hard Link 的限制太多了,包括無法做『目錄』的 link ,所以在用途上面是比較受限的!反而是 Symbolic Link 的使用方面較廣喔!好了,說的天花亂墜,看您也差不多快要昏倒了!沒關係,實作一下就知道怎麼回事了!要製作連結檔就必須要使用 ln 這個指令呢!
     
    語法
    [root @test /root ]# ln [-s] [來源檔] [目的檔]
    參數說明:
    -s   :提供 symbolic line 的連結!
       如果直接以 ln 不加任何參數的話,那麼就屬於 hard link 囉!
    範例:
    [root @test /root]# mkdir test
    [root @test /root]# cd test
    [root @test test]# cp /usr/bin/passwd .

    0. 原本的資訊:
    [root @test /test]# ll 
    -rw-r--r-- 1 root     root        13476 Jun 26 11:31 passwd
    [root @test /test]# du -k <==查看該目錄下的佔用硬碟空間
    20

    1. Hard Link 資訊:
    [root @test /test]# ln passwd passwd-hard
    [root @test /test]# ll
    total 32
    -rw-r--r-- 2 root     root        13476 Jun 26 11:31 passwd
    -rw-r--r-- 2 root     root        13476 Jun 26 11:31 passwd-hard
    注意看,上面那 個數字變成 2 囉!這裡說的是關連資料有兩處!
    [root @test /test]# du -k
    20  <==注意看,容量並沒有變大!因為是 link 檔案呀!

    2. Symbolic Link 資訊:
    [root @test /test]# ln -s passwd passwd-soft; ll
    -rw-r--r--    2 root     root        13476 Jun 26 11:31 passwd
    -rw-r--r--    2 root     root        13476 Jun 26 11:31 passwd-hard
    lrwxrwxrwx    1 root     root            6 Jun 26 11:37 passwd-sofe -> passwd
    注意囉!該 Symbolic Link 的檔案是有容量的呦!
    注意囉, passwd-soft 會指到另外一個檔案去,而且,最前面屬性顯示 l ,
    此外,他是一個 獨立的檔案!先殺掉 passwd 後,我們分別 more 一下內容:

    3. 用 more 來試試看是怎樣?! 
    [root @test test]# rm passwd
    rm: remove regular file `passwd'? y
    [root @test test]# more passwd-hard
    ………(正常顯 示)
    [root @test test]# more passwd-soft
    passwd-soft: No such file or directory

    說明
    要注意囉!使用 ln 如果不加任何參數的話,那麼就是 Hard Link 囉!如同上面的情況,增加了 hard link 之後,可以發現 link 那一欄屬性增加了!而如果這個時候砍掉 passwd 會發生什麼事情呢?呵呵! passwd-hard 的內容還是會跟原來 passwd 相同,但是 passwd-soft 就會找不到該檔案啦!就是這樣!瞭解了嗎?!還有,跟 cp 也不一樣呦!因為雖然 Hard Link 的檔案看起來是有容量的,但是基本上還是指向原來的檔案,所以囉,整體容量是沒有增大的啦!
     
    而如果 ln 使用 -s 的參數時,就做成差不多是 Windows 底下的『捷徑』的意思( Symbolic Link,較常用! )不過,需要特別注意的是, Linux 的 link 與 Windows 的捷徑是不一樣的東西!舉個例子說,當你在 Windows 建立一個捷徑時,你可以在這個捷徑內修改任何資料,而你的原始資料並不會跟著變!不過,當你修改 Linux 下的 link 檔案時,則更動的其實是『原始檔』,呵呵,所以不論你的這個原始檔被連結到哪裡去,只要你修改了連結檔,呵呵!原始檔就跟著變囉!以上面為例,由於你使用 -s 的參數建立一個名為 passwd-soft 的檔案,則你修改 passwd-soft 時,其內容與 passwd 完全相同,並且,當你按下儲存之後,被改變的將是 passwd 這個檔案!
     
    此外,如果你做了底下這樣的連結:
    ln –s /bin /root/bin
    那麼如果你進入 /root/bin 這個目錄下,『請注意呦!該目錄其實是 /bin 這個目錄,因為你做了連結檔了!』所以,如果你進入 /root/bin 這個剛剛建立的連結目錄,並且將其中的資料殺掉時,嗯! /bin 裡面的資料就通通不見了!這點請千萬注意!並不是 /root 底下的資料都是 root 的!還需要注意一下該屬性才行!
     
    基本上, Symbolic link 的用途比較廣,所以您要特別留意 symbolic link 的用法呢!未來一定還會常常用到的啦!



    切割與格式化硬碟:
    對於一個系統管理者 ( root ) 而言,硬碟的的管理是相當重要的一環,尤其近來硬碟已經漸漸的被當成是消耗品了.....好了,如果我們要 partition 一顆新的硬碟,要使用什麼程式來工作?而如果已經 partition 好了,又要如何來格式化呢?剛剛我們提到了 inodes 這個東西,那麼使用格式化 ( format ) 的軟體可以怎樣的來格式化好我們所需要的 inodes 的大小呢?這裡我們就來談一談囉!
    fdisk  硬碟切割 partition 的工具
    mke2fs 就是 Linux 底下重要的 format 格式化的工具
    e2label 修改硬碟的 label (表頭名稱) 的工具!
    mknod  新增硬體對應檔的工具!

    檢查硬碟與資料同步化寫入:
    現在也建立好了新的 partition 了,也 format 好了,那麼有沒有其他的關於硬碟的工作需要來進行呢?有的,就是需要怎樣來檢查硬碟有沒有壞軌呢?那個就是 fsck 這個工具的用途啦!此外,您會發現到,在 / 這個目錄底下 ( 其實只要有掛載硬碟的那個目錄底下都有這個目錄 ) 會有一個特殊的目錄,就是『 lost+found 』這個目錄啦!對的!就是當你處理完 fsck 之後,如果程式有發現到任何的錯誤的檔案,就會將該檔案的資料給他丟到這個目錄當中,嘿嘿!所以當你發現你的 Linux 目錄當中有這個檔案時,不要擔心,那個是正常的啦!而且只有掛載 partition 的目錄才會有這個預設的目錄囉
     
    還有,由於在 Linux 系統當中,為了增加系統效能,通常系統預設就是一些資料會寫在記憶體當中,並不會直接將資料寫入硬碟裡面,這是因為記憶體的速度要比硬碟快上若干倍呀!但 是有個問題就發生了,萬一系統由於『跳電』或者是其他的莫名原因,造成系統的 shutdown 時,唉呀!怎麼辦?!系統就完蛋啦!所以囉,我們需要在某些特定的時候讓資料直接回存到硬碟之中呀!了乎!這裡提供幾個慣用的指令,其中,那個 fsck 是相當重要的,請參考其用法囉!
    fsck       檢查硬碟有沒有壞軌的工具
    badblocks 跟 fsck 一樣,但是 fsck 的功能比較強,所以這個指令可以不學!
    sync 將    記憶體中的資料給他同步化寫入硬碟中

  • fsck

  • 語法
    [root @test /root ]# fsck [-Aar] [裝置名稱]
    參數說明:
    -A   :依據 /etc/fstab 的內容,將所有的裝置都掃瞄一次(通常開機過程中就會執行此一指令)
    -a   :自動修復檢查到的有問題的磁區,所以你不用一直按 y 囉!
    -r   :一定要讓使用者決定是否需要修復,這與上一個 -a 剛好相反!
    範例:
    [root @test /root]# fsck -a /dev/hda5 <==檢查 /dev/hda5 這個磁區有沒有錯誤!
    說明
    這是用來檢查與修正硬碟錯誤的指令。注意:通常只有身為 root 且你的系統有問題的時候才使用這個指令,否則在正常狀況下使用此一指令,可能會造成對檔案的危害!通常使用這個指令的場合都是在 系統出現極大的問題,導致你在 Linux 開機的時候得進入單人單機模式下進行維護的行為時,才必須使用此一指令!另外,如果你懷疑剛剛格式化成功的硬碟有問題的時後,也可以使用 fsck 來檢查一下硬碟呦!其實就有點像是 Windows 的 scandisk 啦!此外,由於 fsck 在掃瞄硬碟的時候,可能會造成部分 filesystem 的損壞,所以『要執行 fsck 的時候,請將該 partition umount 一下!』,然後再去執行!
     
    常常我們會發現,在比較老舊的機器上(例如我的 p-166),如果主機不正常的關機(例如跳電囉!),那麼硬碟很可能會出現錯誤的狀況!這個時候 Linux 就無法正常的開機!這個時候就需要輸入 root 的密碼,以登入單人維護模式(run level 1),然後下達 fsck -a /dev/hdxxx 來檢查你的硬碟!等到確認成功之後,就使用 reboot 來重新啟動吧!

  • sync

  • 語法
    [root @test /root ]# sync
    參數說明:
    例:
    [root @test /root]# sync; sync
    說明
    在正常的狀況中,由於為了增加系統的效率,因此,很多時候進行中的程式產生的程序之暫存檔案都不會直接存至磁碟機當中,而是記憶在記憶體當中!由於記憶體 的資料傳遞速度比磁碟機快了幾十倍,所以如此一來將有助於整個系統的效率!!然而這也產生了一個困擾,那就是當你的系統不正常關機的時候,可能會使得一些 已經經過改變,卻還沒有存入磁碟中的資料遺失(因為還在記憶體當中!)所以這個時候 sync 的功能就相當的大了!因為他可以直接將系統暫存在記憶體當中的資料回存寫入磁碟當中,呵呵!很棒吧!但是需要注意你的系統核心 (kernel) 必須要有支援 sync 才行(目前幾乎一定都會支援的啦!)

    關於軟碟開機片:
    嗯!搞定了上面的動作了沒?!好了,如果搞定了的話,現在我們來製作一個可以開機 的軟碟開機片好了!怎麼製作呢?呵呵!就是利用 mkbootdisk 囉!
    mkbootdisk 製作軟碟開機片
    fdformat   這是用來『低階格式化』軟碟的工具

  • mkbootdisk

  • 語法
    [root @test /root ]# mkbootdisk --device /dev/fd0 `uname -r`
    參數說明:
    --device   :後面接裝置!通常接的就是軟碟啦 /dev/fd0 !
    範例:
    [root @test /root]# mkbootdisk --device /dev/fd0 `uname -r`   <==建立可開機軟碟!!
    說明
    這是製作開機磁片的指令,其中,『 `uname -r` 』是目前 Linux 系統所使用的核心版本,如果你有多個核心版本的話,你以可以直接輸入核心版本。例如在我的系統中,舊的核心還是有保留的,所以我都會至少有兩個核心,在我 管理的某部主機中,核心為 2.4.7 及 2.4.18 ,那麼如果我要直接以 2.4.18 來開機的話,就可以使用
    mkbootdisk --device /dev/fd0 2.4.18
    建立軟碟開機片一直是個好主意!他可以在你求助無門的時候給你莫大的幫助喔!所以,建立一個新的軟碟開機片是一個好主意啦!

    各式磁區的掛載:
    要將上面我們所建立起來的硬碟或軟碟正式的在 Linux 上面啟用時,一定需要將他掛載上檔案系統!而所謂的『掛載點』則是該硬碟所在的目錄,且在該目錄下的所有目錄都歸在 該硬碟所有!假設一個情況好了,我們的 / 為 /dev/hda1 而 /home 為 /dev/hda2 ,那麼在 /home/test 底下的咚咚就也都歸 /dev/hda2 這個 partition 所有囉!而需要特別留意的是,由於掛載檔案系統需要掛載點,所以掛載的時候得先建立起掛載的目錄才行!除此之外,如果您要用來掛載的目錄裡面並不是空的, 那麼掛載了檔案系統之後,那麼原目錄下的東西就會暫時的消失。舉個例子來說,假設您的 /home 原本是屬於根目錄 / 底下的 partition 所有,底下原本就有 /home/test 與 /home/vbird 兩個目錄。然後你想要加入新的硬碟,並且直接掛載 /home 底下,那麼當您掛載上新的 partition 時,則 /home 顯示的是該 partition 的內容,至於原 先的 test 與 vbird 這兩個目錄就會暫時的被隱藏掉了!注意喔!並不是被覆蓋掉,而是 暫時的隱藏了起來,等到 partition 被 umount 之後,則該目錄的內容就會再次的跑出來啦!

    設定開機時即掛載的方式:
    剛剛上面說了許多,那麼可不可以在開機的時候就將我要的磁區都掛好呢?!這樣我就不需要每次進入 Linux 系統都還要在掛載一次呀!當然可以囉!那就直接到 /etc/fstab 裡面去修修就行囉!不過,在開始說明前,這裡要先跟大家說一說系統掛載的一些限制: 好了,那麼我們進入 /etc/fstab 看一看吧:
     
    [root @test / ]# more /etc/fstab
    # History:
    # ==================================================
    # When          Who     What
    # 2002/10/19    VBird   This file had been modified by me.
    # ==================================================
    # device        MountPoint      filesystem      parameters      dump    fsck
    /dev/hda1       /               ext3            defaults        1       1
    /dev/hda2       swap            swap            defaults        0       0
    LABEL=/backup   /backup         ext3            defaults        1       1
    none            /dev/pts        devpts          mode=0620       0       0
    none            /proc           proc           defaults        0       0
    /dev/hda3       /mnt/win98      vfat            defaults,iocharset=big5,codepage=950 0 0
     
    我這個人比較龜毛一點,因為 Mandrake 9.0 的 /etc/fstab 檔案排列方式蠻醜的,雖然每一欄之間只要以空白字元分開即可,但就是覺得醜,所以通常我就會自己排列整齊,並加上註解符號,就是 # 字號,來幫我記憶這些資訊!總共有六欄,分別來談一談吧!
    1. 磁區或標頭:就是磁區啦!不過,如果是在安裝的時候有給 予一個 label (標頭) 的話,那麼使用 label 也可以,例如上面的 LABEL=/backup 那一行。而如果是我們增加新的磁區的話,那麼這裡就必須要使用『磁區』了!例如新安裝一個硬碟在 /dev/hdd1 當中,那麼這裡就寫 /dev/hdd1 囉!那麼如果我還是想要使用 label 來掛載呢?!就使用 e2label 來建立 label name 啦!  e2label 的用法在前一章有說明,忘了的話,快去看看先!

    2.  
    3. 掛載的目錄點:就是 mount 的掛載點啦!

    4.  
    5. 該磁區的檔案格式:目前 Linux 大都使用 ext2, ext3, reiserfs 等等的,不過,如果你有使用 Windows 的檔案格式的話,那麼就可以使用 vfat 囉!目前支援的格式還有 iso9660( 光碟 ), msdos, minix, nfs, swap 等等的檔案格式;

    6.  
    7. 檔案格式參數區:這個就重要了!有哪些磁碟參數可以參考呢? 在前一章的 mount 指令裡面介紹了一些些,這裡再更詳細的提出說明如下:

    8.  
      參數
      內容意義
      async/sync
      非同步/同步
      是否允許磁碟與記憶體中的資料以同步寫入的動作?使用 async 這個非同步寫入的方式會比較快速一些。
      auto/noauto
      自動/非自動
      在開機的時候是否自動掛載該磁區?既然設定在這個區域內了,當然希望開機的時 候自動掛載囉!
      rw/ro
      可讀寫/唯讀
      讓該磁區以可讀寫或者是唯獨的型態掛載上來,如果是 vfat 之類的磁區,您不想讓 Linux 變更的話,那麼使用 ro 也不錯!能夠提供有效的保護呢!
      exec/noexec
      可執行/不可執行
      限制在此檔案系統內是否可以進行『執行』的工作?如果是純粹用來儲存資料的, 那麼可以設定為 noexec 會比較安全,相對的,會比較麻煩!
      user/nouser
      允許/不許
      是否允許使用者使用 mount 指令來掛載呢?一般而言,我們當然不希望 user 身份的人能使用 mount 囉,因為太不安全了,因此這裡應該要設定為 nouser 囉!
      suid/nosuid
      具有suid/沒有suid
      該檔案系統是否允許 SUID 的存在?一般而言,如果不是 Linux 系統的磁區,而是一般資料的 partition ,那麼設定為 nosuid 確實比較安全一些!畢竟有 SUID 是蠻可怕的一件事
      usrquota
      啟動使用者磁碟配額模式支援
      grpquota 
      啟動群組磁碟配額模式支援!
      defaults
      同時具有 rw, suid, dev, exec, auto, nouser, async 這些功能,所以預設情況中,使用這個即可!
       
      另外,如果有興趣的話,還可以加上類似『iocharset=big5,codepage=950』 這種額外的功能參數以啟動中文編碼的支援,更詳細的資料可以 man mount 搜尋呢!
       
    9. 是否可以被 dump 指令備份:這一列在說明,使用 dump 指令來備份時時,該磁區是否跟著一起動作?如果沒有數字的話則以 0 帶入!由於我們希望有備份的功能,所以這裡當然就開啟( 1 )囉!

    10.  
    11. 檢驗磁區:這個數字在用來以 fsck 檢驗磁區用的!在開機與關機的時候,通常 Linux 希望檢驗一下磁區,所以這裡需要設定一下。通常 root (就是根目錄 / 啦)需要設定為 1 ,而其他的檔案系統( filesystem )就設定為 1 即可!當然囉!由於 proc 及 swap 與 windows 並不需要以 fsck 來檢驗,所以就可以設定為 0 囉!
    所以,假如我要新增加一個 /dev/hdb1 並且掛載在 /disk2 這個目錄下的話,那麼我就在該檔案的最底加上一行:
     /dev/hdb1      /disk2         ext2    defaults      1   1
    或者我直接在這個檔案上面規劃好之後,再下達: mount -a 那麼程式就會自動的將 /etc/fstab 裡面的資訊讀出,並且依據裡面的情況來掛載磁區喔!如此一來,每次開機的時候都會自動的建立好對應的咚咚啦!
     
    有經驗的朋友大概都還蠻清楚的,就是 /etc/fstab 寫錯了的時候(最常發生在 quota 設定的時候)會造成無法開機的窘境,因此,通常我們都會把自己所想要的資料給他寫在 /etc/fstab 之後,以 mount  –a 驅動看看,此外,如果錯誤已經造成了呢?那也不要太擔心,由於錯誤造成了,所以根目錄 / 預設會變成唯讀屬性,這個時候就得要進行 remount 的工作了,亦即下達:
     mount  –n  –o  rw,remount  /
    這樣應該就可以將磁碟掛載成為可讀寫了!
     
    此外,您必須瞭解的是, /etc/fstab 寫的是您的設定檔,但是目前的系統所掛載的資訊則是記錄在 /etc/mtab 這個檔案中喔!這個檔案會即時的進行更新,如果您重新手動掛載你的檔案 系統,那麼這個 mtab 就會跟著變動囉

    虛擬記憶體 Swap:
    我們前面談了很多各式各樣的 filesystem ,不過,您曉得在安裝的時候設定的那一個『虛 擬記憶體, swap 』要如何增加嗎?舉個簡單的例子吧,我們的 Sun 主機上面,由於跑的程式太龐大了,通常 swap 需要開啟到 1GB 左右,但是呢,有的時候還是會不夠的!在 Linux 當中,如果您需要使用到很大量的虛擬記憶體,偏偏當初給的 swap 磁區不夠大,那要怎麼辦呢?有什麼方法可以來達成: 怎麼說呢?基本上,虛擬記憶體就是將硬碟規劃出一個區間,讓記憶體的資料可以經由硬碟來讀取罷了,那麼如果有 swap file 也就夠了對不對!是呀!所以這裡我們使用兩種方法來嘗試建立一下 swap 的擴增吧!
    沒錯,就這麼簡單的將虛擬記憶體給他新增囉!趕快來去試試看去!

    磁碟效能:
    我們都知道目前的 IDE 硬碟主要的傳輸模式為 ATA 模式,最近 (2002年) 已經出到了 ATA 133 了!不過,傳統上, ATA 66 就已經很厲害了!新的 IDE 硬碟也沒有辦法完全利用 ATA 100 呢!但是,你知道嗎?有沒有開啟 ATA 這個傳輸通道的 DMA 模式,對於硬碟的存取效率差很大呦!好了!我們來測試一下磁碟的效能吧!
  • hdparm

  • 語法
    [root @test /root ]# hdparm [-cdmXTt] [裝置名稱] 
    參數說明:
    -c   :提供 32 位元的存取模式,支援的型態有:
          -c0:關閉 32 位元存取模式
          -c1:開啟 32 位元存取模式
          -c3:以較為特殊的 sync 模式開啟 32 位元存取模式(建議值)
    -d   :是否啟動硬碟的 DMA 模式, 0 為關閉, 1 為開啟。
    -m   :設定 multiple sector I/O 的模式,通常預設為 16 ,建議值亦為 16 。
    -X   :設定 IDE/ATA 模式的項目,支援如下的設定:
          -X34:開啟 DMA mode 2       (ATA)
          -X66:開啟 ultra DMA mode 2 (ATA66)
    -T   :測試暫存區 cache 的存取效能
    -t   :測試硬碟的實際存取效能 (較正確!)
    例:
    [root @test /root]# hdparm -Tt /dev/hda   <==測試 hda 這顆硬碟的 cache 與實際效能
    [root @test /root]# hdparm -d0 /dev/hda<==關閉 DMA 模式!
    [root @test /root]# hdparm -d1 -c3 -X66 /dev/hda<==開啟 DMA 模式在 DMA 66 ,並且開啟 32 位元存取模式
    說明
    這個指令必須要 root 才能執行!此外,需要特別注意, -X 這個參數是很危險的參數設定,除非您非常瞭解您的硬碟架構,否則不建議自行設定,因為 manual page 上面就有說明到這一點∼∼不過,無論如何,目前大於 2GB 以上的硬碟至少都已經支援了 DMA 33 了!因此,使用 -X66 應該都是可行的!較常建議的硬碟 DMA 開啟功能項目如下:
    hdparm -d1 -X66 -m16 -c3 /dev/hda
    另外,基本上目前的 Linux 預設都是開啟 DMA 的模式,因此這個指令的功能相對的重要性就降低了!不過,有一點仍然相當的重要,就是 Linux 預設的 -c 是關閉的,亦即是 -c0 的狀態,所以你可以增加上面的 -c3 來開啟 32 位元的存取模式呦!當然了,如果你的硬碟真的是很老舊的,那麼就不要開啟的好!好了!那麼如何開機就啟動 DMA 模式呢?!你可以將上面那一段指令寫入 /etc/rc.d/rc.local 裡面即可!

    附錄一:第二延伸檔案系統 ext2
    這裡轉貼一篇關於 ext2 這個 Linux 檔案格式的主要特點:
     
    第二延伸檔案系統(ext2)介紹 (本文摘自小紅帽技術論壇
     
    自從我們開始使用電腦後,大多數的使用者都曾經使用過檔案,而我們總是對關於硬碟如何正確 地儲存檔案感到好奇,它看起來似乎非常抽象,所以今天讓我們看一看 Linux 作業系統中較新的檔案系統版本『第二延伸系統( ext2 )』,並了解它各方面之用途。 
     
    這個檔案系統是主要來自於Andrew Tanenbaum 所寫的Minix檔案系統,它也是唯一可用在免費作業系統的檔案系統,稱之為Minix。它後來修正為 Linux 所慣用的檔案系統並稱為延伸檔案系統,到現在 Linux 的檔案系統稱為 ext2 (第二延伸檔案系統),它是延伸檔案系統中較新的版本並支援存取控制列(ACL)。 
     
    但是在著手研究 ext2 檔案系統之前,讓我們先了解檔案系統中之專有名詞的關聯。 
    • Block (區塊): 檔案在磁碟中被儲存在整數固定大小的區塊中,那區塊的大小通常是2的次方。在預設中,ext2檔案系統的區塊大小是4K。研究顥示,4K位元組對於一磁碟 區塊而言是最理想的大小,假如一個檔案的大小無法達成4K位元組的倍數時,那最後的磁碟區塊部分就會被浪費。在最不好的例子中幾乎在完整的區塊中就有一位 元組被浪費掉。 
      對於這情況有一點技巧,假如我們選擇了一個較大的區塊,則對於小的檔案而言會有一些磁 碟空間被浪費掉。另外一方面,假如我們使用一個非常小的區塊,則磁碟區塊數量會成指數的增加,因此對於檔案而言需有更多的搜尋時間。所以,選擇區塊大小必 須三思而後行。 
      當一個檔案被載入到記憶體時,那磁碟區塊會被放在主記憶體中之緩衝快取區,假如它們已 經變更了,區塊在緩衝區中會被標記為’Dirty’,其意指的是這些區塊必須先寫到磁碟中來維持磁碟上的區塊及在主記憶體中的區塊之一致性. 
    • Superblock:superblock 是在每個檔案系統開始的位置,其儲存資訊像是檔案系統的大小,空的和填滿的區塊,它們各自的總數和其他諸如此類的資料。要從一個檔案系統中存取任何檔案皆 須經過檔案系統中之superblock。如果superblock損壞了,它可能無法從磁碟中去取得資料。 
  • Inode: 對於檔案系統而言一個inode是在inode表格中的一個項目。Inode包含了所有檔案有關的資訊例如名稱、大小、連接的數量、資料建立之日期,修改 及存取的時間。它也包含了磁碟區塊的檔案指向(pointer)。pointer是用來記錄檔案被儲存在何處。 

  • Ext2fs公用程式
    現在讓我們來看看一些標準Linux版本之ext2fsprogs公用程式 

    • e2fsck 

    • 這個程式允許我們在ext2檔案系統上去執行檔案系統檢查,它像是Windows中之 Scandisk一樣,但卻是一種更有效的系統檢查方式。在此,我們可以加上一個檔案名稱來檢查上面之損壞區塊。 
    警告:絕對不要在任何已掛載的檔案系統上執行 e2fsck/fsck。假如我們想要去執行 fsck,我們應該卸下檔案系統後再去執行 fsck(亦即需要 umount 該磁區囉)。如果不這樣做,可能會讓檔案系統毀損。 
    • tune2fs 

    • 這允許我們去調整檔案系統的參數設定。在此,我們可以設定在兩個檔案系統檢查間之最大 掛載總數、容量標記、錯誤行為、變更保留的資訊和許多其他參數。 
    • dumpe2fs 

    • 這個程式將ext2檔案系統狀態輸出到標準的設備上。它對於分析問題以及存取一般關於 檔案系統用法的資訊是有幫助的。 
    • mke2fs 

    • 這個程式允許我們在先前尚未格式化的磁碟中,去建立一個ext2的檔案系統。它提供了 許多的選項包含區塊的大小、段落的大小、每一個inode的位元組到多種磁碟陣列的選項。mke2fs通常在第一次安裝的期間執行,並建立完成新的 root 及其他的檔案系統。(就相當於 DOS 底下的 format 程式啦!)
    • badblocks 

    • 這個程式去搜尋磁碟並檢查區塊是否已經損壞,它通常會在新的檔案系統安裝程式前執行, 但請不要在掛載好的檔案系統上執行。 
    在Linux檔案系統中最新的版本被稱為ext3,並已有 Journaling 之支援。Journaling 檔案系統對於所有已完成的步驟,持有記錄以及檢查點,所以假使系統當機時,它可以從最後的檢查點來還原檔案系統。

    附錄二:為何選擇 ext3 呢
    在最新的 Red Hat 7.2 當中,已經捨棄了 ext2 而改用支援 Journaling 的 ext3 這一個檔案格式了,那麼這兩個咚咚有什麼不一樣的呢?!底下有一篇翻譯過的文章,看看吧!
     
    Red Hat Linux 7.2 為何決定採用ext3檔案系統? 

    Red Hat決定在7.2版中使用ext3的格式來作為預設的檔案系統在,引起相當多熟悉Linux使用者的關注,但ext3並不是唯一的,也不是眾多日誌式 (journaling)檔案系統中最佳的。

    傳統的Linux檔案系統ext2,對於在相當小容量的硬碟上之小檔案而言是相當的 理想。隨著硬碟的容量及檔案大小大幅增加,整體性能會下滑。有些原因是來自讀取未有效利用的磁碟空間,有些原因是來自不正常關機或是電源中斷檔案系統的恢 復時間。檔案系統經由e2fsck在一個1GB的硬碟做檢查是毫不費力的,但相同的測試在40GB的硬碟上可能會相當的秏費時間。所以就有日誌式檔案系統 的誕生。 

    這些記錄硬碟狀態的檔案稱為日誌。所以在不正確關機之後重新啟動需要參考到日誌檔案 來重新回復檔案系統的狀態,而非將整個硬碟做掃描。同時,日誌式檔案系統可以有更高的硬碟空間使用效率及使資料在各種不同之檔案大小中能夠快速的讀取及寫 入。 

    Linux並不是只有一個日誌式的檔案系統,它有四個,或是說成三又二分之一個:  
     

    • Reiser檔案系統: 依照Hans Reiser的名字而取。Reiser是眾所皆知的一種新式快速記錄硬碟內容的檔案系統,它曾經被廣泛的使用超過一年,且這個檔案系統被推薦安裝在 SuSE7.1版及7.2版上。 
    • JFS檔案系統:經 由IBM所開發的,其設計的理念在於提供一高速的處理能力。IBM從2000年2月間開始經過一系列的測試版本,它的1.0版本已在六月底公開發表。 
    • XFS檔案系統:XFS 是SGI公司在Linux上所開發的日誌式檔案系統,它也提供了所有以完整發展為特色的日誌式檔案系統。 
    • ext3檔案系統:ext3 是之前所提及的二分之一日誌式檔案系統。為何只有一半呢?原因是ext3是一種疊在傳統ext2檔案系統上面並保有磁碟活動紀錄的日誌式檔案系統。所以當 不正確關機時,檔案的恢復速度會比ext2檔案系統來的快。但是,因為它是被結合在ext2中,它會遭受到一些老舊系統的限制並因此不能利用所有日誌式檔 案系統的完整功能。這樣並非是完全不好,因為ext3分割區並沒有不同於ext2檔案系統,因此如ext3損毀要回到ext2檔案系統卻是非常的簡單。 
    Red Hat是第一個採用ext3的公司,它嘗試性的將Linux檔案系統推向日誌式檔案系統。當公司計畫在7.2版的第二個測試版本採用ext3時,公司中首 席核心開發者Michael K. Johnson便迅速的提供一個原理的闡述: 
    “為什麼你想要從ext2轉換到ext3呢?有四個主要的理由: 可利用性、資料完整性、速度及易於轉換”。可利用性,他指出,這意味著從系統中止到快速重新復原而不是持續的讓e2fsck執行長時間的修復。ext3的 日誌式條件可以避免資料毀損的可能。他也指出”除了寫入若干資料超過一次時,ext3往往會較快於ext2,因為ext3的日誌使硬碟讀取頭的移動能更有 效的進行“。然而或許決定的因素還是在Johnson先生的第四個理由中。
    “它是可以輕易的從ext2變更到ext3來獲得一個強而有力的 日誌式檔案系統而不需要重新做格式化”他說道。”那是正確的,為了體驗一下ext3的好處是不需要去做一種長時間的,冗長乏味的且易於產生錯誤的備份工作 及重新格式化的動作”。

    本 章習題練習 ( 要看答案請將滑鼠移動到『答:』底下的空白處,按下左鍵圈選空白處即可察看 )

    2002/07/15: 第一次完成
    2003/02/07:重新編排與 加入 FAQ
    2004/03/15:修改 inode 的說明,並且將連結檔的說明移動至這個章節當中!


    Designed by VBird during 2001-2004.  Aerosol Lab.