Linux 基礎學習篇 - Fedora Core 4

第二十五章、 Linux 硬體偵測與維護 - for Fedora Core 4

在 Linux 系統上面偵測、維護、變更硬體的方法

最近更新時間: 2005/11/25

本文資料主要針對 Fedora Core 4 的系統進行說明, Fedora Core 1 主要是由 Red Hat Linux 9 改版而來, 這個 Red Hat Linux 9 並不是當前大家聽到的 RHEL 喔!那是在 RHEL 出現之前的產品,基本上是在 2003 年以前的作品了!Fedora Core 4 則是在 2005 年 6 月份釋出,使用的核心是 2.6.11 版,當時是很紅的一個作品!只是生命週期太短,所以用這個 Fedora 系列來介紹 Server, 當時的決定確實有點莫名其妙了...

建議您前往本站查詢最新版本的 Linux distribution 文章來閱讀,比較不會浪費時間。那為何還需要編輯 Fedora Core 4 的資料呢? 鳥哥只想要做個自己曾經撰寫過的文件內容保存而已囉! ^_^!最新文章請前往鳥站首頁查閱囉!

談完了 Linux 的系統操作,再來得要瞭解一下若您的主機硬體更換,或者是想要進行主機的溫度偵測時, 應該要怎麼作?在這個章節當中,我們會談到如何以 Linux kernel 裡面的 lm_sensor 功能, 以及利用 LVM 來製作一個大型的硬碟,讓您的 filesystem 容量更具有彈性喔! 當然啦,在 Linux 系統上面接上您的印表機,也是一個很好玩的工作喔!那就來讀一讀吧!

準備好你的硬體:

我們這個章節的主要目的在於更深入的瞭解我們 Linux 主機的硬體,並進一步的將這些硬體資訊彙整, 最好是還能夠進行一些偵測與控管啦!這樣才可以在最短的時間內瞭解我們 Linux 主機是否可能發生問題啊! 這包括主機的電壓值是否正確?主機與 CPU 溫度是否過高等等。而為了這些目的,當然啦, 我們就得要先準備好自己的 Linux 主機的硬體啊,至少得要先瞭解你的 Linux 主機是啥硬體配備啊, 否則,假如你的硬體本身就是不支援溫度偵測,那花再多時間在溫度數值的取得,嘿嘿!是沒有意義的啦! 來給他進行下去囉! ^_^

硬體資訊的收集: lspci, iostat...

還記得我們在 開機與關機流程分析 當中提到的核心功能吧? 我們的 Linux kernel 會在開機時,以核心內建的功能去偵測主機的種種硬體, 並嘗試載入適當的驅動程式 (模組, modules) 來讓硬體正確的啟動與運作。 而核心所偵測到的各項硬體裝置,後來就會被記錄在 /proc 當中了。 包括 /proc/cpuinfo, /proc/partitions, /proc/interrupts 等等。 更多的 /proc 內容介紹,先回到 程序與資源管理 那一篇去瞧一瞧先!
Tips 鳥哥 當然還是得要再提到,核心所偵測到的硬體可能並非完全正確喔! 他僅是『使用最適當的模組來驅動這個硬體』而已,所以有時候難免會誤判啦! 所以囉,如果你對於系統的穩定性是斤斤計較的,那麼或者重新編譯一次你的核心, 應該也是個不錯的主意。但是,一般來說,我們沒有很建議你一定要重新編譯核心就是了。 關於核心的編譯,瞧一瞧下個章節吧! ^_^
我們的 Linux 基本上有提供幾個簡單的指令來將核心所偵測到的硬體叫出來的~ 這包括我們之前提到的:
  • hdparm:觀察硬碟的種種資訊;
  • lspci:檢查整個系統 PCI 介面的各項裝置!很有用的指令;
  • dmesg:觀察核心運作過程當中所顯示的各項訊息記錄;
  • iostat:檢查整個 CPU 與周邊設備的 Input/Output 狀態。
無論如何,那個 lspci 真的是一個很不錯用的指令,他可以直接將 /proc 底下的關於 PCI 介面的各項資料一口氣的將他完整的呈現在你面前,可以讓您很快速的瞭解到核心所偵測到的你的主機硬體呢! 那麼就趕緊來看一看你的主機硬體配備吧! ^_^

