第二十一章、系统配置工具(网络与打印机)与硬件侦测
最近升级日期:2009/09/15

大标题的图示硬件数据收集与驱动,及 lm_sensors

『工欲善其事,必先利其器』,这是一句大家耳熟能详的古人名言,在我们的资讯设备上面也是一样的啊! 如同前面小节谈到的,如果你的打印机本身就没有提供给 Linux 系统用的驱动程序,那么我们就不要浪费时间在该打印机设备上了。 同理可证,如果我们想要好好的使用 Linux 安装在自己的主机上面,那么主机上面的硬件资讯最好还是能够了解一下的好。 现在一般主板也都有提供 CPU 电压与温度的侦测,那我们也能够透过 lm_sensors 这个软件来取得该数据喔! 底下就让我们来玩玩吧!


小标题的图示硬件资讯的收集与分析

现在我们知道系统硬件是由操作系统核心所管理的,由第二十章的启动流程分析中,我们也知道 Linux kernel 在启动时就能够侦测主机硬件并加载适当的模块来驱动硬件了。 而核心所侦测到的各项硬件装置,后来就会被记录在 /proc 与 /sys 当中了。 包括 /proc/cpuinfo, /proc/partitions, /proc/interrupts 等等。 更多的 /proc 内容介绍,先回到第十七章的程序管理瞧一瞧先!

Tips:
其实核心所侦测到的硬件可能并非完全正确喔!因为他仅是『使用最适当的模块来驱动这个硬件』而已, 所以有时候难免会误判啦 (虽然机率非常之低)!那你可能想要以最新最正确的模块来驱动你的硬件, 此时,重新编译核心是一条可以达成的道路。不过,现在的 Linux 系统并没有很建议你一定要重新编译核心就是了。
鸟哥的图示

那除了直接呼叫出 /proc 底下的文件内容之外,其实 Linux 有提供几个简单的命令来将核心所侦测到的硬件叫出来的~ 常见的命令有底下这些:

  • fdisk:第八章曾经谈过,可以使用 fdisk -l 将分割表列出;
  • hdparm:第八章谈过的,可观察硬盘的资讯与测试读写速度;
  • dmesg:第十七章谈过, 观察核心运行过程当中所显示的各项信息记录;
  • vmstat:第十七章谈过,可分析系统 (CPU/RAM/IO) 目前的状态;
  • lspci:列出整个 PC 系统的 PCI 介面装置!很有用的命令;
  • lsusb:列出目前系统上面各个 U盘 端口的状态,与连接的 U盘 装置;
  • iostat:与 vmstat 类似,可即时列出整个 CPU 与周边设备的 Input/Output 状态。

lspci, lsusb, iostat 是本章新谈到的命令,尤其如果你想要知道主板与各周边相关设备时,那个 lspci 真是不可多得的好工具!而如果你想要知道目前 U盘 插槽的使用情况以及侦测到的 U盘 装置, 那个 lsusb 则好用到爆!至於 iostat 则是一个即时分析软件,与 vmstat 有异曲同工之妙! 既然本节是想要使用 lm_sensors 分析各组件的温度与电压,那么这几个命令得要来使用看看才行啊! ^_^

基本上,想要知道你 Linux 主机的硬件配备,最好的方法还是直接拆开机壳去察看上面的资讯 (这也是为何第零章会谈计概啊)! 如果环境因素导致您无法直接拆开主机的话,那么直接 lspci 是很棒的一的方法:


  • lspci
[root@www ~]# lspci [-vvn]
选项与参数:
-v  :显示更多的 PCI 介面装置的详细资讯;
-vv :比 -v 还要更详细的细部资讯;
-n  :直接观察 PCI 的 ID 而不是厂商名称

范例一:查阅您系统内的 PCI 装置:
[root@www ~]# lspci
00:00.0 Host bridge: Silicon Integrated Systems [SiS] 630 Host (rev 30)
00:00.1 IDE interface: Silicon Integrated Systems [SiS] 5513 [IDE] (rev d0)
00:01.0 ISA bridge: Silicon Integrated Systems [SiS] SiS85C503/5513 (LPC Bridge)
00:01.2 U盘 Controller: Silicon Integrated Systems [SiS] U盘 1.1 Controller (rev 07)
00:01.3 U盘 Controller: Silicon Integrated Systems [SiS] U盘 1.1 Controller (rev 07)
00:01.4 Multimedia audio controller: Silicon Integrated Systems [SiS] SiS PCI Audio 
Accelerator (rev 02)
00:02.0 PCI bridge: Silicon Integrated Systems [SiS] Virtual PCI-to-PCI bridge (AGP)
00:0e.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)
01:00.0 VGA compatible controller: Silicon Integrated Systems [SiS] 630/730 PCI/AGP 
VGA Display Adapter (rev 21)
# 不必加任何的参数,就能够显示出目前主机上面的各个 PCI 介面的装置呢!

不必加上任何选项,就能够显示出目前的硬件配备为何。上面就是鸟哥的测试机所使用的主机配备。 包括使用 SIS 这家公司推出的 630 主板芯片组,使用 U盘 驱动为 1.1 版的控制器, 内建 SIS 的声卡,使用内建整合的 SIS 的 AGP 显卡,以及网络卡为螃蟹卡 (型号为 RTL-8139)。 您瞧瞧!很清楚,不是嘛。

由於目前的主机配备实在太高档了,因此很多朋友学习 Linux 时,习惯以类似 VirtualboxVMWare 等虚拟机器进行模拟,此时你得要特别注意,你的硬件配备将是 Virtualbox 或 VMWare 模拟出来的,并不是原本的主机配备喔!实在是由於讨论区太多网友发问类似『我的螃蟹卡为何捉不到』等问题, 询问后,才发现他使用 VMWare 模拟硬件。此时你就得要使用 lspci 去列出 Linux 核心捉到的硬件, 而不是你原本的硬件啦!注意注意!

如果你还想要了解某个设备的详细资讯时,可以加上 -v 或 -vv 来显示更多的资讯喔! 举例来说,鸟哥想要知道那个以太网络卡更详细的资讯时,可以使用如下的选项来处理:

[root@www ~]# lspci -s 00:0e.0 -vv

-s 后面接的那个怪东西每个设备的汇流排、插槽与相关函数功能啦!那个是我们硬件侦测所得到的数据罗! 你可以对照底下这个文件来了解该串数据的意义:

  • /usr/share/hwdata/pci.ids

其实那个就是 PCI 的标准 ID 与厂牌名称的对应表啦! 此外,刚刚我们使用 lspci 时,其实所有的数据都是由 /proc/bus/pci/ 目录下的数据所取出的呢!了解了吧! ^_^


  • lsusb

刚刚谈到的是 PCI 介面装置,如果是想要知道系统接了多少个 U盘 装置呢?那就使用 lsusb 吧! 这个命令也是很简单的!

[root@www ~]# lsusb [-t]
选项与参数:
-t  :使用类似树状目录来显示各个 U盘 端口的相关性

范例一:列出目前鸟哥的测试用主机 U盘 各端口状态
[root@www ~]# lsusb
Bus 001 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
Bus 002 Device 002: ID 0d62:a100 Darfon Electronics Corp. Benq Mouse
# 如上所示,鸟哥的主机有两个 U盘 控制器 (bus),而 Bus 002 有接了一个设备,
# 该设备的 ID 是 0d62:a100,对应的厂商与产品为 Benq 的鼠标。

确实非常清楚吧!其中比较有趣的就属那个 ID 号码与厂商型号对照了!那也是写入在 /usr/share/hwdata/pci.ids 的东西,你也可以自行去查询一下喔!更多资讯我们留待下一小节再来讨论吧!


  • iostat

刚刚那个 lspci 找到的是目前主机上面的硬件配备,那么整部机器的储存设备, 主要是硬盘对吧!请问,您硬盘由启动到现在,已经存取多少数据呢?这个时候就得要 iostat 这个命令的帮忙了! 不过,默认 CentOS 并没有安装这个软件,因此你必须要先安装他才行!如果你已经有网络了, 那么使用『 yum install sysstat 』先来安装此软件吧!否则无法进行如下的测试喔!