基本上,想要知道您 Linux 主機的硬體配備,最好的方法還是直接拆開機殼去察看上面的資訊, 如果環境因素導致您無法直接拆開主機的話,那麼直接 lspci 是很棒的一的方法:

  • lspci
  • [root@linux ~]# lspci [-vvn]
    參數:
    -v  :觀察更多的 PCI 裝置的資訊;
    -vv :比 -v 還要更詳細的細部資訊;
    -n  :直接觀察 PCI 的 ID 而不是廠商名稱
    範例:
    
    範例一:查閱您系統內的 PCI 裝置:
    [root@linux ~]# lspci
    00:00.0 Host bridge: VIA Technologies, Inc. VT82C693A/694x [Apollo PRO133x] (rev c4)
    00:01.0 PCI bridge: VIA Technologies, Inc. VT82C598/694x [Apollo MVP3/Pro133x AGP]
    .....(中間省略).....
    00:0c.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)
    01:00.0 VGA compatible controller: nVidia Corporation NV17 [GeForce4 MX 440] (rev a3)
    # 不必加任何的參數,就能夠顯示出目前主機上面的各個 PCI 介面的裝置呢!
    # 從上面的資料可以看出我的顯示卡是 Nvidia 的,主機晶片則是 VIA 的,
    # 網路卡則是 Realtek 的 8139 (亦即是螃蟹卡啊!)。
    
    基本上,我們可以由 lspci 立刻得到主機上面的各項設備,如果還想要知道他所佔用的 IRQ 與 I/O port 時,可以加上『 lspci -vv 』來查閱啊!簡單得不得了吧! 另外,您會發現上表當中的每一行最前面都有一組怪怪的數字,那是什麼? 其實那就是我們的硬體偵測的數據啦!您可以對照著底下這個檔案來查閱:
    • /usr/share/hwdata/pci.ids
    那個就是 PCI 的標準 ID 與廠牌名稱的對應表啦! 此外,剛剛我們使用 lspci 時,其實所有的資料都是由 /proc/bus/pci/ 目錄下的資料所取出的呢!瞭解了吧! ^_^

  • iostat
  • 剛剛那個 lspci 找到的是目前主機上面的硬體配備,那麼整部機器的儲存設備, 主要是硬碟對吧!請問,您硬碟由開機到現在,已經存、取多少資料呢? 這個時候就得要 iostat 這個指令的幫忙了!
    [root@linux ~]# iostat [-c|-d] [-k] [-t] [間隔秒數] [偵測次數]
    參數:
    -c  :僅顯示 CPU 的狀態;
    -d  :僅顯示儲存設備的狀態,不可與 -c 一起用;
    -k  :預設顯示的是 block ,這裡可以改成 K bytes 的大小來顯示;
    -t  :顯示日期出來;
    範例:
    
    範例一:顯示一下目前整個系統的 CPU 與儲存設備的狀態
    [root@linux ~]# iostat
    Linux 2.6.12-1.1456_FC4 (localhost.localdomain)    10/27/05
    
    avg-cpu:  %user   %nice    %sys %iowait   %idle
               0.34    0.01    0.34    0.20   99.11
    
    Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
    hda               0.55         2.64         3.28    6631507    8230880
    hdb               0.21         4.52         9.10   11342022   22855752
    # 瞧!上面數據總共分為上下兩部分,上半部顯示的是 CPU 的當下資訊;
    # 下面數據則是顯示儲存裝置 /dev/hda, /dev/hdb 的相關數據,他的數據意義:
    # tps       :平均每秒鐘的傳送次數!與資料傳輸『次數』有關,非容量!
    # kB_read/s :開機到現在平均的讀取單位;
    # kB_wrtn/s :開機到現在平均的寫入單位;
    # kB_read   :開機到現在,總共讀出來的檔案單位;
    # kB_wrtn   :開機到現在,總共寫入的檔案單位;
    
    範例二:每兩秒鐘偵測一次,並且共偵測三次儲存裝置
    [root@linux ~]# iostat -d 2 3
    Linux 2.6.12-1.1456_FC4 (localhost.localdomain)    10/27/05
    
    Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
    hda               0.55         2.64         3.28    6631507    8231496
    hdb               0.21         4.51         9.10   11342022   22855752
    
    Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
    hda               0.00         0.00         0.00          0          0
    hdb               0.00         0.00         0.00          0          0
    
    Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
    hda               0.00         0.00         0.00          0          0
    hdb               0.00         0.00         0.00          0          0
    # 仔細看一下,如果是有偵測次數的情況,那麼第二次以後所顯示的資料,
    # 則代表兩次偵測之間的系統傳輸值!舉例來說,上面的資訊當中,
    # 第二次顯示的資料,則是兩秒鐘內(本案例)系統的總傳輸量與平均值。
    
    透過 lspci 及 iostat 可以約略的瞭解到目前系統的狀態啊! 還有目前的主機硬體資料呢!知道這些資訊後,我們就可以來玩一些比較不一樣的東西囉! ^_^

    驅動 USB 裝置:

    在現在的電腦裡面,你或許真的無法想像沒有 USB 介面裝置的主機~ 因為不論我們的鍵盤、滑鼠、印表機、掃描器、隨身碟等等,幾乎都是使用到 USB 來作為傳輸的介面的。 所謂這 USB (Universal Serial Bus) 最早是在 1994 年被發展出來, 到 1996 年前後發展出 version 1.0 ,當時的速度大約在 12Mbit/second, 到了 1999 年發展出 version 2.0 ,這一版的速度則提高到 480Mbit/second。

    USB 有很多的優點啦,包括他是可以延伸的,每個 USB port 都可以最多接到 127 個裝置! 速度又快,又具有 Plug and Play (隨插即用) 的優點,所以近期以來被用來作為攜帶式裝置的主要資料傳輸介面呢!

  • 關於 USB 的晶片版本:
  • 目前 USB 的控制器主要有兩種規格,分別是:
    • OHCI (Open Host Controller Interface):主要由 Compaq 所發展,包括 Compaq, SiS, ALi 等等廠商發展的晶片都是用這個模組;
    • UHCI (Universal Host Controller Interface):主要由 Intel 所發展, 包括 Intel, VIA 等等廠商發展的晶片都是使用這個模組。
    但不論是哪一種 USB 的裝置,這兩種晶片都能夠啟動並且支援的。 不過,以使用上來說, UHCI 比較容易使用,但是他的驅動程式比較複雜一些, 可能也會消耗比較多的 CPU 資源就是了。

    也就是說,基本上,如果你使用 lsmod 時,會發現到 (O|U)HCI 之類的模組時, 那就表示您的 Linux 主機已經有載入 USB 的驅動程式了啦! 這也是目前 FC4 預設載入的模組之一啊!不過,如果您的 USB 裝置比較多, 包括鍵盤、滑鼠、搖桿等等的 USB 裝置時,那麼可能還需要載入 USB Human Interface Device (HID) 模組才行呢!以鳥哥的 FC4 測試機來說,我的主機是 Intel 815 晶片的 (P-III 的 CPU), 由於沒有提供 USB 2.0 ,所以,鳥哥自己買了一張 USB 2.0 的擴充卡。然後,使用 lsmod 出現如下的畫面囉!
    [root@linux ~]# lsmod
    Module                  Size  Used by
    uhci_hcd               43345  0
    ehci_hcd               48333  0
    # 我僅列出這兩個模組而已~上面的是 UHCI 模組,底下則是 USB 增強模組。
    
    [root@linux ~]# modinfo ehci_hcd
    ....省略.....
    description:    10 Dec 2004 USB 2.0 'Enhanced' Host Controller (EHCI) Driver
    author:         David Brownell
    license:        GPL
    ....省略.....
    # 很有趣吧!說的是 Enhanced Host Controller 呢!
    
    Tips 鳥哥 事實上,更多的 USB 裝置的資訊都放置到 hotplug 這個套件裡面呢~ 你可以到 /etc/hotplug.d/ 目錄下去查閱一下相關的說明喔!
  • 啟動 USB 隨身碟:
  • 我們之前談過 USB 的磁碟代號是: /dev/sd[a-p] 之類的,類似 SCSI 硬碟的代號, 這是因為 USB 的磁碟裝置使用 SCSI 相關的裝置代號,因此,如果您要使用 USB 隨身碟的話,嘿嘿!那麼您的 Linux 主機就得要支援 SCSI 裝置才行~

    此外,為了讓 USB 磁碟裝置順利的被使用,因此,有時候還得要啟動 usb-storage 模組才行~ 所以囉,光是有 USB 的 uhci 模組還不行,還得要配合 usb-storage 啦~ 而一般 USB 的裝置都會被主動的偵測,核心也會主動的載入 USB 裝置的驅動模組, 所以您應該不需要手動載入 usb-storage 才是。不過,如果老是無法驅動時, 那麼不妨手動載入 usb-storage 試看看。

    順利載入各個需要的模組之後,直接下達 fdisk -l 應該就可以看到您的 USB 隨身碟的裝置代號才是!一般來說,如果是第一個 USB 磁碟裝置的話, 應該可以看到一個名為 /dev/sda1 的裝置,使用 mount 將他掛載起來即可啊! 詳細的掛載 (mount) 與掛載點還有檔案系統格式 (filesystem) 鳥哥在這裡就不談了, 翻翻第二篇的內容去! ^_^

  • 啟動 USB 印表機:
  • 要驅動 USB 印表機也很簡單啊! 只要做好 USB 印表機的裝置代號即可!反正我們的 usb 模組已經載入了嘛! 要建立 USB 印表機的裝置代號得使用 mknod 這個指令才行。 此外, USB 印表機裝置的 major, minor 代號分別是 180 0, 所以,建立的方法為:
    [root@linux ~]# mkdir -p /dev/usb
    [root@linux ~]# mknod /dev/usb/lp0 c 180 0
    [root@linux ~]# chown root:lp /dev/usb/lp0
    [root@linux ~]# chmod 660 /dev/usb/lp0
    [root@linux ~]# ls -l /dev/usb/lp0
    crw-rw----  1 root lp 180, 0 Nov  7 16:03 /dev/usb/lp0
    [root@linux ~]# echo "testing" > /dev/usb/lp0
    
    鳥哥這裡是以 FC4 為範例,要注意, /dev/usb/lp0 的權限必須要與 /dev/lp0 相同, 所以,我這裡還得要使用 chown 與 chmod 來變換該裝置檔案的權限才行。 建立好之後,就可以使用 cups 之類的軟體來管理這一部印表機囉! ^_^。 事實上,除了比較早期的 Linux distributions 之外,較新的 distributions 已經幫我們建立好 /dev/usb/lp0 等檔案裝置了呢!真是方便!

    在我們一般的生活當中,最常見的兩種 USB 裝置,就是隨身碟與印表機了, 所以鳥哥在這裡僅就這兩種裝置來介紹啟動的方法,如果您還有其他的 USB 裝置要驅動的話, 請參考底下這一篇的內容啊! 至於 USB 印表機的實際驅動,我們還得要繼續 CUPS 章節的內容才行喔!

    使用 lm_sensors 取得溫度、電壓等資訊

    玩電腦硬體的朋友們一定都聽過所謂的『超頻』這玩意兒,所謂的『超頻』就是讓系統原有的運作時脈增加, 讓 CPU/PCI/AGI 前端匯流排速度提升到非正規的頻率,以取得較高的電腦效能。 這在早期對於單價還是很貴的電腦來說,可以讓我們花比較少的錢去獲得比較高效能的電腦哩! 不過,超頻要注意的地方可不少,包括電壓不可高出 CPU 的負荷、CPU 風扇必須要強有力, 避免因為溫度過高導致系統當機等等。

    不過現今的電腦速度已經夠快了,我們的 Linux 主機也實在不建議您超頻, 因為整體效能可能增加不了多少,但是卻會讓您的主機壽命減少、系統不穩定呢! 而由早期超頻的『技術培養』過程當中,我們知道『CPU 的溫度、系統的相關電壓』 是影響主機是否穩定的一項重要指標喔!所以囉,如果能夠隨時掌握溫度、電壓, 其實對於系統還是有一定程度的監控啦。

    其實各大主要主機板商與晶片組,都會有溫度、壓力的偵測器在主機內, 這個我們可以在主機板操作手冊或者是在 BIOS 內的『 Monitor 』項目找到相關的溫度、壓力資料。 在 Windows 系統當中,廠商有推出相關的軟體來偵測,那麼在 Linux 當中呢?呵呵!也是有啊!那就是 lm_sensors 這套好用的東西了!

    與之前版本不同的是,FC4 已經內建了這個 lm_sensors 套件了,所以我們不需要手動去安裝他! 真是好高興啊~檢查看看您的主機是否有這個玩意兒吧!
    [root@linux ~]# rpm -qa | grep lm_sensors
    lm_sensors-2.9.1-3.FC4.2
    
    如果您的 Linux distributions 是比較早期的版本,那麼就只好請您自行前往 http://www2.lm-sensors.nu/~lm78/ 官方網站直接下載 tarball 並且安裝他囉~如果您使用的是 FC3 或 FC4 ,那麼我們就直接來處理吧!

    由於 lm_sensors 主要是依據『主機板晶片組的型號,帶入相關的模組後,再偵測其溫度、壓力』的, 如果該主機板晶片組並不是 lm_sensors 所支援的模組,那自然就無法找出該晶片組的溫壓囉~ 所以啦,我們在使用 lm_sensors 之前,必須要確定主機板是有提供溫度、電壓的, 再來,必須要載入主機板的驅動模組,然後才有辦法使用 lm_sensors 來進行偵測。

    而,好消息是, lm_sensors 本來就提供我們一個不錯的主機板晶片組偵測程式, 那就是 sensors-detect 這個指令。偵測到主機板晶片組後,將該資訊寫入設定檔當中, 就可以使用 sensors 指令直接讀取目前的 CPU、機殼、電源、風扇等等的資訊了! 直接來作看看吧!
    1. 先偵測主機板的晶片組啊!
    [root@linux ~]# sensors-detect
    # 開頭會有一些簡單的說明,看看就好!
    It is generally safe and recommended to accept the default answers to all
    questions, unless you know what you're doing.
    
     We can start with probing for (PCI) I2C or SMBus adapters.
     You do not need any special privileges for this.
     Do you want to probe now? (YES/no): y
    Probing for PCI bus adapters...
    Use driver `rivatv' for device 01:00.0: GeForce2 MX
    Use driver `i2c-viapro' for device 00:07.4: VIA Technologies VT82C686 Apollo ACPI
    Probe succesfully concluded.
    # 接下來的行為當中,反正你就一直按 Enter  就可以了!讓他自動去偵測!
    
     I will now generate the commands needed to load the I2C modules.
     Sometimes, a chip is available both through the ISA bus and an I2C bus.
     ISA bus access is faster, but you need to load an additional driver module
     for it. If you have the choice, do you want to use the ISA bus or the
     I2C/SMBus (ISA/smbus)?
    
    To make the sensors modules behave correctly, add these lines to
    /etc/modules.conf:
    
    #----cut here----
    # I2C module options
    alias char-major-89 i2c-dev
    #----cut here----
    
    To load everything that is needed, add this to some /etc/rc* file:
    
    #----cut here----
    # I2C adapter drivers
    modprobe i2c-viapro
    modprobe i2c-isa
    # I2C chip drivers
    modprobe eeprom
    modprobe via686a
    # sleep 2 # optional
    /usr/bin/sensors -s # recommended
    #----cut here----
    # 上面的關鍵是重點!告訴你要如何載入模組的一個簡單的範例啊!
    
    Do you want to generate /etc/sysconfig/lm_sensors? (YES/no):
    Copy prog/init/lm_sensors.init to /etc/rc.d/init.d/lm_sensors
    for initialization at boot time.
    
    # 如果想要確認一下 sensors-detect 偵測到的結果是否正確,
    # 可以使用 lspci 查閱一下喔!鳥哥的例子當中,是這樣的:
    [root@linux ~]# lspci
    00:00.0 Host bridge: VIA Technologies, Inc. VT82C693A/694x [Apollo PRO133x] (rev c4)
    00:01.0 PCI bridge: VIA Technologies, Inc. VT82C598/694x [Apollo MVP3/Pro133x AGP]
    00:07.0 ISA bridge: VIA Technologies, Inc. VT82C686 [Apollo Super South] (rev 22)
    # 確實找到的是 VIA 的晶片!沒有問題!
    
    
    2. 開始載入模組與修改一些設定資料檔案啊!
    [root@linux ~]# vi /etc/modprobe.conf
    alias char-major-89 i2c-dev
    # 將剛剛偵測到的模組給他寫入到這個檔案當中!這是 kernel 2.6 版的!
    # 如果是早期的 kernel 2.4 核心,那就寫到 /etc/modules.conf 當中!
    
    [root@linux ~]# vi /etc/rc.d/rc.local
    # Adding the sensor for VIA 686A Chip
    /sbin/modprobe i2c-isa
    /sbin/modprobe via686a
    sleep 2
    /usr/bin/sensors -s
    # 雖然 sensors-detect 希望我可以載入四個模組,不過,鳥哥分析的結果,
    # 發現我只要兩個模組載入即可~所以,這裡我有省去兩個 modules 的載入喔!
    # 當然啦!建議你還要看一看 /etc/sysconfig/lm_sensors 檔案的內容,就比較更清楚了!
    
    [root@linux ~]# sync; sync; reboot
    # 雖然可以直接利用上述的指令在 bash 當中直接處理,不過我不喜歡這樣,所以囉,
    # 直接給他重新啟動系統,就 OK 啦!另外,觀察一下是否開機即啟動 lm_sensors?
    [root@linux ~]# chkconfig --list | grep lm_sensors
    lm_sensors      0:off   1:off   2:on    3:on    4:on    5:on    6:off
    
    
    3. 測試偵測主機的狀況!
    [root@linux ~]# sensors
    via686a-isa-6000
    Adapter: ISA adapter
    CPU1 core: +1.73 V  (min =  +1.65 V, max =  +1.90 V)
    CPU2 core: +1.73 V  (min =  +1.65 V, max =  +1.90 V)
    I/O:       +3.42 V  (min =  +3.12 V, max =  +3.45 V)
    +5V:       +5.18 V  (min =  +4.73 V, max =  +5.20 V)
    +12V:     +12.24 V  (min = +11.35 V, max = +12.48 V)
    CPU1 Fan: 4963 RPM  (min = 3000 RPM, div = 2)
    CPU2 Fan: 5232 RPM  (min = 3000 RPM, div = 2)
    CPU1 Temp: +39.7°C  (high =   +65°C, hyst =   +55°C)
    CPU2 Temp: +40.4°C  (high =   +65°C, hyst =   +55°C)
    SBr Temp:  +23.3°C  (high =   +65°C, hyst =   +60°C)
    # 呵呵呵呵!不但可以看到溫度、電壓,還有風扇轉速,實在太完美了!
    # 咦!怎麼會是雙 CPU 啊!呵呵!因為鳥哥的主機板 (這個測試的平台) 是雙 CPU 平台,
    # 但是 lm_sensors 並沒有幫我主動的分出雙 CPU ,所以,鳥哥是自行進入設定檔,
    # 亦即是 /etc/sensors.conf 去進行修訂的工作!
    
    基本上,只要這樣的步驟,您的主機就可以主動的偵測溫度與電壓,還有風扇轉速等等資訊。 不過,事實上,由於主機板設計的不同,所以偵測的結果很有可能是有誤差的。以鳥哥的情況來說, VIA 694D 是適用雙 CPU 的主機板,但是 lm_sensors 假定則是僅有單顆 CPU 的顯示狀況, 所以,顯示的結果與實際的數據是有差異的~此時或許就需要進行調校了。 調校的步驟很簡單,先確定使用 sensors 顯示的結果每個項目代表的意義 (可以參考 BIOS 硬體偵測結果的順序來排列) ,然後進入 /etc/sensors.conf 進行修改即可。 鳥哥以自己的 via686a 這個晶片組來說明!
    [root@linux ~]# vi /etc/sensors.conf
    # 在這個檔案當中,先找到你的主機板晶片組,參考其內容喔!
    # 至於除了 chip 後面接的是晶片組外,其他的則以底下的格式來書寫的:
    # label  '實際偵測的輸出或者是代號'  '使用 lm_sensors 輸出的資訊'
    # 舉例來說,第一顆 CPU 的偵測項目其實是 "2.0V" ,那個是實際存在
    # 主機板當中的一個項目,至於後面的 CPU1 core 則是我們自己加上去的,
    # 這樣才可以在使用 sensors 時,看到輸出的結果啊!因此,
    # 那個 "2.0V" 不要動~動的是那個 "CPU1 core" 喔!
    
    chip "via686a-*"
        label "2.0V" "CPU1 core"
        label "2.5V" "CPU2 core"
        label "3.3V" "I/O"
        label "5.0V" "+5V"
        label "12V" "+12V"
        label fan1  "CPU1 Fan"
        label fan2  "CPU2 Fan"
        label temp1 "CPU1 Temp"
        label temp2 "CPU2 Temp"
        label temp3 "SBr Temp"
    
    # 至於底下的 set 則是在設定『最大、最小限制值』就是了~
    # 其中,底下那個 in0 及 in1 分別代表第一、第二個 label 的意思,亦即是
    # CPU1 core 及 CPU2 core 啦~再來,則是 temp1~3 ,
    # 注意,如果項目不是 "2.0V" 這種以雙引號取出的,則必須要使用原本的名稱,
    # 亦如 fan1, fan2 等等,這個務必瞭解才行!
        set in0_min 1.65
        set in0_max 1.90
        set in1_min 1.65
        set in1_max 1.90
        set temp1_hyst 55
        set temp1_over 65
        set temp2_hyst 55
        set temp2_over 65
        set temp3_hyst 60
        set temp3_over 65
        set fan1_min 3000
        set fan2_min 3000
    
    修改完畢之後,就可以準備準備加入更新囉~那就是使用:
    [root@linux ~]# sensors -s
    
    確定更新了這個資訊之後,再下達 sensors ,嘿嘿嘿嘿!就可以順利的取得屬於正確的資訊啦! 當然,如果想要以圖表輸出的話,那麼不妨搭配 MRTG 來進行網頁繪圖~ 這部分網路上面文章就比較多一點,也可以先參考鳥哥的一篇舊文章: 加油囉! ^_^

    FC4 的系統操作: setup 功能

    我們在基礎篇談到很多的概念問題,包括整個開機流程其實看的是 /etc/inittab 的規定項目, 每個服務啟動的 scripts 是放在 /etc/init.d/scriptname 裡面,但是啟動設定檔則可能會包含在 /etc/sysconfig 內。 舉例來說,剛剛上面提到的 lm_sensors ,他的模組名稱就放置在 /etc/sysconfig/lm_sensors 呢~ 當然,您也可以自行更改 /etc/init.d/lm_sensors 的內容,讓他不要去讀取 /etc/sysconfig/lm_sensors, 但畢竟是系統預設的狀態比較好控制啊~

    在我們瞭解到這些基本的設定資訊後,呵呵~終於可以用一下系統提供給我們的簡單的操作介面啦~ 在 Fedora 裡面,有個 Red Hat 系統總是有提供的工具,套件名稱為 setuptool , 整個執行的過程則直接下達 setup 就能夠處理哩~真是好方便吶! 有點類似視窗就是了。不過,沒有很建議您使用,因為其實直接使用指令或 vi 也可以達成 setup 所提供的功能啦! ^_^。當你以 root 的身份下達『 setup 』後,會出現這樣的咚咚:( 當然啦!您必須要安裝 setuptool 套件才行! 而且,我是使用 LANG=en_US 來進行畫面擷取的,如果您是在可以顯示中文的環境下, 可以使用 zh_TW.big5 )

    Red Hat 系統的 setup 指令
    圖、Red Hat 系統的 setup 指令

    主要的項目其實就是底下這些資料啦:
    • Authentication configuration:
      這是與使用者認證機制較有相關的設定資料, 包括認證來源的主機確認與本機資料的決定等等;

    • Firewall configuration :
      這個是關於系統的防火牆設定。一般來說,手動設定比較好,用這個東西設定, 常常會搞不懂他到底在哪些地方作了哪些事情~不容易搞定啦!

    • Keyboard configuration :
      包括鍵盤的形式與最重要的鍵盤的按鍵對應表。注意, 這個設定僅與 tty 介面有關,至於 X Window 則不是以這個為設定值。

    • Mouse configuration :
      設定滑鼠的型態的地方啦;

    • Network configuration :
      設定網路參數的地方,包括 IP, network, netmask, dns 等等,不過, 還需要看完伺服器篇關於網路基礎的介紹後,才能夠比較瞭解設定值的意義啦!

    • System services :
      其實就是使用 ntsysv 的內容喔~亦即設定一些系統服務的地方;

    • Printer configuration :
      設定印表機囉;

    • Sound card configuration :
      若您的主機上面有音效卡,這個項目才會出現!就是設定音效卡啦!
    • Timezone configuration :
      設定時區;

    • X configuration :
      設定 X-Window 相關的硬體設定!亦即是設定 X server 啦! 也可以手動修改 /etc/X11/xorg.conf 或 XF86Config 啊!
    底下我們就一個一個來介紹這玩意兒吧!並且請注意,你可以利用 <tab> 按鍵移動, 也可以利用上下按鍵移動,利用空白鍵或者是 [enter] 按鍵來決定是否需要!


  • Authentication configuration
  • 在按下了 Authentication configuration 後,會出現如下畫面:

    Setup 的認證機制部分
    圖、Setup 的認證機制部分

    關於使用者身份認證上面,Linux 提供了相當多的機制喔!包括 Linux 本機系統上面的 MD5 密碼編碼,以及利用 shadow 將密碼移動到 /etc/shadow 檔案當中等等。當然啦, 我們也可以利用網路上面的身份認證主機,包括 NIS, LDAP 以及 Windows 系統提供的認證主機等等, 只不過這些網路主機提供的服務呢,我們都得要進行用戶端連線的設定,並不是啟動就會生效的! 所以啦,我們僅有本機密碼檔案而已,當然只要選擇這兩個資料就夠了。另外, 這個設定資料主要是修改 /etc/sysconfig/authconfig 檔案哩! 你也可以自行手動修改該檔案即可。


  • Firewall configuration
  • 按下 Firewall configuration 後,會出現如下畫面:

    Setup 的防火牆部分
    圖、Setup 的防火牆部分

    注意一下,由於我們在安裝的時候,並沒有選擇防火牆,因此,這裡預設會是 (Disabled) 那一項, 如果你想要啟動防火牆,那麼就得要先選擇 Enabled 後,將游標移動到 Customize 後, 才能夠決定你想要服務項目。按下 Customize 後,會出現如下畫面:

    Setup 的防火牆部分
    圖、Setup 的防火牆部分

    這個地方不是三言兩語講的完的!包括信任網域,以及允許進入的伺服器封包~ 很是麻煩。基本上,你只要這樣想就好了:
    • Trusted Devices:這是信任網域, 如果你有兩張網路卡,一張是 eth0 對內,一張是對外,假設是 eth1 ,那麼如果你想要讓 eth0 的進出封包都是為信任,那麼這裡就可以將 eth0 勾選。不過,要非常非常注意, 接到外部網域 (Internet) 的那張網路卡,千萬不能勾選,否則就掛了!

    • MASQUERADE Devices:這個是『封包偽裝』的功能, 亦即是進行 IP 分享器的功能啦!如果你的 Linux 主機是作為類似 IP 分享器的功能, 那麼對外那張網路卡就得要啟動 MASQUERADE 才行!以上面的例子來說,就是勾選 eth1 啦!

    • Allow incoming:這裡提到的就是各個服務的內部項目, 舉例來說,你的 Linux 有提供 WWW 服務,又希望大家都能夠來查閱, 那麼這個時候就可以在 WWW 那個項目前面勾選啦!
    基本上,這個動作僅是在建立 /etc/sysconfig/iptables 這個檔案而已。 而這個檔案預設是不存在的 (因為我們沒有啟動防火牆啊!) 。 這裡你先有個概念即可,因為,我們未來會介紹以 shell script 的方式建立屬於您自己的防火牆系統, 細節我們會在伺服器篇慢慢作介紹的啊!


  • Keyboard configuration
  • 這個畫面如下:基本上,其實就是選擇鍵盤按鈕的對應表而已啦! 這個設定會修改 /etc/sysconfig/keyboard 就是了。

    Setup 的鍵盤選擇部分
    圖、Setup 的鍵盤選擇部分


  • Mouse configuration
  • 請選擇您的滑鼠類型啊!其實直接修改 /etc/sysconfig/mouse 也是可以啦!

    Setup 的滑鼠選擇部分
    圖、Setup 的滑鼠選擇部分


  • Network configuration
  • 在網路的部分,由於我們的 Linux 支援的網路連線方式眾多,而我們台灣地區比較常使用乙太網路 (Ethernet) 的架構,如果你有網路卡,那麼別懷疑,當然是選擇 Ethernet 囉~ 如下圖所示啦!

    Setup 的網路選擇部分
    圖、Setup 的網路選擇部分

    選擇完畢之後,會出現如下視窗,這個就比較麻煩了~基本上,僅有兩種格式。 第一種,你可以直接勾選『Use DHCP』那個項目,讓類似 IP 分享器自動的幫你設定好 IP; 另一種,就如同下列圖樣,不要勾選 DHCP,直接給予一個 IP 以及相關網路參數即可。 這些網路參數的設定我們會在伺服器篇再介紹的啦!

    Setup 的網路選擇部分
    圖、Setup 的網路選擇部分


  • Printer configuration
  • 這個項目在決定你的印表機類型啦!基本上,他更動的就是 FC4 提供的 CUPS 印表機佇列相關資訊~ 而且我們等一下整個設定的項目,其實都會寫入 /etc/cups/ 目錄下的許多檔案當中哩~ 這個功能對於建立印表機的動作來說,實在是相當的不錯喔! 整個動作很繁瑣,我們一個一個來說明吧!按下 printer configuration 後,出現這樣:

    Setup 的 Printer 選擇部分
    圖、Setup 的 Printer 選擇部分

    由於我們需要新增印表機,因此,當然選擇那個 new 啊~這裡請注意一下, 我們僅是作個測試而已,所以設定錯誤也沒關係的啦~我這裡假設我有一部 HP 2300 Laserjet 的印表機, 而且是接在本機上面的 USB port ,所以就進行這個動作:

    Setup 的 Printer 選擇部分
    圖、Setup 的 Printer 選擇部分

    上面的動作僅是在設定一個印表機的命名而已,那個 hp2300 是隨便自己命名的, 無所謂,但是下方那五個選項就重要了!由於我們使用的是本機裝置,因此,就得選 LOCAL 那一項才行。 如果你有特殊需求,那麼才自行設定吧!萬一是網路印表機呢?有 IP 的印表機, 那麼這裡依舊選擇 LOCAL 喔!不要搞錯了~

    接下來,按下 Next 之後,出現底下的畫面,事實上,如果 Linux 主機核心有偵測到印表機, 那麼底下畫面的中間部分就會顯示出該印表機的相關裝置項目。不過,我們是測試嘛! 當然也會偵測不到啊!因此,這裡我們要選擇 Custom 那個項目(自訂的意思)。

    Setup 的 Printer 選擇部分
    圖、Setup 的 Printer 選擇部分

    然後就是填寫印表機接在主機的那個連接埠上頭啦!我這裡假設是 USB 印表機,所以自然就是 /dev/usb/lp0 ,如果是 25 針序列埠的印表機,就填 /dev/lp0 。如果你沒有 /dev/usb/lp0 這個裝置檔案, 參考上面我們提到的 USB 的裝置建立方法吧!

    Setup 的 Printer 選擇部分
    圖、Setup 的 Printer 選擇部分

    接下來才是選擇印表機的型號啊!你可以按上下鍵,配合 enter 按鍵來選擇到你的印表機。 我們這裡使用 Postscript 列印格式來做為印表機的主要列印模式啊!

    Setup 的 Printer 選擇部分
    圖、Setup 的 Printer 選擇部分

    最後有個總結的部分,看看就好~最後就會得到一個名為 hp2300 的印表機了!

    Setup 的 Printer 選擇部分
    圖、Setup 的 Printer 選擇部分

    Setup 的 Printer 選擇部分
    圖、Setup 的 Printer 選擇部分

    最後,當你要離開印表機的設定時,他會顯示是否要儲存的動作,當然選擇『Yes』啊! 不然設定可不會被記錄下來的喔!

    Setup 的 Printer 選擇部分
    圖、Setup 的 Printer 選擇部分

    其實印表機在 Linux 上面設定是挺麻煩的,尤其是您必須要清楚的瞭解到印表機使用的模組為何? 所以,基本上,使用這個項目來設定好你的印表機,實在是一個不錯的方法。 而剛剛的動作做完後,其實會有幾個資料被更動,分別是:
    • /etc/cups/printers.conf:主要是印表機的相關設定項目;
    • /etc/cups/cupsd.conf:使用 printer 權限的設定項目;
    • /etc/cups/ppd/hp2300.ppd:就是剛剛我們選擇的印表機型號的模組。
    更多與印表機有相關的資料,我們在底下的 CUPS 章節再來討論囉~


  • System services
  • 基本上,這個就是 ntsysv 啦~這個我們已經在 認識系統服務 當中提過了,所以就不再浪費章節啦!


  • Timezone configuration
  • 時區的設定,其實就是找出與 /etc/sysconfig/clock 有關的設定項目而已。 實際上,下面圖示出現的咚咚,就是在 /usr/share/zoneinfo/ 有關而已。

    Setup 的時區選擇部分
    圖、Setup 的時區選擇部分


  • X configuration
  • 說穿了,其實就是直接設定 X Server 的設定檔,在 Xorg 就是 /etc/X11/xorg.conf 啦! 至於整個結果有沒有成功,還得要觀察 /var/log/Xorg.setup.log 這個檔案的輸出結果才能瞭解喔!

    鳥哥個人認為,這個 setup 的工具是很好用的~只是,如果能夠完全清楚整個系統架構的話, 再來玩這個小程式會比較好啦! ^_^。當然囉,印表機的工具實在很不錯~ 可以提供給您參考參考!

    利用 CUPS 架構您的印表機:

    印表機對於日常生活來說,很重要吧!呵呵~沒錯啊!尤其我們的 Linux 主機如果未來還要作為 Printer server 的話,那麼自然就得要先建立好印表機的連線啦!剛剛前一個小節我們僅是簡單的利用 setup 來建立一部不存在的印表機而已~基本上,你必須要瞭解到整個 Linux 針對列印的動作是如何, 才能夠清楚的瞭解到我們要如何管理印表機啊! ^_^


  • BIOS 當中,針對印表機的設定項目:
  • 在印表機的設定當中,鳥哥曾經發生過一件相當糗的事情,我拼了老命的設定 LPRng 以及 CUPS 就是無法設定好 Printer ,雖然已經連上印表機了,但是就是印出來都是亂碼, 很傷腦筋~等到我花了一整天去惡搞之後,最後竟然發現,錯誤的地方在於『BIOS 的平行埠設定』唉! 傷腦筋的很~還記得每次開機的時候系統都會去讀取 BIOS 的設定嗎?一般來說,按下 DEL 按鍵後,會進入 BIOS 的設定畫面,在該畫面當中,選擇相關的設定參數,與 Parallel 有關的項目,將『模組』改成 EPP/SPP 吧!這樣就可以支援您的印表機了!天吶! 就因為這個設定值,讓鳥哥花了一兩天的時間,還差一點將主機砸掉....


  • Linux printer 的列印工作之進行:
  • 在 Linux 環境下,如何開始一個列印工作呢?基本上,列印工作當然是由程式所產生的啦~ 不論是 Open Office 之類的辦公軟體,或者是直接以 lpr 來進行列印的工作,反正,總是需要有列印的指令後, 產生一些資訊,交給印表機來處理就是了。在進入印表機的實際列印之前, Linux 會先將該項列印工作放置到佇列 (queue) 當中,而每一項工作都會被分為兩個檔案, 分別是實際要列印的資料,以及該列印工作的權限啊!。 最後由 Linux 所支援的列印模式 (LPRng 或 CUPS) 來將該資料轉成印表機認識的格式後, 就可以由印表機輸出了。等到列印完畢,該工作就會被 queue 所移除。

    就是因為如此,因此,我們雖然建立了一個不存在,或者是印表機暫時無法使用的情況下, 依舊是可以使用列印軟體來列印資料的,只是該列印工作會被暫時存放在 queue 當中就是了。 另外,那個列印模式是很重要的一個概念喔! 印表機通常僅認識自己的資料格式,所以,我們必須要讓 Linux 將資料處理成印表機能夠讀取的資料格式啊! 一般來說,Linux 裡面有個很通用的列印資訊,亦即是 Postscript 列印格式, 但是您的印表機可不見得會支援這種格式。果真如此時,就得要使用所謂的濾鏡 (filter) 來處理資料成為印表機認識的格式了。

    由於 postscript 的列印比較好,因此,實在很建議您, 直接購買支援 postscript 列印格式的印表機就好了。那麼如何得知您的印表機是否支援該格式? 建議您可以前往這裡查閱一下囉: 舉例來說,我們研究室使用的是 HP Laserjet 2300 的機型,所以鳥哥選擇了上面網頁當中的 Printer list,亦即是:http://www.linuxprinting.org/printer_list.cgi ,然後選擇 『HP』與『LaserJet 2300』後,出現如下網頁的連結: http://www.linuxprinting.org/show_printer.cgi?recnum=HP-LaserJet_2300 , 在該網頁當中,他有提到 Postscript 的格式在這部印表機上面可是工作的很完美喔! 呵呵!這樣就對啦! ^_^


  • Linux Printer 的 daemon
  • Linux 管理印表機的 daemon 主要分為兩種,一種是 LPRng ,一種則是較新的 CUPS ( Common Unix Printing System )。我們這裡僅就 CUPS 來進行說明囉。

    剛剛提到,我們的列印工作是由程式達成的,例如 lpr 等指令。 而列印工作被建立後,則被放置到佇列當中等待 Linux print daemon 的分析與轉換。 這個 CUPS 的 daemon 就是在進行這個資料轉換的工作啦!

    CUPS 除了可以利用 /etc/cups/mime.types 辨識待轉換列印資料的格式之外, 他還可以使用不同的濾鏡 (filter) 來轉換格式,相關的濾鏡都放置到 /usr/lib/cups/filter/ 目錄下。 當然啦,我們提到有個 postscript 列印格式吧,是否為 postscript 格式有不同的轉換方法喔:
    • Postscript 格式
      由於 Linux 對於印表機格式最熟悉的就是 postscript 了,因此,如果是 postscript 的印表機,那麼列印資料將會被 /etc/cups/mime.conves 及 /usr/lib/cups/filter/pstops 轉換與分析頁數,然後直接交給印表機將資料輸出!

    • 非 postscript 格式
      當您的印表機對 postscript 格式並不支援時,那麼該資料便會以其他的濾鏡進行資料格式的轉換。 轉換的資料可能是 Ghostscript 格式,或者是直接以印表機的格式來直接列印。 無論如何,您還是得要瞭解一下印表機的列印格式才行啊!
    為了要讓資料變成 postscript ,好讓印表機能夠順利的列印,因此, 我們的 cups 會去參照所謂的 Postscript Printer Discription (PPD), 亦即是 postscript 的印表機描述定義資料,並且依據該定義來將資料轉換成為 postscript 的格式啊!

    事實上, CUPS 已經幫我們建立了很多 PPD 定義檔了,透過這些 PPD 檔案的描述, 我們的 CUPS 可以自行取得適用的濾鏡,不再需要像以前的 LPRng ,還得要自行測試濾鏡是否工作成功說! 這些適用的 PPD 都被放置到底下的目錄當中了:
    • /usr/share/cups/model
    但是,由於這些定義資料都可能一直在更新,因此,我們的 FC4 使用的是利用 foomatic 這個套件來輔助進行線上驅動程式的下載呢!所以啊,如果您的 Linux 沒有連接上 Internet 的話,那麼可能就無法取得最正確的印表機描述定義檔 (PPD) 了。 另外,在鳥哥看過的 Distributions 當中, SuSE server 9 就直接將整個印表機的 PPD 由 http://www.linuxprinting.org/download/PPD/ 捉下來, 呵呵!也是可以啦!所以說,如果您想要自行下載最新的列印格式定義檔案, 那就自行到 http://www.linuxprinting.org/ 去搜尋屬於您的印表機 ppd 檔案, 然後將他放置到 /usr/share/cups/model/ 當中即可!


  • CUPS 支援的連線模式
  • 在一般內部區域網路當中,較常見的印表機連結方式與分享方式有底下這幾種:
    • socket
      資料透過 internet socket(埠口)來傳送,一般為 port 9100 或 35。 如果想要進行資料的傳輸與列印,可以透過在瀏覽器上面輸入: socket://host-printer:9100/ 來進行。不過,這種模式不常用就是了。

    • LPD (Line Pritner Daemon)
      就是我們之前提到的 LPRng 所支援的主要 daemon 啦~他是較早的列印協定啊, 主要是利用序列埠來達成列印的需求,印表機名稱就是 LPT1/LPT2... 等等。 目前還是可以在比較早期的 Linux distributions 看到這種列印方式。

    • IPP (Internet Printing Protocol)
      這是目前比較流行的印表機列印協定,我們的 CUPS 預設也是支援這種協定啊! 當啟動 IPP 時,印表機會啟動 port 631 ,列印的資料就是透過這個 port 來進行傳送的。另外,如果您的印表機或者 Linux 主機啟動了 ipp 之後, 嘿嘿!你可以直接使用瀏覽器,輸入: ipp://printer_IP/printername 就能夠直接線上處理印表機的設定了!方便的很啊!

    • SMB (Standard Message Block)
      也有稱為 Server Message Block 的,那是什麼啊?說穿了,不就是網路上的芳鄰嗎? 沒錯啦!就是利用網芳提供的印表機來進行列印的意思! 協定使用的是: smb://user:password@host/printer 。
    我們 FC4 預設的 CUPS 使用的就是 IPP 這個協定說~也就是說,我們的 Linux 如果能夠順利的接上 printer 的話, 那麼他就是一部網路印表機了啦!就這麼簡單啊~那麼我們的 CUPS 預設可以支援哪些連接介面呢? 有底下這些啦:
    • parallel :平行序列埠啊,就是 25 針那種玩意兒!他是連接到 /dev/lp[0-2] 等裝置。 在 CUPS 裡面的裝置使用格式為: parallel:/dev/lp0
    • Network Printer :網路印表機,例如 HP LaserJet 2300 就內建有網路卡, 也就是說,這個印表機是具有 IP 的,那麼在 CUPS 內的使用格式為: ipp://hostname_or_ip/printername
    • USB :一般越來越常見的 USB 印表機啊! CUPS 使用的格式為: usb:/dev/usb/lp0

  • 在 FC4 下啟動 Printer
  • 在 FC4 底下要啟動印表機的話,相當的簡單啊!其實只要照著剛剛我們上面提到的 setup 指令內的 printer configuration 的步驟,一步一步的給他設定下去,就 OK 了啦~但如果你的系統並不是 FC4 的話, 怎麼辦啊?沒關係~我們可以手動來建立 CUPS 所需要的所有資料啊~ 更多的詳細資訊可以參考 cups 套件提供的 documents 或者是 man page 說~ ( rpm -ql cups ) 。

    在底下,鳥哥以我們研究室的 HP LaserJet 2300 這一部印表機作為介紹, 這部印表機本身具有網路卡,他的 IP 假定為 192.168.10.119 , 接下來,就開始來設定吧!

    1. 下載適合的 ppd 定義檔:

      前往 http://www.linuxprinting.org/printer_list.cgi 輸入印表機的型號, 然後在出現的畫面當中,選擇『Recommended driver: Postscript (Home page, custom PPD)』 裡面的那個『custom PPD』,給他點下去,將那個檔案捉到 /usr/share/cups/model 裡面去就對了! 以鳥哥的情況來看,剛剛利用我查到的網頁連結資料,可以這樣做:
      [root@linux ~]# cd /usr/share/cups/model
      [root@linux model]# wget http://www.linuxprinting.org/foomatic-db/db/
      source/PPD/HP/mono_laser/hp_LaserJet_2300.ppd
      [root@linux model]# ls -l
      -rw-r--r--  1 root root 55288 Oct 24 00:52 hp_LaserJet_2300.ppd
      
      這就是等一下我們要使用的模組。請注意,在 cups 使用的模組上面, 都是被放置到 /usr/share/cups/model 內!不要隨便擺放~因為我們後面要使用的指令, 會主動讀取這個目錄內的主要 PPD 定義檔啊!


    2. 確定 CUPS 及印表機已啟動:

      這個設定很簡單啊!這樣做就對了:
      [root@linux ~]# /etc/init.d/cups start
      [root@linux ~]# netstat -tlunp | grep 631
      tcp  0  0 127.0.0.1:631   0.0.0.0:*   LISTEN   7228/cupsd
      udp  0  0 0.0.0.0:631     0.0.0.0:*            7228/cupsd
      [root@linux ~]# nmap 192.168.10.119
      Starting nmap 3.70 ( http://www.insecure.org/nmap/ ) at 2005-11-11 14:15 CST
      Interesting ports on hp2300 (192.168.10.119):
      (The 1652 ports scanned but not shown below are in state: closed)
      PORT     STATE SERVICE
      21/tcp   open  ftp
      23/tcp   open  telnet
      80/tcp   open  http
      280/tcp  open  http-mgmt
      443/tcp  open  https
      515/tcp  open  printer
      631/tcp  open  ipp
      9100/tcp open  jetdirect
      # 嘿嘿!遠端的 Printer 確實是有提供 631 這個 port 的!
      # 假如您具有 USB 印表機的話,那麼應該就要變成這樣:
      
      [root@linux ~]# echo "Testing printer" > /dev/usb/lp0
      # 如果印表機有資料輸出,那麼就表示連線沒有問題啊!
      
      由於不同的印表機連線模式會產生不一樣的測試方法, 所以囉,如果是接在本機上面的,直接使用最簡單的資料流重導向就可以測試了! 如果是網路印表機,那就直接測試網路連線與使用 nmap 來進行測試啦~ 那個 nmap 我們會在伺服器篇在好好的談~現在只要知道他可以用來偵測某部主機的開啟的 port, 算是一個簡單的駭客軟體~所以,不要拿 nmap 來偵測別人的主機!會有司法問題喔!


    3. 開始加入印表機到 CUPS 當中:

      要加入印表機讓 CUPS 來管理,可以使用剛剛提到的 setup ,不過,這個工具似乎無法加入網路印表機的樣子! 所以,如果像鳥哥這種網路印表機的話,可能就不可以使用 setup 啦~這個時候,就使用那個好用的 lpadmin 來進行管理囉!
      1. 加入印表機到 CUPS 當中:
      [root@linux ~]# lpadmin -p [pritner佇列] -v [裝置代號] -m [model] -E
      參數:
      -p  :後面接印表機的名稱,注意,這個名稱是你自訂的,可以隨便取一個你記得住的名字
      -v  :後面接的是裝置代號,可以是本機的序列埠或者是 USB ,當然也可以是網路印表機
            序列埠    :   parallel:/dev/lp0
            USB       :   usb:/dev/usb/lp0
            網路印表機:   ipp://192.168.10.119/
      -m  :就是剛剛提到的那個 ppd 定義檔。這個檔案必須要被放置到
            /usr/share/cups/model 當中,然後以該目錄作為相對路徑來書寫檔名喔!
      -E  :作為接受 (enable) 列印工作的意思
      
      2. 設定預設或刪除印表機
      [root@linux ~]# lpadmin [-xd] [printer佇列]
      參數:
      注意, -x 與 -d 不能同時使用,另外, printer佇列 必須是已存在的印表機名稱
      -x  :刪除一個在 CUPS 管理的印表機
      -d  :若有多部印表機存在 CUPS 當中,使用 -d 可以指定一部預設的印表機。
            則當我們在列印時,忘記選擇印表機型式,則以此部預設印表機來列印。
      
      範例一:在本例中,加入一部網路印表機,我的印表機佇列填入 laserjet2300
      [root@linux ~]# lpadmin -p laserjet2300 -v \
      > ipp://192.168.10.119/ -m hp_LaserJet_2300.ppd -E
      # 那個 laserjet2300 是自己設定的,怎麼設定都沒關係啦!
      # 至於 hp_LaserJet_2300.ppd 則是我們剛剛由網站下載的檔案,
      # 注意,一定要放在 /usr/share/cups/model/ 目錄當中喔!注意注意!
      
      範例二:加入一個 usb 的印表機喔!
      [root@linux ~]# lpadmin -p laserjet2300 -v \
      > /dev/usb/lp0 -m hp_LaserJet_2300.ppd -E
      
      範例三:讓 laserjet2300 這部印表機成為預設印表機!
      [root@linux ~]# lpadmin -d laserjet2300 
      
      範例四:刪除 laserjet2300 這部印表機:
      [root@linux ~]# lpadmin -x laserjet2300 
      
      其實剛剛這個 lpadmin 的動作,只是在更新 /etc/cups/ 目錄裡面的兩個資料而已, 一個是 /etc/cups/printers.conf ,這個檔案主要是規範了印表機的相關裝置、是否接受列印工作、 印表機的佇列名稱、頁面的限制等等,反正就是整個印表機的規範就是了。 至於這個印表機相關的 PPD 檔案則是以印表機的佇列名稱連結到 /etc/cups/ppd/ 目錄下, 以上表的範例一中,我們定義出 laserjet2300 這個佇列,使用的是 hp_LaserJet_2300.ppd 這個定義檔,則你會發現, /etc/cups/ppd/laserjet2300 與 /usr/share/cups/model/hp_LaserJet_2300.ppd 是相同的喔!因為只是要作為一個佇列印表機的對應之用嘛!
      [root@linux ~]# cat /etc/cups/printers.conf
      # Printer configuration file for CUPS v1.1.22rc1
      # Written by cupsd on Fri 11 Nov 2005 02:40:01 PM CST
      <DefaultPrinter laserjet2300>
      Info laserjet2300
      DeviceURI ipp://192.168.10.119/
      State Idle
      Accepting Yes
      JobSheets none none
      QuotaPeriod 0
      PageLimit 0
      KLimit 0
      </Printer>
      # 看到否?剛剛我們使用 lpadmin ,增加的資訊都在這裡啊!
      # 重點其實是那個 DeviceURI 及 Info 這兩個玩意兒啦!重要的很!
      


    4. 開始列印測試

      我們可以使用 lp 或者是 lpr 來進行列印的工作~試看看先!
      [root@linux ~]# lpr [-E] -P [printer佇列] -# [列印份數] -U [username] file
      參數:
      -E  :是否加密的意思~一般不需要這個參數;
      -P  :如果你有兩部以上的印表機,想要在不同的印表機上面列印,
            就需要使用 -P 來選擇啊!
      -#  :如果你要一次列印多份文件,用這個 -# 加上份數就對了!
      -U  :有些印表機有限至使用者,此時就得要使用這個參數;
      範例:
      
      範例一:
      [root@linux ~]# lpr -P laserjet2300 /etc/passwd
      
      能不能列印除了 cups 的設定之外,印表機是否有設定防火牆也是有關係的喔! 鳥哥最近一次在進行測試時,不知道為了什麼,印表機突然無法接受我 Linux 端的封包要求, 鳥哥就給 Printer 整個重新開機,咦!突然又好了~ 可能是....印表機也需要休息吧?? @_@

      [root@linux ~]# lp -d [printer佇列] -n [列印份數] file
      參數:
      -d  :後面接的是印表機的佇列名稱。如果有多部印表機才需要指定;
      -n  :就是列印的份數啊!
      範例:
      
      範例一:列印出 2 份 /etc/issue 資料
      [root@linux ~]# lp -d laserjet2300 -n 2 /etc/issue
      
      如果想要瞭解整個列印的資訊,與整個印表機的狀態,可以使用底下的指令啊~
      1. 瞭解印表機的目前狀態
      [root@linux ~]# lpstat [-adprt]
      參數:
      -a  :列出目前可以接受列印工作的印表機佇列名稱;
      -d  :列出目前系統的預設印表機;
      -p  :列出每部印表機的接受工作的狀態,包含工作的 ID;
      -r  :列出目前 CUPS 是否有在運作?
      -t  :列出較為詳細的印表機資訊啊!
      範例:
      
      範例一:目前的預設印表機,與系統上面可以接受列印的印表機為:
      [root@linux ~]# lpstat -a
      laserjet2300 accepting requests since Jan 01 00:00
      [root@linux ~]# lpstat -d
      system default destination: laserjet2300
      
      範例二:列出目前系統上面所有與印表機有關的資訊?
      [root@linux ~]# lpstat -t
      scheduler is running
      system default destination: laserjet2300
      device for laserjet2300: ipp://192.168.10.119/
      laserjet2300 accepting requests since Jan 01 00:00
      printer laserjet2300 is idle.  enabled since Jan 01 00:00
              Print file accepted - job ID 3.
      
      
      2. 列印工作的觀察
      [root@linux ~]# lpq [-al]
      參數:
      -a  :列出所有印表機上面在佇列當中的工作情況;
      -l  :用其他較長格式來輸出列印的相關資訊 (擁有者與檔案大小等等)
      範例:
      
      範例三:顯示出目前所有印表機的工作佇列狀況
      [root@linux ~]# lpq -a
      Rank    Owner   Job     File(s)                         Total Size
      1st     root    3       passwd                          4096 bytes
      # 上面的意思是,有一份工作,該工作是列印出 passwd 那個檔案,
      # 這個工作的號碼是 3 號  (Job) ,該工作的建立者為 root 。
      # 這是個很重要的地方,因為該項目僅有 root 可以控制~
      # 一般身份使用者,當然不能刪除該項工作啦!
      
      
      3. 刪除在佇列當中的列印工作
      [root@linux ~]# lprm -P [printer佇列] job_id
      參數:
      -P  :後面直接指定某部印表機的某個工作號碼。注意,那個 job_id
            就是剛剛我們使用 lpq 查看到的那個 Job 的號碼啦!
      
      範例四:將剛剛的看到的那個 job 3 工作刪除!
      [root@linux ~]# lprm 3
      [root@linux ~]# lpq -a
      no entries
      # 瞧!當然不見去啦!因為工作被我刪除了嘛!
      
      4. 以 cancel 刪除在佇列當中的列印工作
      [root@linux ~]# cancel [-a] job_id
      參數:
      -a  :不論佇列裡面有多少等待列印的工作,全部移除!
      [root@linux ~]# cancel 3
      [root@linux ~]# cancel -a
      
      其實,整個 Linux 本機上面的列印資訊,到這個時候就已經完成啦! 不過,如果你還想要作額外的控制,或者是想要進行網路分享這部印表機時,嘿嘿! 還得額外的加工,作一些手腳才行喔!底下就告訴你怎麼作吧!


    5. 權限控制 (列印分享啦!)

      我們前面提到的幾個指令都可以直接在 CUPS 上面將列印的工作列印出來~ 不過,有的時候我們由於在進行印表機維護的作業,可能暫時不允許人家使用我們的印表機, 又不想讓人家發現印表機目前有問題~怎麼辦?呵呵!這個就與 disable 這個指令有關啦!
      1. 暫時關閉/啟動印表機是否開始列印(但一定都可以接受工作到佇列)
      [root@linux ~]# /usr/bin/disable [-c] [printer佇列]
      [root@linux ~]# /usr/bin/enable [printer佇列]
      參數:
      -c  :將後面接的那個印表機佇列所等待的工作,全部都刪除。一般不會加上這個參數!
      disable = cupsdisable
      enable  = cupsenable
      範例:
      
      範例一:暫時取消剛剛建立的 laserjet2300 這部印表機的列印工作
      [root@linux ~]# disable laserjet2300
      [root@linux ~]# lpstat -t
      scheduler is running
      system default destination: laserjet2300
      device for laserjet2300: ipp://192.168.10.119/
      laserjet2300 accepting requests since Jan 01 00:00
      printer laserjet2300 disabled since Jan 01 00:00 -
              Paused
      # 發現否?目前的工作是暫停的!不過, scheduler 依舊是在進行!
      # 所以,當然還可以繼續接受佇列的需求喔!讓我們來測試看看!
      
      [root@linux ~]# lpr /etc/passwd
      [root@linux ~]# lpq
      laserjet2300 is not ready
      Rank    Owner   Job     File(s)                         Total Size
      1st     root    5       passwd                          4096 bytes
      # 嘿嘿嘿嘿!是 not ready ~還沒有準備好嘛!
      [root@linux ~]# cancel 5
      
      範例二:開始重新讓 laserjet2300 可以開始列印啊!
      [root@linux ~]# /usr/bin/enable laserjet2300
      [root@linux ~]# lpstat -t
      scheduler is running
      system default destination: laserjet2300
      device for laserjet2300: ipp://192.168.10.119/
      laserjet2300 accepting requests since Jan 01 00:00
      printer laserjet2300 is idle.  enabled since Jan 01 00:00
      # 注意一下,因為 bash 本身就含有一個 enable 的內部指令,
      # 所以,建議您輸入絕對路徑來執行 enable ,或者直接改以 cupsenable 來執行!
      
      這個 cupsdisable 與 cupsenable 可以支援讓管理員擁有一段印表機維護的時間, 同時又還可以繼續接受來自使用者的列印需求,真是不錯啊!不過, 萬一我就是明確的不要接受來自使用者的列印工作呢?也就是說,我連等待的工作都不開放, 只要有列印工作需求時,就回報『不能使用』。呵呵!就是 accept/reject 的工作啦!
      2. 暫時停止/開啟印表機佇列的功能
      [root@linux ~]# reject [printer佇列]
      [root@linux ~]# accept [printer佇列]
      
      範例一:暫時關閉 laserjet2300 吧!
      [root@linux ~]# reject laserjet2300
      [root@linux ~]# lpstat -t
      scheduler is running
      system default destination: laserjet2300
      device for laserjet2300: ipp://192.168.10.119/
      laserjet2300 not accepting requests since Jan 01 00:00 -
              Rejecting Jobs
      printer laserjet2300 is idle.  enabled since Jan 01 00:00
              Rejecting Jobs
      
      [root@linux ~]# lp /etc/passwd
      lp: unable to print file: server-error-not-accepting-jobs
      # 瞭解了嗎?如此一來,連工作進入列印等待都不行喔!
      
      範例二:啟動 laserjet2300 吧!
      [root@linux ~]# accept laserjet2300
      
      很好玩吧!透過這四個小東西,我們就可以擁有一段管理維護印表機的時間啦~ ^_^

    透過這些簡單的指令,還有一些簡單的編輯動作,您的印表機就可以在 Linux 上頭順利的運作了呢! 而且還可以支援多部印表機同時存在,真是好方便啊!^_^


  • 一個簡單的練習
  • 假設你目前的 FC4 主機上面接著一台 USB 介面的印表機, 你的系統並不允許使用 setup 的 Printer configuration 設定, 這台 USB 介面的印表機是 Samsung 的 ML-1210 印表機, 請問,您可以如何在 FC4 上面安裝這部印表機?
    • 先下載 PPD 定義檔,檔名為: Samsung-ML-1210-gdi.ppd 到 /usr/share/cups/model/ 當中;
    • 加入印表機,使用下列方法:
      [root@linux ~]# lpadmin -p samsung -v usb:/dev/usb/lp0 \
      > -m Samsung-ML-1210-gdi.ppd -E
      
    • 開始給他測試練習一下:『 lp /etc/passwd 』如果有東西印出來,那就是 OK 啦!
    Tips 鳥哥 事實上,並不是所有的印表機廠商都有針對 Linux 作業系統釋出相關的驅動程式, 所以,如果您想要購買能夠讓 Linux 使用的印表機時,還是建議您先前往上面提到的 http://www.linuxprinting.org/printer_list.cgi 這個網頁進行查詢~ 比如, HP 等大廠的印表機對於 Linux 的支援度就很不錯~而如果您有舊的印表機, 例如鳥哥的 Lexmark X6150 這部機器,呵呵~那就不要想太多了~安裝上面,實在很麻煩~ @_@ 但這並不是 Linux 的問題,您可以發起一人一信,寄信給印表機開發商,讓他們重視 Linux 使用者群吧!
    另外,如果老是看到螢幕前面顯示:『 Printer not connected; will retry in 30 seconds...』, 很有可能是因為我們的裝置代號輸入錯誤,請使用『 lpstat -t 』查閱一下是否正確的設定好了? 基本上,安裝一部 Linux 有支援的印表機,真的是快速啦!


  • 利用 web 介面管理 CUPS 印表機
  • 除了使用手動的方式增加印表機之外,其實,我們還可以透過 web 介面來管理這部印表機喔! 其實是管理 CUPS 這個 daemon 啦!如果您是在 Linux 本機前面使用 X Window 的話, 那麼什麼都不必想,直接在 X Window 當中的瀏覽器輸入『 http://localhost:631 』 就可以進入管理畫面了。如果像鳥哥一樣,我的 Linux 主機都是不開 X Window 的, 那就得要作一些手腳啦!

    首先,我們必須要讓 CUPS 接受來自內部網段的 Client 端管理,假設我的內部網段是 192.168.1.0/24 ,那麼我就得要這樣做:
    1. 修改 /etc/cups/cupsd.conf 的權限控制
    [root@linux ~]# vi /etc/cups/cupsd.conf
    # 找到底下的字眼,新增特殊字體的部分!
    Port 631 <==確定一下,大約在 434 行左右,會有這個段落
    
    <Location />         <==這個大約在 773 行左右
    Order Deny,Allow
    Deny From All
    Allow From 127.0.0.1
    Allow From 192.168.1.0/24 <==加入這一行吧!
    </Location>
    
    <Location /admin>  <==這個大約是在 831 行左右。
    AuthType Digest   <==把這裡作個修改!
    AuthClass System
    Order Deny,Allow
    Deny From All
    Allow From 127.0.0.1
    Allow From 192.168.1.0/24  <==加入這一行吧!
    </Location>
    
    # 如果你曾經使用 seutp 內的 Printer configuration 設定過印表機的話,
    # 那應該會看到底下這些字眼,注意,將這些資料通通刪除!
    <Location /printers/lexmark>
    Order Deny,Allow
    Deny From All
    Allow From 127.0.0.1
    AuthType None
    </Location>
    # Lines below are automatically generated - DO NOT EDIT
    Browsing On
    BrowseProtocols cups
    BrowseOrder Deny,Allow
    BrowseAllow from @LOCAL
    Listen 127.0.0.1:631
    # 例如上面這 13 行字,全部通通刪除吧!否則會造成問題!
    
    
    2. 重新啟動 cups 吧!
    [root@linux ~]# /etc/init.d/cups restart
    
    [root@linux ~]# netstat -tlnp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address  Foreign Address State  PID/Program name
    tcp        0      0 0.0.0.0:631    0.0.0.0:*       LISTEN 28018/cupsd
    # 注意啊!您開啟的監聽網域,必須要是 0.0.0.0 才對,如果出現 127.0.0.1 ,
    # 那就表示您的 cupsd.conf 設定錯誤啦!
    
    
    3. 設定管理印表機的管理員帳號密碼
    [root@linux ~]# lppasswd [-a] [-x] [username]
    參數:
    -a  :新增一個管理印表機的帳號
    -x  :刪除該帳號
    注意,該帳號是我們可以隨意取的,不一定要在 /etc/passwd 裡面!
    
    [root@linux ~]# lppasswd -a printermaster
    Enter password:
    Enter password again:
    
    [root@linux ~]# cat /etc/cups/passwd.md5
    printermaster:sys:a22ad518d345467ae72d3eb2cf4cdcc1
    # 這就是我們利用 lppasswd 建立起來的密碼資料啊!
    
    接下來呢?呵呵!直接到區域內的任何一部電腦上面,啟動瀏覽器,直接輸入:『 http://192.168.1.2:631 』假定我的 Linux 主機為 192.168.1.2 ,那就會看到如下畫面:

    利用 CUPS 的 Web 介面管理印表機
    圖、利用 CUPS 的 Web 介面管理印表機

    共有六大選項,我們比較經常使用的應該是 Printers 以及 Administration 這兩項而已。 在按下了 Printer 項目之後,就會出現如下的畫面:

    利用 CUPS 的 Web 介面管理印表機
    圖、利用 CUPS 的 Web 介面管理印表機

    看到了嗎?剛剛我們設定成功的印表機已經在上頭啦! 而且還可以看到各部分詳細的資料,很不錯吧!如果想要進行一些額外的參數設定, 例如按下上圖當中,左下角的 Add Printer ,就會出現如下的認證視窗:

    利用 CUPS 的 Web 介面管理印表機
    圖、利用 CUPS 的 Web 介面管理印表機

    輸入剛剛我們才以 lppasswd 建立的帳號與密碼,那麼立刻就會出現如下的畫面了:

    利用 CUPS 的 Web 介面管理印表機
    圖、利用 CUPS 的 Web 介面管理印表機

    上圖的畫面其實與 setup 裡面的新增印表機過程差不多, 只是上面的畫面是以圖形介面顯示出來的而已啊! ^_^。更多的使用方式, 就有待您自己去發掘囉! ^_^

    另外,如果你老是試不出來認證的話,那麼乾脆把 /etc/cups/cupsd.conf 裡面的『AuthType 與 AuthClass』 這兩個參數關掉,如此一來,就不會要求你輸入帳號密碼,會直接讓您進入印表機管理員的管理介面喔!

    特殊的 filesystem: LVM

    在第二篇的內容裡面,我們主要談到了磁碟檔案系統,也曉得了,如果在安裝初期, 沒有做好整個硬碟的規劃時,那麼未來要新增磁碟空間,會很麻煩~~不過,這個問題在 LVM 面前, 似乎影響就不大了!為什麼呢?因為 LVM 可以整合多個實體 partition 在一起, 讓這些 partitions 看起來就像是一個磁碟一樣!而且,還可以在未來新增其他的實體 partition 到這個 LVM 管理的磁碟當中。 如此一來,整個磁碟空間的使用上,實在是相當的具有彈性啊!

    什麼是 LVM: PV, PE, VG, LV

    既然要玩 LVM 的話,那就得對 LVM 有點瞭解才行啊!事實上, LVM 其實就是將幾個實體的 partitions 透過軟體組合成一塊看起來像是獨立的大磁碟,而要用這塊大磁碟,就得要再將他分割成為可以使用的 partition 才行!而我們知道每個 partition 上面的 filesystem 因為 block 大小的不同而有限制, 同樣的, LVM 的大磁碟大小也是有限制的,主要是一個稱為 PE 的咚咚。我們先來作一些簡單的解釋吧!
    • Physical Volume, 簡稱 PV:
      這個就是實體磁碟啦!我們必須要將原本的磁碟,例如 /dev/hda5, /dev/hda6 等等的 partition ,利用 fdisk 等軟體,將他們的 ID 改為 LVM (8e) ,並且修改磁碟的相關資訊, 讓他成為 LVM 可以使用的磁碟才行。什麼是 ID 啊?還記得使用 fdisk -l 看到的資料吧? ID 83 是 Linux 的 partition , 82 則是 Swap 的代號!這樣瞭了吧? 一塊磁碟變成 PV 後, LVM 才能夠利用該 partition 喔!重要重要!

    • Volume Group, 簡稱 VG:
      其實我們 LVM 主要的目的就是要建立這個 VG 啦!他主要就是將剛剛的一個或多個 PV 組合成為一個大磁碟~這個大磁碟可以作為後續的分割之用喔! 那麼這個大磁碟的容量最大可到多大呢?最大容量的值與底下的 PE 有關, 如果完全使用 LVM 的預設參數時,那麼一個最大的 LVM 磁碟可達到 256 GBytes。

    • Physical Extend, 簡稱 PE:
      在建立 VG 的時候,我們同時需要指定 PE 這個數值!如果不指定的話,他預設是 4MB 的大小。 當 PE 為 4MB 時, VG 最大的容量就是 256 GBytes 啦!那麼這個 PE 是什麼玩意兒?? 我們在 磁碟檔案系統 那個章節當中提到的 inode, block 與 filesystem 大小的相關性當中, 有提到在 ext2/ext3 檔案系統的格式化過程中,不同的 block 大小將會影響到整個 filesystem 大小的支援度。那這個 PE 其實就有點像是 VG 的 block 啦! 所以他的大小將會影響到 VG 的最大值喔!如果你想要讓你的 VG 大於預設的 256 GB 時, 記得要修改這個數值!(其實,一個 VG 最大可以容許 65534 個 PE , 所以,修改 PE 值,當然就會影響到最大的 VG 容量啦! )

    • Logical Volume, 簡稱 LV:
      這個 LV 就是最後被掛載到檔案系統的 partition 囉~這個 LV 是由 VG 分割來的啦~ 他會建立一個裝置代號,例如 /dev/vgname/lvname 在您的系統當中啊!
    透過 PV, VG, LV 的規劃之後,再利用 mkfs (mke2fs -j) 等等就可以將您的多個 partition 整合成為一個大磁碟, 再利用這個大磁碟來分割與格式化,就 OK 的啦!而且,這個大磁碟可以進行增加、減少容量的變化, 也就是說,這個 VG 大磁碟可以抽換 PV 哩!並且原有的資料,理論上,並不會被影響喔!是否很棒啊! 整個 LVM 的處理流程與各元件之間的相關性,我們直接以下圖來看看吧!

    LVM 各元件之間的相關性
    圖、LVM 各元件之間的相關性

    如此一來,我們就可以利用 LV 這個玩意兒來進行系統的掛載了。不過,您應該會覺得奇怪的是, 那麼我的資料寫入這個 LV 時,到底他是怎麼寫入硬碟當中的? 呵呵!好問題~其實,依據寫入機制的不同,而有兩種方式:
    • 線性模式 (linear):假如我將 /dev/hda1, /dev/hdb1 這兩個 partition 加入到 VG 當中,並且整個 VG 只有一個 LV 時,那麼所謂的線性模式就是:當 /dev/hda1 的容量用完之後, /dev/hdb1 的硬碟才會被使用到。

    • 交錯模式 (triped):那什麼是交錯模式?很簡單啊,就是我將一筆資料拆成兩部分, 分別寫入 /dev/hda1 與 /dev/hdb1 的意思。如此一來,一份資料用兩顆硬碟來寫入, 理論上,讀寫的效能會比較好。
    基本上,LVM 最主要的用處是在製造產生一個大磁碟, 而不是在建立一個效能為主的磁碟上,所以,我們應該利用的是 LVM 可以彈性管理整個 partition 大小的用途上,而不是著眼在效能上的。因此, LVM 預設的讀寫模式是線性模式啦! 如果您使用 triped 模式,要注意,當任何一個 partition 『歸天』時,所有的資料都會『損毀』的! 所以啦,不是很適合使用這種模式啦!如果要強調效能與備份,那麼就直接使用 RAID 即可, 不需要用到 LVM 啊!這樣說,應該可以接受吧!

    總之,鳥哥認為,整個 LVM 最大的用途即是在彈性管理磁碟的容量,讓你的磁碟可以隨時放大或縮小, 方便您將剩餘的磁碟空間作一個較為良好的應用!

    製作一個可使用的 LVM 磁碟流程

    要讓你的 Linux 使用 LVM 的功能,除了核心必須要有支援之外, 你也必須要安裝 lvm2 這個套件才行啊!好在, FC4 與其他較新的 distributions 目前的預設核心都有支援 LVM 的,這個就不需要擔心了~呵呵。另外, lvm2 似乎也是預設安裝的, 也不需要擔心!真是好棒啊! ^_^

    整個 LVM 的製作流程,就跟我們上個小節提到的那張圖一樣,先製作 PV,再產生 VG, 最後分割出 LV 後,就可以格式化與掛載囉!OK!那我們底下就一步一步來實作看看吧! 先說明一下鳥哥的環境,我的環境是 FC4 ,有一個 30 GB 的硬碟放在 /dev/hdb , 這顆硬碟原本就已經被分割成為三個 partition ,分別為 /dev/hdb1, /dev/hdb2, /dev/hdb3, 各大約有 10GB 左右的容量。如果查閱一下系統,他會這樣顯示:
    [root@linux ~]# fdisk -l /dev/hdb
    Disk /dev/hdb: 30.7 GB, 30738677760 bytes
    16 heads, 63 sectors/track, 59560 cylinders
    Units = cylinders of 1008 * 512 = 516096 bytes
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/hdb1               1       19377     9765976+  83  Linux
    /dev/hdb2           19378       38754     9766008   83  Linux
    /dev/hdb3           38755       59560    10486224   83  Linux
    
    現在,我想要製作一個 LVM 的磁碟出來,首先,我想要將 /dev/hdb1, /dev/hdb2 這兩個 partition 加入這個 LVM 當中,來談一談怎麼製作吧! ^_^


  • 建立 PV 與 PV 的查詢:
  • 要建立 PV 其實很簡單,只要直接使用 pvcreate 即可!我們來談一談與 PV 有關的指令吧!
    • pvcreate :將實體 partition 建立成為 PV ;
    • pvscan :搜尋目前系統裡面任何具有 PV 的磁碟;
    • pvdisplay :顯示出目前系統上面的 PV 狀態;
    • pvremove :將 PV 屬性移除,讓該 partition 不具有 PV 屬性。
    • partprobe :這個指令可以讓核心立刻讀入最新的 partition table 而不必 reboot。
    那就直接來瞧一瞧吧!
    1. 先建立磁碟成為 ID 為 8e 吧!
    [root@linux ~]# fdisk /dev/hdb
    Command (m for help): p
    
    Disk /dev/hdb: 30.7 GB, 30738677760 bytes
    16 heads, 63 sectors/track, 59560 cylinders
    Units = cylinders of 1008 * 512 = 516096 bytes
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/hdb1               1       19377     9765976+  83  Linux
    /dev/hdb2           19378       38754     9766008   83  Linux
    /dev/hdb3           38755       59560    10486224   83  Linux
    
    Command (m for help): t
    Partition number (1-4): 1
    Hex code (type L to list codes): 8e
    Changed system type of partition 1 to 8e (Linux LVM)
    
    Command (m for help): t
    Partition number (1-4): 2
    Hex code (type L to list codes): 8e
    Changed system type of partition 2 to 8e (Linux LVM)
    
    Command (m for help): p
    
    Disk /dev/hdb: 30.7 GB, 30738677760 bytes
    16 heads, 63 sectors/track, 59560 cylinders
    Units = cylinders of 1008 * 512 = 516096 bytes
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/hdb1               1       19377     9765976+  8e  Linux LVM
    /dev/hdb2           19378       38754     9766008   8e  Linux LVM
    /dev/hdb3           38755       59560    10486224   83  Linux
    
    Command (m for help): w
    The partition table has been altered!
    # 瞧到了嗎?沒錯!整個 ID 被更改了!
    
    [root@linux ~]# partprobe
    # 這個指令有趣了!他可以讓核心立刻讀取最新的 partition table 
    # ,而不需要重新開機喔!
    
    
    2. 開始將原本的磁碟製作成為 PV 的格式喔!
    [root@linux ~]# pvscan
      No matching physical volumes found
    [root@linux ~]# pvcreate /dev/hdb1
      Physical volume "/dev/hdb1" successfully created
    [root@linux ~]# pvcreate /dev/hdb2
      Physical volume "/dev/hdb2" successfully created
    [root@linux ~]# pvscan
      PV /dev/hdb1         lvm2 [9.31 GB]
      PV /dev/hdb2         lvm2 [9.31 GB]
      Total: 2 [18.63 GB] / in use: 0 [0   ] / in no VG: 2 [18.63 GB]
    # 剛剛我們將整個 partition 改成為 PV 格式後,利用 pvscan
    # 就可以看到整體的 PV 狀態了。如果要看的更詳細,那就如下所示:
    [root@linux ~]# pvdisplay
      --- NEW Physical volume ---
      PV Name               /dev/hdb1
      VG Name
      PV Size               9.31 GB
      Allocatable           NO
      PE Size (KByte)       0
      Total PE              0
      Free PE               0
      Allocated PE          0
      PV UUID               CW7uAt-ZJa3-BMxe-tfti-16WU-OfNV-BQM6d8
    
      --- NEW Physical volume ---
      PV Name               /dev/hdb2
      VG Name
      PV Size               9.31 GB
      Allocatable           NO
      PE Size (KByte)       0
      Total PE              0
      Free PE               0
      Allocated PE          0
      PV UUID               1lc2SK-tfGN-ReOr-3mNi-nDAp-mpmb-lHUQFG
    # 沒錯吧!確實建立起來了!基本上, PV 的名稱與實際的 partition 剛好相同!
    # 不過, VG 可就不是這麼回事了。由於我們尚未對這兩個 PV 分配 VG,
    # 所以上面顯示的 VG Name 就沒有任何資料啊!
    
    講是很難,作是很簡單!這樣就將 PV 建立了兩個囉!簡單到不行吧! ^_^


  • 開始建立 VG :
  • 建立 VG 及 VG 相關的指令也不少,我們來看看:
    • vgcreate :就是主要建立 VG 的指令啦!他的參數比較多,等一下介紹。
    • vgscan :搜尋系統上面是否有 VG 存在?
    • vgdisplay :顯示目前系統上面的 VG 狀態;
    • vgextend :在 VG 內增加額外的 PV ;
    • vgreduce :在 VG 內移除 PV;
    • vgchange :設定 VG 是否啟動 (active);
    • vgremove :刪除一個 VG 啊!
    與 PV 不同的是, VG 的名稱是自訂的!我們知道 PV 的名稱其實就是 partition 的裝置代號, 但是這個 VG 名稱,則是可以隨便你自己取啊!在底下的例子當中, 我將 VG 名稱取名為 vbirdvg ,所以建立這個 VG 的流程是這樣的:
    1. 先建立 VG 吧!
    [root@linux ~]# vgcreate vbirdvg /dev/hdb1 /dev/hdb2
      Volume group "vbirdvg" successfully created
    # 整個 vgcreate 的語法很簡單,就是利用 vgcreate VGname PVname1 PVname2..
    # 不過,如果想要修改前面提到的 PE 參數時,就得要加入 -s PE 數值了!
    
    [root@linux ~]# vgscan
      Reading all physical volumes.  This may take a while...
      Found volume group "vbirdvg" using metadata type lvm2
    
    [root@linux ~]# vgdisplay
      --- Volume group ---
      VG Name               vbirdvg
      System ID
      Format                lvm2
      Metadata Areas        2
      Metadata Sequence No  1
      VG Access             read/write
      VG Status             resizable
      MAX LV                0
      Cur LV                0
      Open LV               0
      Max PV                0
      Cur PV                2
      Act PV                2
      VG Size               18.62 GB
      PE Size               4.00 MB
      Total PE              4768
      Alloc PE / Size       0 / 0
      Free  PE / Size       4768 / 18.62 GB
      VG UUID               AZRSJx-FWYF-UIlH-NCh5-NqKS-f4gx-ZR049N
    
    
    2. 嘗試抽換一下 PV 吧!
    [root@linux ~]# vgreduce vbirdvg /dev/hdb2
      Removed "/dev/hdb2" from volume group "vbirdvg"
    [root@linux ~]# vgdisplay
      --- Volume group ---
      VG Name               vbirdvg
      System ID
      Format                lvm2
      Metadata Areas        1
      Metadata Sequence No  2
      VG Access             read/write
      VG Status             resizable
      MAX LV                0
      Cur LV                0
      Open LV               0
      Max PV                0
      Cur PV                1
      Act PV                1
      VG Size               9.31 GB
      PE Size               4.00 MB
      Total PE              2384
      Alloc PE / Size       0 / 0
      Free  PE / Size       2384 / 9.31 GB
      VG UUID               AZRSJx-FWYF-UIlH-NCh5-NqKS-f4gx-ZR049N
    
    [root@linux ~]# vgextend vbirdvg /dev/hdb2
      Volume group "vbirdvg" successfully extended
    # 基本上,不難吧!這樣就可以抽換整個 VG 的大小啊!
    # 另外,可以使用 pvscan 看一下 PV 與 VG 的相關性喔!
    
    [root@linux ~]# pvscan
      PV /dev/hdb1   VG vbirdvg   lvm2 [9.31 GB / 9.31 GB free]
      PV /dev/hdb2   VG vbirdvg   lvm2 [9.31 GB / 9.31 GB free]
      Total: 2 [18.62 GB] / in use: 2 [18.62 GB] / in no VG: 0 [0   ]
    
    如此一來,我們就建立了一個好大好大的磁碟,他是整合了 /dev/hdb1 及 /dev/hdb2 啦! 由於 VG 的最大容量與 PE 有關,PE 最多限制在 65534 個,但每個 PE 的大小則不固定。 預設 PE 是 4 MB ,如果你想要改成 16MB 的話,那就得要這樣建立:
      vgcreate -s 16M vbirdvg /dev/hdb1 /dev/hdb2
    那麼最大 VG 的容量就會由 256GB 增加為 1TB 啦!詳細說明請參考 man vgcreate 喔!


  • 建立 LV 吧!
  • 創造出 VG 這個大磁碟之後,再來就是要建立分割區啦! 這個分割區就是所謂的 LV 囉!假設我要將剛剛那個 vbirdvg 磁碟,分割成為 vbirdlv , 整個 VG 都被分配到 vbirdlv 裡面去!先來看看能使用的指令後, 就直接工作了先!
    • lvcreate :建立 LV 啦!
    • lvscan :查詢系統上面的 LV ;
    • lvdisplay :顯示系統上面的 LV 狀態啊!
    • lvextend :在 LV 裡面增加容量!
    • lvreduce :在 LV 裡面減少容量;
    • lvremove :刪除一個 LV !
    • lvresize :對 LV 進行容量大小的調整!
    1. 將整個 vbirdvg 通通分配給 vbirdlv 啊!
    [root@linux ~]# lvcreate -L [sizeMG] -n [LVname] VGname
    參數:
    -L  :後面接容量,容量的單位可以是 M, G 等等;
    -n  :後面接的就是 LV 的名稱啦!
    更多的說明應該可以自行查閱吧! man lvcreate 
    
    [root@linux ~]# lvcreate -L 18.62G -n vbirdlv vbirdvg
      Rounding up size to full physical extent 18.62 GB
      Logical volume "vbirdlv" created
    [root@linux ~]# ll /dev/vbirdvg/vbirdlv
    lrwxrwxrwx  1 root root 27 Nov 14 21:10 /dev/vbirdvg/vbirdlv -> 
    /dev/mapper/vbirdvg-vbirdlv
    # 看見了沒有啊!?這就是我們最重要的一個玩意兒了!
    # 未來所有要掛載的資料,通通是透過這個裝置的!
    
    [root@linux ~]# lvscan
      ACTIVE            '/dev/vbirdvg/vbirdlv' [18.62 GB] inherit
    [root@linux ~]# lvdisplay
      --- Logical volume ---
      LV Name                /dev/vbirdvg/vbirdlv
      VG Name                vbirdvg
      LV UUID                B6kSrg-9LMG-gqVy-jjz8-x0gM-ya9S-XLFcZN
      LV Write Access        read/write
      LV Status              available
      # open                 0
      LV Size                18.62 GB
      Current LE             4767
      Segments               2
      Allocation             inherit
      Read ahead sectors     0
      Block device           253:0
    
    如此一來,整個 partition 也準備好啦!


  • partition 的格式化與掛載!
  • 這個部分鳥哥我就不再多加解釋了!直接來進行吧!
    [root@linux ~]# mke2fs -j /dev/vbirdvg/vbirdlv
    [root@linux ~]# mkdir /mnt/lvm
    [root@linux ~]# mount -t ext3 /dev/vbirdvg/vbirdlv /mnt/lvm
    [root@linux ~]# df
    Filesystem           1K-blocks      Used Available Use% Mounted on
    /dev/hda2              9920624   3029712   6378844  33% /
    /dev/hda1               101086     16524     79343  18% /boot
    /dev/hda5             19236308    190776  18068380   2% /disk1
    /dev/hda6            161836268     94272 153521136   1% /models
    /dev/shm                192528         0    192528   0% /dev/shm
    /dev/mapper/vbirdvg-vbirdlv
                          19219156    176288  18066588   1% /mnt/lvm
    [root@linux ~]# fdisk -l /dev/hdb
    Disk /dev/hdb: 30.7 GB, 30738677760 bytes
    16 heads, 63 sectors/track, 59560 cylinders
    Units = cylinders of 1008 * 512 = 516096 bytes
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/hdb1               1       19377     9765976+  8e  Linux LVM
    /dev/hdb2           19378       38754     9766008   8e  Linux LVM
    /dev/hdb3           38755       59560    10486224   83  Linux
    
    知道那邊不同了嗎?沒錯!原始的 partition 還存在,但是我們卻可以使用額外的 LVM 功能,將來自不同的 partition 的容量整個整合在一起,實在是給他相當的有趣啊! ^_^

    讓原有的 LVM 磁碟加大的方法: resize2fs

    好了,瞭解了如何製作 LVM 之後,接下來則是比較進階的使用啦!我們知道 vbirdvg 已經有兩個 PV, 但是實際上,我們還有個 /dev/hdb3 的實體 partition 啊!那麼如何將這個 /dev/hdb3 加入到 vbirdvg ,且讓 vbirdlv 增加呢?其實也不難啦!你必須要:
    1. 將欲處理的 LV 卸載;
    2. 建立 PV;
    3. 將建立的 PV 以 vgextend 增加到 VG 當中;
    4. 利用 lvextend 增加剛剛 VG 所增加的容量;
    5. 利用 resize2fs 將 LV 的容量確實增加!
    [root@linux ~]# umount /mnt/lvm
    
    [root@linux ~]# fdisk /dev/hdb
    Command (m for help): t
    Partition number (1-4): 3
    Hex code (type L to list codes): 8e
    Changed system type of partition 3 to 8e (Linux LVM)
    
    Command (m for help): w
    The partition table has been altered!
    
    [root@linux ~]# partprobe
    [root@linux ~]# pvcreate /dev/hdb3
      Physical volume "/dev/hdb3" successfully created
    
    [root@linux ~]# vgextend vbirdvg /dev/hdb3
      Volume group "vbirdvg" successfully extended
    [root@linux ~]# vgdisplay
      --- Volume group ---
      VG Name               vbirdvg
      System ID
      Format                lvm2
      Metadata Areas        3
      Metadata Sequence No  5
      VG Access             read/write
      VG Status             resizable
      MAX LV                0
      Cur LV                1
      Open LV               1
      Max PV                0
      Cur PV                3
      Act PV                3
      VG Size               28.62 GB
      PE Size               4.00 MB
      Total PE              7327
      Alloc PE / Size       4767 / 18.62 GB
      Free  PE / Size       2560 / 10.00 GB
      VG UUID               AZRSJx-FWYF-UIlH-NCh5-NqKS-f4gx-ZR049N
    # 沒錯的!是增加了!也可以使用 pvscan 查閱喔!
    # 而且剩餘的沒有使用的 VG 容量是 10.00 GB 喔!看清楚這個地方! ^_^
    
    [root@linux ~]# pvscan
      PV /dev/hdb1   VG vbirdvg   lvm2 [9.31 GB / 0    free]
      PV /dev/hdb2   VG vbirdvg   lvm2 [9.31 GB / 0    free]
      PV /dev/hdb3   VG vbirdvg   lvm2 [10.00 GB / 10.00 GB free]
      Total: 3 [28.62 GB] / in use: 3 [28.62 GB] / in no VG: 0 [0   ]
    
    [root@linux ~]# lvextend -L +10G /dev/vbirdvg/vbirdlv
      Extending logical volume vbirdlv to 28.62 GB
      Logical volume vbirdlv successfully resized
    
    [root@linux ~]# lvdisplay
      --- Logical volume ---
      LV Name                /dev/vbirdvg/vbirdlv
      VG Name                vbirdvg
      LV UUID                B6kSrg-9LMG-gqVy-jjz8-x0gM-ya9S-XLFcZN
      LV Write Access        read/write
      LV Status              available
      # open                 1
      LV Size                28.62 GB
      Current LE             7327
      Segments               3
      Allocation             inherit
      Read ahead sectors     0
      Block device           253:0
    
    [root@linux ~]# mount -t ext3 /dev/vbirdvg/vbirdlv /mnt/lvm
    [root@linux ~]# df /mnt/lvm
    Filesystem           1K-blocks      Used Available Use% Mounted on
    /dev/mapper/vbirdvg-vbirdlv
                          19219156    176288  18066588   1% /mnt/lvm
    
    看到了吧??真是傷腦筋~怎麼會 lv 已經增加了,但是 /dev/vbirdvg/vbirdlv 卻沒有加大呢? 這是因為我們的 ext3 主要資訊在最初規劃時,就已經寫入 super block , 同時 inode 與 block 數量又是固定的,所以,這個容量大小當然不會有變化!那怎麼辦? 沒關係,我們可以使用 ext2/ext3 的工具程式來處理!
    [root@linux ~]# resize2fs [-f] [device] [size]
    參數:
    -f      :強制進行 resize 的動作!
    [device]:裝置代號啊!
    [size]  :可以加也可以不加。如果加上 size 的話,那麼就必須要給予一個單位,
              譬如 M, G 等等。如果沒有 size 的話,那麼預設使用『整個 partition』
              的容量來處理!
    
    [root@linux ~]# umount /mnt/lvm
    [root@linux ~]# resize2fs -f /dev/vbirdvg/vbirdlv
    resize2fs 1.38 (30-Jun-2005)
    Resizing the filesystem on /dev/vbirdvg/vbirdlv to 7502848 (4k) blocks.
    The filesystem on /dev/vbirdvg/vbirdlv is now 7502848 blocks long.
    
    [root@linux ~]# mount -t ext3 /dev/vbirdvg/vbirdlv /mnt/lvm
    [root@linux ~]# df /mnt/lvm
    Filesystem           1K-blocks      Used Available Use% Mounted on
    /dev/mapper/vbirdvg-vbirdlv
                          29540436    176288  28163696   1% /mnt/lvm
    
    嘿嘿!真的放大了吧!!而且如果你已經有填資料在 LVM 磁區當中的話! 這個資料是不會死掉的喔!還是繼續存在原本的磁區當中啦! 整個動作竟然這麼簡單就完成了!原本的資料還是一直存在而不會消失~ 您說, LVM 好不好用啊!

    事實上, resize2fs 也可以用來處理 ext2/ext3 原本 filesystem 的大小。 可以先以 fdisk 處理分割區,再以這個 resize2fs 來放大或者縮小 partition 啊! 要注意,待處理的 partition 不可掛載喔!

    注意事項:

    先來說一說,你必須要知道的一些 LVM 的指令整理:
    任務PVVGLV
    搜尋(scan)pvscanvgscanlvscan
    建立(create)pvcreatevgcreatelvcreate
    列出(display)pvdisplayvgdisplaylvdisplay
    增加(extend) vgextendlvextend
    減少(reduce) vgreducelvreduce
    刪除(remove)pvremovevgremovelvremove
    改變容量(resize)  lvresize

    另外,還需要以 resize2fs 來修訂檔案系統實際的大小才行啊! ^_^ 。至於雖然 LVM 可以彈性的管理你的磁碟容量,但是要注意, 如果你想要使用 LVM 管理您的硬碟時,那麼在安裝的時候就得要做好 LVM 的規劃了, 否則未來還是需要先以傳統的磁碟增加方式來增加後,移動資料後,才能夠進行 LVM 的使用啊!

    無論如何還是要跟大家報告的,鳥哥個人認為 LVM 比較適合用在製作一個具有彈性的磁碟容量的環境, 並不是要製作一個高效能的儲存設備的環境,所以鳥哥在 lvcreate 時, 才沒有講到如何製作 triped 模式的參數啊!如果真的想要製作一個高可靠性、 高性能的儲存環境,那還是得重硬體來著手,譬如底下我們要談一談的 iSCSI 的 RAID 儲存架構,應該就是個不錯的選擇喔! ^_^

    另外,如果你想要將 LVM 移除的話,那麼就應該要:
    1. 先卸載系統上面的 LVM 磁區;
    2. 使用 lvremove 移除 LV ;
    3. 使用 vgchange -a n VGname 讓 VGname 這個 VG 不具有 Active 的標誌;
    4. 使用 vgremove 移除 VG:
    5. 使用 pvremove 移除 PV;
    6. 最後,使用 fdisk 修改 ID 回來啊!
    好吧!那就實際的將鳥哥剛剛建立的 LVM 給他拿掉吧!
    [root@linux ~]# umount /mnt/lvm
    [root@linux ~]# lvremove /dev/vbirdvg/vbirdlv
    Do you really want to remove active logical volume "vbirdlv"? [y/n]: y
      Logical volume "vbirdlv" successfully removed
    [root@linux ~]# vgchange -a n vbirdvg
      0 logical volume(s) in volume group "vbirdvg" now active
    [root@linux ~]# vgremove vbirdvg
      Volume group "vbirdvg" successfully removed
    [root@linux ~]# pvremove /dev/hdb1
      Labels on physical volume "/dev/hdb1" successfully wiped
    [root@linux ~]# pvremove /dev/hdb2
      Labels on physical volume "/dev/hdb2" successfully wiped
    [root@linux ~]# pvremove /dev/hdb3
      Labels on physical volume "/dev/hdb3" successfully wiped
    
    最後在用 fdisk 將磁碟的 ID 給他改回來 82 就好啦!整個過程就這樣的啦! ^_^

    額外的儲存設備 iSCSI 協定的磁碟陣列:

    常常會聽到所謂的 SAN ( Storage Area Networks ) 與 NAS ( Network Attached Storage ) 這兩個字眼, NAS 主要是以一部專門給儲存資料用的主機,以現有的 TCP/IP 協定來提供作為類似 file server 的用途, 他可以直接放置在網路上面,提供使用者存取資料之用。SAN 則類似一部儲存設備, 藉由光纖通道提供某幾部主機進行資料的存取之用,價格昂貴,維護成本高,但是儲存效能佳! 但不論是哪一種架構,基本上,他們的儲存硬碟通常是以磁碟陣列 (RAID) 作為基礎的。 底下我們會來談一談什麼是磁碟陣列,並同時以目前較新的 iSCSI 架構的儲存設備來進行一個簡單的網路儲存設備架設。

    什麼是磁碟陣列

    磁碟陣列全名是『 Redundant Arrays of Inexpensive Disks 』,簡寫為 RAID, 他是透過一個技術(軟體或硬體),將多個較小的磁碟整合成為一個較大的磁碟裝置; 而這個較大的磁碟功能可不止是儲存而已,他還保有資料保護的功能呢。 整個 RAID 由於選擇的等級 (level) 不同,而使得整合後的磁碟具有不同的功能, 基本常見的 level 有這幾種:

  • Linear mode (線性模式):
    兩個以上的磁碟整合成為一個實體的儲存裝置;這個模式的特色是, 所有的資料是『一個一個填滿後,才將資料繼續寫到下一個磁碟上』; 由於資料是一個一個寫入到不同的硬碟當中,因此,整個磁碟的讀取效能並不會增加, 此外,由於資料具有連續性,因此,若不小心有任何一個磁碟損毀時,嘿嘿! 您的資料可能通通救不回來了~這種模式唯一的好處, 就是磁碟的空間完整的被利用完畢!不會有任何保留空間 (redundant)。

  • RAID-0 (交錯模式, stripe):
    這種模式主要是利用容量相同的磁碟來達成,效能會比較好。 所謂的交錯 (stripe) 是因為檔案資料是同步灑到不同的磁碟上頭去的意思, 也就是說,假設我有兩顆磁碟設定成 RAID-0 ,那麼當我有 100MB 資料要寫入時, 則 100MB 會被拆成兩個 50MB 分別寫入不同的磁碟上頭去!

    所以囉,因為每一個磁碟寫入的資料量只有一半,因此,讀寫的效能都會大大的增加! 而且越多顆磁碟所造成的 RAID-0 裝置,理論上,效能增加的越明顯。 但是這種模式有個最大的問題,那就是,因為一筆資料被拆成幾個部分分佈在不同的磁碟上頭, 因此『任何一顆磁碟的損毀,都會讓你的資料救不回來!

    另外,如果使用不同容量的磁碟來達成 RAID-0 時,則在儲存資料長大到一定程度時, RAID-0 的效能會變差。假設我用了一顆 20GB 兩顆 16GB 的硬碟好了, 那麼當總資料量少於 48GB (16x3) 時,效能是很不錯的。 但是當超過 48GB 時,則資料僅能儲存在 20GB 那一顆了 (可用容量剩下 4GB 啊!), 所以囉,當然效能就變差了啊!

  • RAID-1 (映射模式, mirror):
    這種模式也是需要相同的磁碟容量的,最好是一模一樣的磁碟啦! 如果是不同容量的磁碟組成 RAID-1 時,那麼總容量將以最小的那一顆磁碟為主! 這種模式主要是『讓同一份資料,完整的保存在兩顆磁碟上頭』, 也就是說,如果我有一個 100MB 的檔案,且我僅有兩顆磁碟組成 RAID-1 時, 那麼這兩顆磁碟將會同步寫入 100MB 到他們的儲存空間去, 因此,整體容量幾乎少了 50%。由於兩顆硬碟內容一模一樣,好像鏡子映照出來一樣, 所以我們也稱他為 mirror 模式囉~

    我們可以說,這種模式最大的優點大概就是在進行備份吧! 因為所有的資料都被存放在兩個磁碟上面,所以,任何一顆磁碟損毀時,嘿嘿! 所有的資料可都還是保存的好好的呢~

    至於效能上面,由於要寫入的資料變多了,(同步寫入兩顆硬碟嘛!), 所以,效能會比單顆磁碟還要差一些,沒辦法,因為我們都是透過同一個匯流排在進行資料的通行啊~ 不過,讀取的效能還不錯,因為資料有兩份,如果多個 processes 在讀取同一筆資料時, RAID 會自行取得最佳的讀取平衡。

    事實上,為了保有 RAID-1 的儲存優點,又想要具有類似 RAID-0 的效能增強, 所以,後來也有所謂的 RAID 0+1 ,亦即同時具有 RAID-0 與 RAID-1 的功能; 只是,這樣的功能至少需要四顆以上的相同容量的磁碟才行~ 而且總可用容量會減少一半 (因為 RAID-1 啊!)。

  • RAID-5:
    這個類型最有趣~也是目前最常見的一種類型了。 RAID-5 會整合多個磁碟 (通常需要三個以上),然後每部磁碟機上面都會記錄少許的其他部磁碟機的資訊 ( parity information ),由於這個動作,因此,實際上可以使用的容量其實是 (N-1)*S ,那個 N 為全部的磁碟機總數,S 則是最小的那個磁碟的容量。 少掉的空間就是用來作為資訊記錄用的。

    由於這個機制的存在,因此,當那 N 部磁碟機有任何一部出問題時, 他的資料都會被平均記錄到其他 N-1 部磁碟機內,所以,只要你將壞掉的那一顆拿掉, 換一顆好的磁碟後,該磁碟原本的內容就會被重建 (rebuild) 起來, 呵呵~很棒的備份效果吧!

    除此之外,因應目前所謂的熱拔插 RAID 架構,因此,很多的硬體 RAID 在製作這個 RAID-5 的類型時,他會使用 N+1 顆磁碟,其中 N 顆用來作為 RAID-5 之用, 另外那一顆則做為磁碟損壞時的即時處理之用 (spare disk)。 所以,假設您有十顆磁碟在這樣的架構下時,則事實上只有九顆在進行 RAID-5 的存取, 一顆作為錯誤處理,所以總容量應該是 8xS 才對喔!而當有任何一顆磁碟出問題時, 那一顆 spare disk 就派上用場了,他會立刻被重建, 因此,您只要將有問題的磁碟拔掉,換上一顆新的,嘿嘿!搞定!

    不過還是要注意啦,因為 RAID-5 僅能處理一顆硬碟壞掉時的處置, 若同時有兩顆以上的磁碟損毀,那....所有的資料還是會完蛋的! 所以啦,特重要的資訊還是得要複製出來才行~關於考量,呵呵~請參考備份策略吧!

    至於存取效能上面,讀取的效能幾乎可以媲美 RAID-0 ,但是寫入的效能就無法像 RAID-0 那樣明顯。因為還得要計算分別寫入到所有磁碟當中的平衡資訊 (parity information), 所以寫入的效能雖然是會增加不少,不過,不容易計算出來實際的增加的效能啦~

    呵呵!經過上面的說明,您應該會曉得,為何企業會需要使用磁碟陣列了吧? 沒錯,因為 RAID 不但可以增加資料存取的效能, 而且對於備份與資料的可靠性而言,他具有相當程度的類似備份的功效,因此, 很適合需要大量存取資料的主機系統。所以囉,目前很多的線上儲存設備, 基本上,都是透過 RAID 裝置來達成的~底下我們就大略的來介紹一下目前挺流行的 iSCSI 介面的儲存設備吧!( 如果對於 Linux 上面的 RAID 有興趣, 可以參考這一篇:http://www.tldp.org/HOWTO/ Software-RAID-HOWTO-1.html )

  • iSCSI 磁碟陣列的架設與使用

    由於企業的資料量越來越大,而且重要性與保密性越來越高,尤其類似資料庫的內容, 哇!常常容量單位是以 TB (1TB = 1024GB) 在進行計算的;可怕吧! 所以囉,上一個小節內提到的磁碟陣列 (RAID) 的應用就很重要了。 不過, RAID 畢竟只是在一部主機上面的儲存裝置,如果想要提供給網路上面的其他 client 端來使用,可能還需要主機提供相關的服務才行啊!而且,透過網路主機來連接, 效能上可能是卡在網路傳輸速度,而不是 RAID 的速度說。而且, RAID 裝在一部主機上面時, 能夠提供給 client 端使用的情況有限啦~大多僅是資料而已。

  • NAS
  • 為了解決網路應用上面的,很多廠商提供了一些不錯的想法。首先,就是那個 NAS (Network Attach Storage),基本上, NAS 其實就是一部客制化好的主機了, 只要將 NAS 連接上網路,那麼在網路上面的其他主機就能夠存取 NAS 上頭的資料了。 簡單的說,NAS 就是一部 file server (檔案伺服器) 囉~ 不過, NAS 由於也是接在網路上面,所以,如果網路上有某個 client 大量存取 NAS 上頭的資料時, 是很容易造成網路停頓的問題的,這個比較麻煩點~
    Tips 鳥哥 在鳥哥的理解當中, NAS 基本上就是一部完整的主機, 他有獨立的作業系統與運算、儲存等處理單元,其他的 client 端只要能夠與 NAS 的協定相容,那麼他就能夠存取 NAS 上頭的資料啊!
  • SAN
  • 我們需要大量的存取裝置,目的就是為了要強化存取效能與總可用容量,現在知道總可用容量可以使用 RAID 技術來加強,但是存取效能呢?透過網路來存取時,確實可能導致存取效能的低落啊。 為了解決這個問題,因此後來很多廠商開發出所謂的光纖通道。光纖通道的速度要快上很多, 目前標準的光纖通道是 2GB ,未來還可能到達 10GB 以上呢~ 不過,使用光纖等技術較高的設備,當然就比較貴一些。 利用光纖,配合一些硬體的標準化,後來一些廠商提出了 SAN (Storage Area Network) 架構; SAN 利用較高階的光纖通道來進行主機與儲存設備的連接, 讓主機透過光纖來快速存取儲存設備內的資料,而不是透過較慢的網路架構。 但是 SAN 架構的初設成本太貴,而且維護費用頗高!

    拜乙太網路盛行,加上技術成熟之賜,現今的乙太網路媒體 (網路卡、交換器、路由器等等設備) 已經可以達到 GB 的速度了,離 SAN 的光纖通道速度其實差異已經縮小很多啦~ 那麼是否我們可以透過這個 GB 的乙太網路來達到類似 SAN 的功效呢? 沒錯!這就是我們接下來要提到的 iSCSI 架構啦! ^_^

  • iSCSI
  • 其實,整個 iSCSI 的架構主要分為儲存設備與提供 iSCSI 連線的主機端, 而 iSCSI 則透過乙太網路連結儲存設備與主機就是了。 兩者的關係有點像底下這個圖示:

    iSCSI 架構圖
    圖一、 iSCSI 的主機與儲存設備的關係。

    首先,您必須要擁有 iSCSI 介面的儲存設備 (廢話!不然怎麼玩?) , 然後,您的 iSCSI 儲存設備上面必須要具有 IP 位址,並且儲存設備以網路線連結到擁有 GB 速度的 Switch 上。再來,您的主機必須要啟動 iSCSI 的驅動程式, 驅動他之後,他會使用 TCP/IP 的網路協定連結到儲存設備上頭, 並且『將整個儲存設備視為主機上面的一個 SCSI 硬碟』的模樣! 也就是說,基本上,iSCSI 的儲存設備就是您主機上面的一個實體硬碟, 只是這個硬碟是以 iSCSI 協定及 TCP/IP 協定來達成的。而且,他在主機上面的使用, 幾乎就與實體 SCSI 硬碟沒有兩樣!磁碟代號則為 /dev/sda... 。

    經過上面的說明,你可以瞭解到,其實整個 iSCSI 的儲存設備並不是一個完整的主機喔,他僅是一個儲存設備, 跟上頭提到的 NAS 並不相同,反而有點類似 SAN 啦~而且,這個儲存設備可以讓主機完整掌控, 幾乎就與主機上頭的 SCSI 硬碟沒有兩樣就是了。

    底下鳥哥以 Promise 公司出品的 iSCSI 裝置來進行說明, 該 iSCSI 裝置裡面已經存在 10 顆 250GB 的 SATA 硬碟,其中有一顆做為備份 (spare disk) , 所以共有九顆硬碟作為 RAID-5 的架構。因此,整個 RAID 的容量則約略是: 250*(9-1)=2TB,不過,這樣只是約略估計啦,因為 250GB 硬碟的計算是以 10 進位計算的, 跟我們常見的磁碟容量計算單位不相同。不過,很接近就是了! ^_^

    再來,由於 Promise 公司並沒有提供 Linux 主機的 iSCSI 驅動程式,所以, 鳥哥則以 Linux-iSCSI project 提供的相關資訊,並以底下這一篇為基底: http://www.cuddletech.com/articles/iscsi/index.html 安裝鳥哥的 Red Hat 9 Linux 的 iSCSI driver 。基本上,在該篇文章中, Linux 主機被稱為是 initiator 的啦!
    Tips 鳥哥 事實上,由於 iSCSI 儲存設備與 Linux 主機之間,是透過 TCP/IP 協定, 亦即網路來進行資料的存放,因此,您至少必須要具備基礎的網路基礎知識才行~ 不過,這一篇實在挺有趣的,而單獨寫一篇伺服器,似乎也沒有那個必要, 所以,就讓鳥哥放到這個地方來了~所以囉,如果您目前看不懂也沒關係啦; 而且,鳥哥也是剛好有機會接觸到 iSCSI 的設備才能夠玩這一篇啊!呵呵~ 其實還挺高興的! ^_^
    基本上,鳥哥的環境架構是這樣的:
    • Linux 主機:

    • iSCSI 儲存設備架構:
      • 型號為PROMISE M500i ,使用 iSCSI 機型;
      • 使用 10 顆硬碟,1 顆為 spare disk,其餘 9 顆做成 RAID-5;
      • IP:iSCSI 儲存設備的 IP 為 192.168.10.200
      • 連接到儲存設備的帳號與密碼分別為: account/iscsipw
    相關的 iSCSI 裝置、網路接線的連結,以及 GB switch 的選購與連結等等, 請與相關的硬體廠商聯繫,他們會幫忙搞定的~我們要作的,僅是在 Linux 主機上面安裝驅動程式, 並且將他掛載起來就是了。其實,當 iSCSI RAID 到您府上時,安裝好之後, 我們就不需要動他的設定了~因為他僅提供儲存空間嘛!只要控制 Linux 主機端即可啦! 整個安裝的步驟有點像這樣:

    1. 下載適當的驅動程式:

      由於鳥哥的測試機使用的是 Red Hat 9 ,他的核心是 2.4.xx 版本, 所以,我下載的是 3.6.3 的版本,當然,你也可以直接下載給 Red Hat 9 使用的 RPM 檔案啊!:




    2. 開始安裝 iSCSI 驅動程式:

      iSCSI 的驅動程式安裝真的很簡單啊!我們剛剛下載的檔案放置到 /usr/local/src 後, 然後直接解壓縮,之後將他直接進行 make 與 make install 即可! 鳥哥這裡講得很簡單,若有需要更詳細的 tarball 安裝說明,請參考 原始碼與 tarball 那個章節啊! 此外,由於 iSCSI 是一種驅動程式,因此,他會讀取 Linux kernel 的相關原始碼檔案, 所以,你也必須要確認你的系統上面確實含有 Linux kernel 在 /usr/src/linux 目錄下才行! 這也是很重要的一項準備工作喔!
      1. 先進行解壓縮的動作:
      [root@linux ~]# cd /usr/local/src
      [root@linux src]# tar -zxvf linux-iscsi-3.6.3.tgz
      [root@linux src]# cd linux-iscsi-3.6.3c
      
      
      2. 開始進行編譯與安裝
      [root@linux linux-iscsi-3.6.3]# make clean && make
      [root@linux linux-iscsi-3.6.3]# make install
      # 首先,會有一些關於核心方面的相關說明,這裡看看即可!
      Note: using kernel source from /lib/modules/2.4.20-8smp/build containing
      kernel version 2.4.20-8custom
      Note: using kernel config from /boot/config-2.4.20-8smp
      Installing iSCSI driver for Linux 2.4.20-8smp
      
      # 再來,則會安裝啟動 iSCSI 的 script ,預設放置到 /etc/rc.d/init.d/iscsi 去!
      # 同時注意一下,這個程序會自動的加入到 chkconfig 的管理項目當中,因此,
      # 安裝好的同時,這個 iscsi 就會在開機時主動的啟動了。
      The initialization script has been installed as /etc/rc.d/init.d/iscsi.
      iSCSI has been set up to run automatically when you reboot.
      
      # 同時,會將我們的 Linux 主機模擬成為 CISCO 的 iSCSI
      # 協定的接受器,相關的設定資料會被寫入到 /etc/initiatorname.iscsi 當中。
      InitiatorName iqn.1987-05.com.cisco:01.d1dbb1112d38 has already been
      generated and written to /etc/initiatorname.iscsi.
      
      # 接下來這個檔案才是我們所關心的!那就是連結到 iSCSI 儲存裝置的設定檔!
      # 你必須要根據你的裝置來給予相關的修改後,他才會順利工作喔!
      Make sure you check and edit the /etc/iscsi.conf file!
      
      
      3. 開始進行修改的工作:
      [root@linux ~]# vi /etc/iscsi.conf
      # 在這個檔案當中新增底下這幾行,注意,帳號、密碼與 IP 均需確定正確喔!
      Username=account
      Password=iscsipw
      DiscoveryAddress=192.168.10.200
        Username=account
        Password=iscsipw
      
      
      4. 開始啟動 iscsi 囉!
      [root@linux ~]# /etc/init.d/iscsi start
      Starting iSCSI: iscsi iscsid fsck/mount
      
      [root@linux ~]# vi /var/log/messages
      iscsid[3208]: version 3.6.3.0 variant (27-Jun-2005)
      iscsid[3208]: root development build created Mon Jun 27 14:34:43 CDT 2005
      iscsid[3209]: INBP boot check returned this_is_inbp_boot = 0
      iscsid[3212]: Connected to Discovery Address 192.168.10.200
      kernel: iSCSI: bus 0 target 0 = iqn.1994-12.com.promise.target.3b.31.
      	4.55.1.0.0.20
      kernel: iSCSI: bus 0 target 0 portal 0 = address 192.168.10.200 port 
      	3260 group 2
      kernel: iSCSI: bus 0 target 0 trying to establish session f5ad6000 to
      	 portal 0, address 192.168.10.200 port 3260 group 2
      kernel: iSCSI: bus 0 target 0 established session f5ad6000 #1 to portal 
      	0, address 192.168.10.200 port 3260 group 2, alias VTrak M500i
      kernel: scsi singledevice 0 0 0 0
      kernel:   Vendor: Promise   Model: VTrak M500i       Rev: 1122
      kernel:   Type:   Direct-Access                      ANSI SCSI revision: 04
      kernel: Attached scsi disk sda at scsi0, channel 0, id 0, lun 0
      kernel: SCSI device sda: 3890624512 512-byte hdwr sectors (1992000 MB)
      kernel:  sda:
      # 看到了嗎?沒錯!確實有連接到正確的儲存位置了~
      # 而且捉到的是 sda 這個裝置代號喔!容量可有 1992000MB 這麼大!
      # 然後我們來看看系統是否能夠捉到這個裝置呢?
      
      [root@linux ~]# fdisk -l
      Disk /dev/sda: 1991.9 GB, 1991999750144 bytes
      64 heads, 32 sectors/track, 1899719 cylinders
      Units = cylinders of 2048 * 512 = 1048576 bytes
      
         Device Boot    Start       End    Blocks   Id  System
      
      [root@linux ~]# iscsi-ls
      *******************************************************************************
              SFNet iSCSI Driver Version ... 3.6.3 (27-Jun-2005 )
      *******************************************************************************
      TARGET NAME             : iqn.1994-12.com.promise.target.3b.31.4.55.1.0.0.20
      TARGET ALIAS            : VTrak M500i
      HOST NO                 : 0
      BUS NO                  : 0
      TARGET ID               : 0
      TARGET ADDRESS          : 192.168.10.200:3260
      SESSION STATUS          : ESTABLISHED AT Thu Nov 10 20:13:43 2005
      NO. OF PORTALS          : 1
      PORTAL ADDRESS 1        : 192.168.10.200:3260,2
      SESSION ID              : ISID 00023d000001 TSIH 04
      *******************************************************************************
      # 看到了吧?使用 fdisk -l 可以看到名稱為 /dev/sda 的裝置,使用 iSCSI
      # 提供的 iscsi-ls 也可以查詢的到相關的資訊呢!真是很不錯啊!
      
      
      5. 分割 /dev/sda 與格式化!
      [root@linux ~]# fdisk /dev/sda
      Command (m for help): n
      Command action
         e   extended
         p   primary partition (1-4)
      p
      Partition number (1-4): 1
      First cylinder (1-1899719, default 1):
      Using default value 1
      Last cylinder or +size or +sizeM or +sizeK (1-1899719, default 1899719):
      Using default value 1899719
      Command (m for help): w
      
      [root@linux ~]# mke2fs -j /dev/sda1
      
      經過這個簡單的動作,我的 Linux 主機已經捉到 iSCSI 儲存裝置, 並且,他就好像是我自己 Linux 本機上面的一個 SCSI 硬碟一樣! 使用的方式幾乎一模一樣~沒有差異呢!真是太方便了~接下來,當然就是要掛載啦!


    3. 設定掛載:

      假設我的這部 iSCSI 主機要掛載到 /cluster/raid 這個目錄下,那麼我就這樣做:
      [root@linux ~]# mkdir /cluster/raid
      [root@linux ~]# mount -t ext3 /dev/sda1 /cluster/raid
      [root@linux ~]# df
      Filesystem           1K-blocks      Used Available  Use% Mounted on
      /dev/hda1             10080488   2950408   6618012   31% /
      /dev/hda2              5036316     81172   4699312    2% /var
      /dev/hda3              3020172     33492   2833260    2% /tmp
      none                    773736         0    773736    0% /dev/shm
      /dev/sda1            1914788196  27040372 1790482212  2% /cluster/raid
      
      很有趣吧!這樣就能夠將 iSCSI 掛載到我們的機器上囉~


    4. 設定自動掛載:

      不過,如果你想要讓系統自動掛載 iSCSI 裝置的資料,該寫入哪裡? 當然不可能是 /etc/fstab 囉~因為在載入 /etc/fstab 之前,根本就還沒有驅動網路, 所以,當然不可能寫入 /etc/fstab 。好在,我們的 iSCSI 有提供不錯的模組, 你可以直接修改 /etc/fstab.iscsi 這個檔案,將他設定成為:
      [root@linux ~]# vi /etc/fstab.iscsi
      /dev/sda1   /cluster/raid   ext3    defaults     0   0
      
      如此一來,開機就會自動的掛載該 iSCSI 的裝置啦!就是這麼簡單啊!^_^
    鳥哥是由於研究室有一部 iSCSI 的 Raid 才有可能接觸到這麼高檔的貨色~ 真是覺得很開心!整個 iSCSI 的設定並不困難,當然,要達成更高效率的讀寫資料, 可能還是需要進一步的研究啦!提供給您作為一個設定的參考囉! ^_^

    參考文獻

    習題練習

    ( 要看答案請將滑鼠移動到『答:』底下的空白處,按下左鍵圈選空白處即可察看)
    • 如何建立 /dev/usb/lp8?
    • 首先,必須要查閱得該裝置的主要裝置代號,亦即 180,至於次要代號則是 8 , 再使用 mknod 來建立,因此,需要這樣做:
      mknod /dev/usb/lp8 c 180 8
      chown root:lp /dev/usb/lp8
      chmod 660 /dev/usb/lp8
    • 如何使用 lm_sensors 偵測主機內的溫度,詳細說明整個步驟?
      • 先確定您的主機板具有溫度與電壓等偵測晶片,可使用 lspci 檢查晶片組;
      • 開機進入 BIOS 後,查詢一下是否具有硬體偵測溫度、電壓的項目,將輸出的項目順序記一下;
      • 確定 Linux 已經安裝了 lm_sensors,再使用 sensors-detect 檢查所需要的設定項目;
      • 依據上個步驟,設定 /etc/modprobe.conf 及 /etc/rc.d/rc.local 兩個檔案;
      • 使用 chkconfig 讓 lm_sensors 開機啟動,並且重新開機 (reboot);
      • 開始使用 sensors 進行偵測,也可以嘗試修改 /etc/sensors.conf 的內容,以符合實際狀況。
    • 我原本的 Linux 系統使用 80GB 的硬碟,分成 /dev/hda1(/), /dev/hda2(/home), /dev/hda3(swap), 現在我想要將所有的資料通通搬移到另一顆 250GB 的硬碟上面去,所有的資料都不要改變, 我想要利用 dd, fdisk, mke2fs, resize2fs 等指令的輔助,可以如何工作?
    • 這個問題很有趣喔!建議你可以先參考這一篇: http://www.l-penguin.idv.tw/article/dd-sys-backup.htm ,主要的工作可以這樣做:
      • 先以 fdisk 將 250GB 的硬碟分割成為 3 個 partitions , 個別對應到 /dev/hda1, /dev/hda2, /dev/hda3 ,必須要注意, 後來的新硬碟的 partition 必須要大於原本的!
      • 利用 mke2fs 將後來新硬碟的 1, 2 partitions 格式化!
      • 利用『 dd if=/dev/hda1 of=/dev/hdb1 』將資料開始複製!
      • 使用 fsck 檢查 /dev/hdb1, /dev/hdb2 兩個 partition;
      • 利用本章學到的 resize2fs 去校正剩下的磁碟空間:『resize2fs /dev/hdb1』
      • 用盡各種方法將 grub 植入 /dev/hdb 當中!成功!搞定! ^_^
    修改歷史:
    • 2005/10/25:準備準備~寫一些跟硬體比較有關係的資料!
    • 2005/11/08:準備完畢 USBlm_sensors 的部分了~啊!拖了真久~還有 RAID 的說明也差不多哩!
    • 2005/11/09:加入了 FC4 的 setup 指令,尤其是印表機的部分,可以參考參考!
    • 2005/11/10:終於將 iSCSI 的裝置寫好了~這部份真的是很有趣!不過,一般使用者可能碰不到就是了。
    • 2005/11/13:終於將 CUPS 架構設定好自己的 Printer 部分了!
    • 2005/11/14:連同 LVM 也大致的給他寫完了!那個 resize2fs 指令確實有趣!
    • 2005/11/25:加入一個簡單的練習題~利用 dd 配合 resize2fs 來製作備份的資料!
    其他連結
    環境工程模式篇
    鳥園討論區
    鳥哥舊站

    今日 人數統計
    昨日 人數統計
    本月 人數統計
    上月 人數統計