[root@www ~]# iostat [-c|-d] [-k|-m] [-t] [间隔秒数] [侦测次数]
选项与参数:
-c  :仅显示 CPU 的状态;
-d  :仅显示储存设备的状态,不可与 -c 一起用;
-k  :默认显示的是 block ,这里可以改成 K bytes 的大小来显示;
-m  :与 -k 类似,只是以 MB 的单位来显示结果。
-t  :显示日期出来;

范例一:显示一下目前整个系统的 CPU 与储存设备的状态
[root@www ~]# iostat
Linux 2.6.18-92.el5 (www.vbird.tsai)    06/03/2009

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.35    0.31    0.25    0.03    0.00   99.06

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
hda               0.29         3.46         4.01    1116645    1295796
# 瞧!上面数据总共分为上下两部分,上半部显示的是 CPU 的当下资讯;
# 下面数据则是显示储存装置 /dev/hda 的相关数据,他的数据意义:
# tps       :平均每秒钟的传送次数!与数据传输『次数』有关,非容量!
# kB_read/s :启动到现在平均的读取单位;
# kB_wrtn/s :启动到现在平均的写入单位;
# kB_read   :启动到现在,总共读出来的文件单位;
# kB_wrtn   :启动到现在,总共写入的文件单位;

范例二:每两秒钟侦测一次,并且共侦测三次储存装置
[root@www ~]# iostat -d 2 3
Linux 2.6.18-92.el5 (www.vbird.tsai)    06/03/2009

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
hda               0.29         3.46         4.01    1116645    1296276

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
hda               0.00         0.00         0.00          0          0

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
hda               0.00         0.00         0.00          0          0
# 仔细看一下,如果是有侦测次数的情况,那么第一次显示的是『从启动到现在的数据』,
# 第二次以后所显示的数据则代表两次侦测之间的系统传输值!举例来说,上面的资讯中,
# 第二次显示的数据,则是两秒钟内(本案例)系统的总传输量与平均值。

透过 lspci 及 iostat 可以约略的了解到目前系统的状态啊! 还有目前的主机硬件数据呢!知道这些资讯后,我们就可以来玩一些比较不一样的东西罗! ^_^


小标题的图示驱动 U盘 装置

在现在的计算机里面,你或许真的无法想像没有 U盘 介面装置的主机~ 因为不论我们的键盘、鼠标、打印机、扫描仪、闪盘等等,几乎都是使用到 U盘 来作为传输的介面的。 所谓这 U盘 (Universal Serial Bus) 最早是在 1994 年被发展出来,到 1996 年前后发展出 version 1.0 ,当时的速度大约在 12Mbit/second,到了 2000 年发展出 version 2.0 ,这一版的速度则提高到 480Mbit/second, 这也是目前使用最广泛的一个速度。2008 年则释出 U盘 3.0,这一版的速度比 2.0 要快十倍喔! 不过目前市面上的产品还是非常的少见。(注2)

U盘 有很多的优点啦,包括他是可以延伸的,每个 U盘 port 都可以最多接到 127 个装置! 速度又快,又具有 Plug and Play (随插即用) 的优点,所以近期以来被用来作为携带式装置的主要数据传输介面呢!


  • 关於 U盘 的芯片版本

目前 U盘 1.1版本的控制器主要有两种规格,分别是:

  • OHCI (Open Host Controller Interface):主要由 Compaq 所发展,包括 Compaq, SiS, ALi 等等厂商发展的芯片都是用这个模块;

  • UHCI (Universal Host Controller Interface):主要由 Intel 所发展, 包括 Intel, VIA 等等厂商发展的芯片都是使用这个模块。

由於我们的 Linux 会将这两种 U盘 的驱动程序加载,因此不论你的 U盘 是使用哪种芯片,我们的 Linux 都可以顺利的侦测到并且正确的驱动的啦!至於 U盘 2.0 在 Linux 上都以 Enhanced Host Controller Interface (EHCI) 来驱动的。我们使用 lsmod 来找一下 hci 这个关键字看看,鸟哥的测试主机驱动了多少 U盘 模块了呢?

[root@www ~]# lsmod | grep hci
Module                  Size  Used by
uhci_hcd               25421  0
ohci_hcd               23261  0
ehci_hcd               33357  0
# 三个模块都有加载,再来找一下 ehci_hcd 的说明看看:

[root@www ~]# modinfo ehci_hcd
filename:       /lib/modules/2.6.18-92.el5/kernel/drivers/usb/host/ehci-hcd.ko
license:        GPL
author:         David Brownell
description:    10 Dec 2004 U盘 2.0 'Enhanced' Host Controller (EHCI) Driver
srcversion:     006DD5CF82C35E943696BE7
....(底下省略)....


  • 启动 U盘 的闪盘或快闪碟

我们之前谈过 U盘 的磁碟代号是: /dev/sd[a-p] 之类的,类似 SCSI 硬盘的代号, 这是因为 U盘 的磁碟装置使用 SCSI 相关的装置代号,因此,如果您要使用 U盘 闪盘的话,嘿嘿!那么您的 Linux 主机就得要支持 SCSI 装置才行~

此外,为了让 U盘 磁碟装置顺利的被使用,因此,有时候还得要启动 usb-storage 模块才行~ 所以罗,光是有 U盘 的 uhci 模块还不行,还得要配合 usb-storage 啦~ 而一般 U盘 的装置都会被主动的侦测,核心也会主动的加载 U盘 装置的驱动模块, 所以你应该不需要手动加载 usb-storage 才是。不过,如果老是无法驱动时,那么不妨手动加载 usb-storage 试看看。

顺利加载各个需要的模块之后,直接下达 fdisk -l 应该就可以看到您的 U盘 闪盘的装置代号才是!一般来说,如果是第一个 U盘 磁碟装置的话, 应该可以看到一个名为 /dev/sda1 的装置,使用 mount 将他挂载起来即可啊!

在这里要强调的是,如果你是使用类似笔记本计算机的 2.5 寸硬盘作为随身硬盘的话,由於他就是硬盘的规格, 因此你可以看到一个完整的 /dev/sda 之类的磁碟资讯,你也可以进行额外的分割。但如果是快闪碟的话, 快闪碟并不是传统的硬盘,他并不是使用磁碟读取头与磁碟盘来记录数据,因此你只能使用 /dev/sda1 之类的档名来挂载, 理论上是无法进行额外分割的喔!这部份要特别强调一下。


  • 启动 U盘 打印机

要驱动 U盘 打印机也很简单啊!只要做好 U盘 打印机的装置代号即可!反正我们的 usb 模块已经加载了嘛! 目前的 CentOS 5.x 会主动的帮我们创建打印机的装置档名,所以底下的动作我们根本不需要进行。 不过如果你的 Linux 是较老式的系统,那可能得要使用 mknod 来创建起 U盘 打印机才行。 透过核心装置代码(注3)的查询,我们知道 U盘 打印机的主要/次要装置代码为 180 /0~15, 所以,创建的方法为:

# 假设你已经有 /dev/usb/lp0 ,那我们来尝试创建 /dev/usb/lp1 看看
[root@www ~]# mkdir -p /dev/usb
[root@www ~]# mknod /dev/usb/lp1 c 180 1
[root@www ~]# chown root:lp /dev/usb/lp1
[root@www ~]# chmod 660 /dev/usb/lp1
[root@www ~]# ls -l /dev/usb/lp1
crw-rw---- 1 root lp 180, 1 Jun  3 14:27 /dev/usb/lp1
[root@www ~]# echo "testing" > /dev/usb/lp1

在我们一般的生活当中,最常见的两种 U盘 装置就是闪盘与打印机了, 所以鸟哥在这里仅就这两种装置来介绍启动的方法,如果您还有其他的 U盘 装置要驱动的话, 请参考底下这一篇的内容啊!


小标题的图示使用 lm_sensors 取得温度、电压等资讯

玩计算机硬件的朋友们一定都听过所谓的『超频』这玩意儿,所谓的『超频』就是让系统原有的运行时脉添加, 让 CPU/PCI/VGA 前端汇流排速度提升到非正规的频率,以取得较高的计算机效能。 这在早期对於单价还是很贵的计算机来说,可以让我们花比较少的钱去获得比较高效能的计算机哩! 不过,超频要注意的地方可不少,包括电压不可高出 CPU 的负荷、CPU 风扇必须要强有力, 避免因为温度过高导致系统死机等等。

不过现今的计算机速度已经够快了,我们的 Linux 主机也实在不建议您超频,因为整体效能可能添加不了多少, 但是却会让您的主机寿命减少、系统不稳定呢!而由早期超频的『技术培养』过程当中,我们知道『CPU 的温度、系统的相关电压』 是影响主机是否稳定的一项重要指标喔!所以罗,如果能够随时掌握温度、电压, 其实对於系统还是有一定程度的监控啦。

其实各大主要主板商与芯片组,都会有温度、电压的侦测器在主机内,这个我们可以在主板操作手册或者是在 BIOS 内的『 Monitor 』项目找到相关的温度、电压数据。在 Windows 系统当中,厂商有推出相关的软件来侦测,那么在 Linux 当中呢?呵呵!也是有啊!那就是 lm_sensors 这套好用的东西了!

目前较新的 Linux distributions 都默认会帮忙安装这套软件,但如果你的 Linux 是比较早期的版本,那么就只好请您自行前往 http://www.lm-sensors.org/ 官方网站直接下载 tarball 并且安装他罗~


  • 侦测主板的型号

由於 lm_sensors 主要是依据『主板芯片组的型号,带入相关的模块后,再侦测其温度、电压』的, 如果该主板芯片组并不是 lm_sensors 所支持的模块,那自然就无法找出该芯片组的温压罗~ 所以啦,我们在使用 lm_sensors 之前,必须要确定主板是有提供温度、电压的, 再来,必须要加载主板的驱动模块,然后才有办法使用 lm_sensors 来进行侦测。

好消息是, lm_sensors 本来就提供我们一个不错的主板芯片组侦测程序, 那就是 sensors-detect 这个命令。侦测到主板芯片组后,将该资讯写入配置档当中, 就可以使用 sensors 命令直接读取目前的 CPU、机壳、电源、风扇等等的资讯了! 直接来作看看吧!

[root@www ~]# sensors-detect
# sensors-detect revision 1.413 (2006/01/19 20:28:00)
....(中间省略)....
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 `i2c-sis630' for device 00:00.0: Silicon Integrated Systems SIS630
Probe succesfully concluded.
# 接下来的行为当中,反正你就一直按 Enter 就可以了!让他自动去侦测!

To make the sensors modules behave correctly, add these lines to
/etc/modprobe.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-sis630
modprobe i2c-isa
# I2C chip drivers
modprobe eeprom
modprobe it87
# 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.

上面就进行好型号的侦测,并且主动的创建了 /etc/sysconfig/lm_sensors 的参数配置档。不过我们依旧需要进行一些额外的处理! 包括让系统启动主动加载模块的功能!这样我们就能够直接使用 lm_sensors 来侦测而不需要手动加载侦测模块啊! 你可以这样做:

[root@www ~]# vi /etc/modprobe.conf
alias char-major-89 i2c-dev
# 将刚刚侦测到的模块给他写入到这个文件当中!

[root@www ~]# vi /etc/rc.d/rc.local
# I2C adapter drivers
modprobe i2c-sis630
modprobe i2c-isa
# I2C chip drivers
modprobe eeprom
modprobe it87
sleep 2s
/usr/bin/sensors -s

[root@www ~]# chkconfig --list  lm_sensors
lm_sensors      0:off   1:off   2:on    3:on    4:on    5:on    6:off
# 确定 lm_sensors 默认启动会启动即可!此时你可以重新 reboot ,
# 或者运行上述的 modprobe 之后,在进行底下的侦测罗!


  • 利用 sensors 侦测温度、电压等硬件参数

侦测的命令就是 sensors 啊!直接动作吧!

[root@www ~]# sensors
it87-isa-0290  <==使用到的模块功能!
Adapter: ISA adapter
VCore 1:   +1.55 V  (min =  +1.42 V, max =  +1.57 V)
VCore 2:   +1.09 V  (min =  +2.40 V, max =  +2.61 V)   ALARM
+3.3V:     +1.25 V  (min =  +3.14 V, max =  +3.47 V)   ALARM
+5V:       +2.69 V  (min =  +4.76 V, max =  +5.24 V)   ALARM
+12V:      +5.82 V  (min = +11.39 V, max = +12.61 V)   ALARM
-12V:     -17.05 V  (min = -12.63 V, max = -11.41 V)   ALARM
-5V:       -7.40 V  (min =  -5.26 V, max =  -4.77 V)   ALARM
Stdby:     +2.07 V  (min =  +4.76 V, max =  +5.24 V)   ALARM
VBat:      +0.40 V
fan1:        0 RPM  (min =    0 RPM, div = 2)
fan2:        0 RPM  (min = 3000 RPM, div = 2)          ALARM
fan3:     2689 RPM  (min = 3000 RPM, div = 2)
M/B Temp:    +33°C  (low  =   +15°C, high =   +40°C)   sensor = diode
CPU Temp:    +37°C  (low  =   +15°C, high =   +45°C)   sensor = thermistor
Temp3:        -5°C  (low  =   +15°C, high =   +45°C)   sensor = disabled
# 你可以发现一大堆的错误信息!没关系的!这是因为鸟哥的主板太旧,
# 导致 lm_sensors 误判,所以输出的结果就会有点差异!至少转速与温度是正常的啦! 

基本上,只要这样的步骤,您的主机就可以主动的侦测温度与电压,还有风扇转速等等资讯。 不过,事实上,由於主板设计的不同,所以侦测的结果很有可能是有误差的。以鸟哥的情况来说, 我所使用的主板型号是太旧了,lm_sensors 确实捉到错误的资讯啊!此时或许就需要进行调校了。 调校的步骤很简单,先确定使用 sensors 显示的结果每个项目代表的意义 (可以参考 BIOS 硬件侦测结果的顺序来排列) ,然后进入 /etc/sensors.conf 进行修改即可。

如果想要以图表输出的话,那么不妨搭配 MRTG 来进行网页绘图~ 这部分网络上面文章就比较多一点,也可以先参考鸟哥的一篇旧文章:


小标题的图示udev 与 hal 简介

从上面的介绍中,我们不难发现目前新的 Linux distributions 大多能够类似窗口操作系统,就是能够即时的侦测随插即用硬件! 例如 U盘 介面的各项硬件设备等等。那我们也知道其实所有的硬件都是文件,这些装置文件必须要使用 mknod 才能创建的! 那到底 (1)硬件如何侦测与 (2)装置文件如何主动创建呢?这就与 udev 及 HAL 这两个东西有关了。

事实上,系统所有的硬件应该都是给核心管理的,但我们知道操作系统在内存内是受保护的,使用者根本无权使用操作系统核心。 为了解决这个问题於是有 udev 的产生。这个 udev 是个使用者层级软件,他可以让使用者自行处理 /dev 底下的装置! 如此一来就能够解决一般用户在使用类似 U盘 时,需要额外硬件的问题。(注4)

但我们如何知道系统上面多了个硬件呢?这时候就得要硬件抽象层 (Hardware Abstraction Layer, HAL) 的辅助了。 HAL 可以将系统目前的所有硬件进行快照,并持续检视这个快照的内容(注5)。如果有新的 PnP 硬件插入时, HAL 就会发现目前的硬件与快照不同,此时就会通知 udev 进行新的装置的建置了!如此一来,两者的配合就能够让你的装置 PnP 罗!

目前这两个咚咚在 CentOS 上面都会是启动的,其中 udev 是在 /etc/rc.d/rc.sysinit 就启动了, 而 hal 则是在 /etc/init.d/haldaemon 这个服务才启动。让我们检查看看是否真的有启动啊!

[root@www ~]# pstree -p | egrep '(udevd|hal)'
        |-hald(4814)---hald-runner(4815)-+-hald-addon-acpi(4822)
        |                                |-hald-addon-keyb(4827)
        |                                `-hald-addon-stor(4837)
        |-udevd(401)
# 确实有启动喔!一个是 udevd 一个是 hald 啦!

老实说,如果你已经启动了这两个家伙,那么其他的事不需要进行,交给这两个小玩意儿自己处理即可。 但如果你想要多了解 udev 是如何进行装置的创建时,那么我们可以来玩玩底下的咚咚。


  • 自订装置名称进行装置创建

假设你想要将你的闪盘取名为较有趣的装置,不想再使用类似 /dev/sda1 之类的名称时,可以怎么作呢? 我们可以透过更改 udev 的守则 (rule) 来使用 mknod 创建不同名称的装置文件。举例来说, 鸟哥这部测试机的硬盘使用为 /dev/hda ,因此第一个 U盘 快闪碟装置应该是 /dev/sda1 才对! 如果你的系统使用 SATA 磁碟,那么你的快闪碟可能就得要由 /dev/sdb1 开始编号起来了。

udev 创建装置文件的守则放置到 /etc/udev/rules.d/ 目录下,在该目录下的文件可以依序进行处理的。 以最简单的语法来看,在该目录下可以使用的变量与对应可以是:

KERNEL=="核心能够分析到的档名", NAME="你要使用的装置档名"

当然还有很多语法,不过这里我们先不介绍,有兴趣的查一下本文最后的连结去看看吧! 假设鸟哥的 /dev/sda1 要取名字成为 /dev/vbirdusb ,你可以这样做:

# 1. 先在守则目录下新增一个文件,档名配置为 99-vbirdusb.rules 好了
[root@www ~]# cd /etc/udev/rules.d/
[root@www rules.d]# vi 99-vbirdusb.rules
KERNEL=="sda1", NAME="vbirdusb"
# 上面这一行就足够啦!注意,档名前的 /dev 不需要写入!

# 2. 插入一支闪盘,然后检查看看:
[root@www rules.d]# ll /dev/sda* /dev/vbirdusb
brw-r----- 1 root disk 8, 0 Jun  3 16:43 /dev/sda
brw-r----- 1 root disk 8, 1 Jun  3 16:43 /dev/vbirdusb
# 唔! /dev/sda1 不见了!取而代之的是 /dev/vbirdusb 啦!

[root@www rules.d]# mount /dev/vbirdusb /mnt
[root@www rules.d]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
....(中间省略)....
/dev/vbirdusb           976064    192784    783280  20% /mnt
# 很有趣吧!装置名称被鸟哥改过了!

虽然这样很具有个性化的需求,不过总是不太可靠~万一哪天忘记自己有进行这些动作,偏偏用核心默认的档名去处理时, 会发生很多不明的错误啊!所以将刚刚创建的数据反向删除回来吧!

# 1. 先卸载系统吧!
[root@www ~]# umount /dev/vbirdusb

# 2. 拔除闪盘,并将守则档删除!
[root@www ~]# rm /etc/udev/rules.d/99-vbirdusb.rules

# 3. 再插入闪盘,测试一下档名有没有恢复正常?
[root@www ~]# ll /dev/sda*
brw-r----- 1 root disk 8, 0 Jun  3 16:50 /dev/sda
brw-r----- 1 root disk 8, 1 Jun  3 16:50 /dev/sda1
# 看起来,档名确实恢复正常罗!

 
     
http://linux.vbird.org is designed by VBird during 2001-2011. ksu.edu 

本网页主要以Firefox配合解析度 1024x768 作为设计依据     鸟哥自由软件整合应用研究室