|
最近更新日期:2005年11月25日
本文已不再维护,更新文章请参考此处
1. 准备好你的硬件:
1.1 硬件信息的收集: lspci, iostat... 1.2 驱动 USB 装置: 1.3 使用 lm_sensors 取得温度、电压等信息: 2. FC4 的系统操作: setup 功能 3. 利用 CUPS 架构您的打印机: 4. 特殊的 filesystem: LVM 4.1 什么是 LVM: PV, PE, VG, LV 4.2 制作一个可使用的 LVM 磁盘流程 4.3 让原有的 LVM 磁盘加大的方法: resize2fs 4.4 注意事项: 5. 额外的储存设备 iSCSI 协议的磁盘阵列: 5.1 什么是磁盘阵列 5.2 iSCSI 磁盘阵列的架设与使用 6. 参考数据 7. 针对本文的建议:http://phorum.vbird.org/viewtopic.php?t=23898 大标题的图示准备好你的硬件:
我们这个章节的主要目的在于更深入的了解我们 Linux 主机的硬件,并进一步的将这些硬件信息汇整,
最好是还能够进行一些侦测与控管啦!这样才可以在最短的时间内了解我们 Linux 主机是否可能发生问题啊!
这包括主机的电压值是否正确?主机与 CPU 温度是否过高等等。而为了这些目的,当然啦,
我们就得要先准备好自己的 Linux 主机的硬件啊,至少得要先了解你的 Linux 主机是啥硬件配备啊,
否则,假如你的硬件本身就是不支持温度侦测,那花再多时间在温度数值的取得,嘿嘿!是没有意义的啦!
来给他进行下去啰! ^_^
小标题的图示硬件信息的收集: lspci, iostat...
还记得我们在 开机与关机流程分析 当中提到的核心功能吧?
我们的 Linux kernel 会在开机时,以核心内建的功能去侦测主机的种种硬件,
并尝试加载适当的驱动程序 (模块, modules) 来让硬件正确的启动与运作。
而核心所侦测到的各项硬件装置,后来就会被记录在 /proc 当中了。
包括 /proc/cpuinfo, /proc/partitions, /proc/interrupts 等等。
更多的 /proc 内容介绍,先回到 程序与资源管理
那一篇去瞧一瞧先!
Tips: 当然还是得要再提到,核心所侦测到的硬件可能并非完全正确喔! 他仅是『使用最适当的模块来驱动这个硬件』而已,所以有时候难免会误判啦! 所以啰,如果你对于系统的稳定性是斤斤计较的,那么或者重新编译一次你的核心, 应该也是个不错的主意。但是,一般来说,我们没有很建议你一定要重新编译核心就是了。 关于核心的编译,瞧一瞧下个章节吧! ^_^ 鸟哥的图示
基本上,想要知道您 Linux 主机的硬件配备,最好的方法还是直接拆开机壳去察看上面的信息, 如果环境因素导致您无法直接拆开主机的话,那么直接 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 找到的是目前主机上面的硬件配备,那么整部机器的储存设备,
主要是硬盘对吧!请问,您硬盘由开机到现在,已经存、取多少数据呢?
这个时候就得要 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 # 仔细看一下,如果是有侦测次数的情况,那么第二次以后所显示的数据, # 则代表两次侦测之间的系统传输值!举例来说,上面的信息当中, # 第二次显示的数据,则是两秒钟内(本案例)系统的总传输量与平均值。 小标题的图示驱动 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 的控制器主要有两种规格,分别是:
也就是说,基本上,如果你使用 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 的磁盘代号是: /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 打印机的装置代号得使用 mknod 这个指令才行。
此外, USB 打印机装置的 major, minor 代号分别是 180 0,
所以,建立的方法为:
在我们一般的生活当中,最常见的两种 USB 装置,就是随身碟与打印机了,
所以鸟哥在这里仅就这两种装置来介绍启动的方法,如果您还有其他的 USB 装置要驱动的话,
请参考底下这一篇的内容啊!
至于 USB 打印机的实际驱动,我们还得要继续 CUPS 章节的内容才行喔![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 小标题的图示使用 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
由于 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 去进行修订的工作! [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
大标题的图示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 后,会出现如下画面:
Setup 的认证机制部分 图、Setup 的认证机制部分 关于使用者身份认证上面,Linux 提供了相当多的机制喔!包括 Linux 本机系统上面的 MD5 密码编码,以及利用 shadow 将密码移动到 /etc/shadow 档案当中等等。当然啦, 我们也可以利用网络上面的身份认证主机,包括 NIS, LDAP 以及 Windows 系统提供的认证主机等等, 只不过这些网络主机提供的服务呢,我们都得要进行客户端联机的设定,并不是启动就会生效的! 所以啦,我们仅有本机密码档案而已,当然只要选择这两个数据就够了。另外, 这个设定数据主要是修改 /etc/sysconfig/authconfig 档案哩! 你也可以自行手动修改该档案即可。
按下 Firewall configuration 后,会出现如下画面:
Setup 的防火墙部分 图、Setup 的防火墙部分 注意一下,由于我们在安装的时候,并没有选择防火墙,因此,这里预设会是 (Disabled) 那一项, 如果你想要启动防火墙,那么就得要先选择 Enabled 后,将光标移动到 Customize 后, 才能够决定你想要服务项目。按下 Customize 后,会出现如下画面: Setup 的防火墙部分 图、Setup 的防火墙部分 这个地方不是三言两语讲的完的!包括信任网域,以及允许进入的服务器封包〜 很是麻烦。基本上,你只要这样想就好了:
这个画面如下:基本上,其实就是选择键盘按钮的对应表而已啦!
这个设定会修改 /etc/sysconfig/keyboard 就是了。
Setup 的键盘选择部分 图、Setup 的键盘选择部分
请选择您的鼠标类型啊!其实直接修改 /etc/sysconfig/mouse 也是可以啦!
Setup 的鼠标选择部分 图、Setup 的鼠标选择部分
在网络的部分,由于我们的 Linux 支持的网络联机方式众多,而我们台湾地区比较常使用以太网络
(Ethernet) 的架构,如果你有网络卡,那么别怀疑,当然是选择 Ethernet 啰〜
如下图所示啦!
Setup 的网络选择部分 图、Setup 的网络选择部分 选择完毕之后,会出现如下窗口,这个就比较麻烦了〜基本上,仅有两种格式。 第一种,你可以直接勾选『Use DHCP』那个项目,让类似 IP 分享器自动的帮你设定好 IP; 另一种,就如同下列图样,不要勾选 DHCP,直接给予一个 IP 以及相关网络参数即可。 这些网络参数的设定我们会在服务器篇再介绍的啦! Setup 的网络选择部分 图、Setup 的网络选择部分
这个项目在决定你的打印机类型啦!基本上,他更动的就是 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/sysconfig/clock 有关的设定项目而已。
实际上,下面图示出现的咚咚,就是在 /usr/share/zoneinfo/ 有关而已。
Setup 的时区选择部分 图、Setup 的时区选择部分
说穿了,其实就是直接设定 X Server 的配置文件,在 Xorg 就是 /etc/X11/xorg.conf 啦!
至于整个结果有没有成功,还得要观察 /var/log/Xorg.setup.log
这个档案的输出结果才能了解喔!
鸟哥个人认为,这个 setup 的工具是很好用的〜只是,如果能够完全清楚整个系统架构的话,
再来玩这个小程序会比较好啦! ^_^。当然啰,打印机的工具实在很不错〜
可以提供给您参考参考!大标题的图示利用 CUPS 架构您的打印机:
打印机对于日常生活来说,很重要吧!呵呵〜没错啊!尤其我们的 Linux 主机如果未来还要作为
Printer server 的话,那么自然就得要先建立好打印机的联机啦!刚刚前一个小节我们仅是简单的利用
setup 来建立一部不存在的打印机而已〜基本上,你必须要了解到整个 Linux 针对打印的动作是如何,
才能够清楚的了解到我们要如何管理打印机啊! ^_^
在打印机的设定当中,鸟哥曾经发生过一件相当糗的事情,我拼了老命的设定
LPRng 以及 CUPS 就是无法设定好 Printer ,虽然已经连上打印机了,但是就是印出来都是乱码,
很伤脑筋〜等到我花了一整天去恶搞之后,最后竟然发现,错误的地方在于『BIOS 的并行端口设定』唉!
伤脑筋的很〜还记得每次开机的时候系统都会去读取 BIOS 的设定吗?一般来说,按下 DEL
按键后,会进入 BIOS 的设定画面,在该画面当中,选择相关的设定参数,与 Parallel
有关的项目,将『模块』改成 EPP/SPP 吧!这样就可以支持您的打印机了!天吶!
就因为这个设定值,让鸟哥花了一两天的时间,还差一点将主机砸掉....
在 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 管理打印机的 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 格式有不同的转换方法喔:
事实上, CUPS 已经帮我们建立了很多 PPD 定义档了,透过这些 PPD 档案的描述, 我们的 CUPS 可以自行取得适用的滤镜,不再需要像以前的 LPRng ,还得要自行测试滤镜是否工作成功说! 这些适用的 PPD 都被放置到底下的目录当中了:
在一般内部局域网络当中,较常见的打印机链接方式与分享方式有底下这几种:
在 FC4 底下要启动打印机的话,相当的简单啊!其实只要照着刚刚我们上面提到的
setup 指令内的 printer configuration
的步骤,一步一步的给他设定下去,就 OK 了啦〜但如果你的系统并不是 FC4 的话,
怎么办啊?没关系〜我们可以手动来建立 CUPS 所需要的所有资料啊〜
更多的详细信息可以参考 cups 套件提供的 documents 或者是 man page 说〜
( rpm -ql cups ) 。
在底下,鸟哥以我们研究室的 HP LaserJet 2300 这一部打印机作为介绍, 这部打印机本身具有网络卡,他的 IP 假定为 192.168.10.119 , 接下来,就开始来设定吧!
假设你目前的 FC4 主机上面接着一台 USB 接口的打印机,
你的系统并不允许使用 setup 的 Printer configuration 设定,
这台 USB 接口的打印机是 Samsung 的 ML-1210 打印机,
请问,您可以如何在 FC4 上面安装这部打印机?
Tips: 事实上,并不是所有的打印机厂商都有针对 Linux 操作系统释出相关的驱动程序, 所以,如果您想要购买能够让 Linux 使用的打印机时,还是建议您先前往上面提到的 http://www.linuxprinting.org/printer_list.cgi 这个网页进行查询〜 比如, HP 等大厂的打印机对于 Linux 的支持度就很不错〜而如果您有旧的打印机, 例如鸟哥的 Lexmark X6150 这部机器,呵呵〜那就不要想太多了〜安装上面,实在很麻烦〜 @_@ 但这并不是 Linux 的问题,您可以发起一人一信,寄信给打印机开发商,让他们重视 Linux 使用者群吧! 鸟哥的图示
除了使用手动的方式增加打印机之外,其实,我们还可以透过 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 建立起来的密码数据啊! 利用 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 的咚咚。我们先来作一些简单的解释吧!
LVM 各组件之间的相关性 图、LVM 各组件之间的相关性 如此一来,我们就可以利用 LV 这个玩意儿来进行系统的挂载了。不过,您应该会觉得奇怪的是, 那么我的资料写入这个 LV 时,到底他是怎么写入硬盘当中的? 呵呵!好问题〜其实,依据写入机制的不同,而有两种方式:
总之,鸟哥认为,整个 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
要建立 PV 其实很简单,只要直接使用 pvcreate 即可!我们来谈一谈与 PV 有关的指令吧!
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 就没有任何资料啊!
建立 VG 及 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 ]
创造出 VG 这个大磁盘之后,再来就是要建立分割区啦!
这个分割区就是所谓的 LV 啰!假设我要将刚刚那个 vbirdvg 磁盘,分割成为 vbirdlv ,
整个 VG 都被分配到 vbirdlv 里面去!先来看看能使用的指令后,
就直接工作了先!
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
这个部分鸟哥我就不再多加解释了!直接来进行吧!
[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 小标题的图示让原有的 LVM 磁盘加大的方法: resize2fs
好了,了解了如何制作 LVM 之后,接下来则是比较进阶的使用啦!我们知道 vbirdvg 已经有两个 PV,
但是实际上,我们还有个 /dev/hdb3 的实体 partition 啊!那么如何将这个 /dev/hdb3
加入到 vbirdvg ,且让 vbirdlv 增加呢?其实也不难啦!你必须要:
[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 [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 事实上, resize2fs 也可以用来处理 ext2/ext3 原本 filesystem 的大小。 可以先以 fdisk 处理分割区,再以这个 resize2fs 来放大或者缩小 partition 啊! 要注意,待处理的 partition 不可挂载喔! 小标题的图示注意事项:
先来说一说,你必须要知道的一些 LVM 的指令整理:
任务 PV VG LV
搜寻(scan) pvscan vgscan lvscan
建立(create) pvcreate vgcreate lvcreate
列出(display) pvdisplay vgdisplay lvdisplay
增加(extend) vgextend lvextend
减少(reduce) vgreduce lvreduce
删除(remove) pvremove vgremove lvremove
改变容量(resize) lvresize
另外,还需要以 resize2fs 来修订文件系统实际的大小才行啊! ^_^ 。至于虽然 LVM 可以弹性的管理你的磁盘容量,但是要注意, 如果你想要使用 LVM 管理您的硬盘时,那么在安装的时候就得要做好 LVM 的规划了, 否则未来还是需要先以传统的磁盘增加方式来增加后,移动数据后,才能够进行 LVM 的使用啊! 无论如何还是要跟大家报告的,鸟哥个人认为 LVM 比较适合用在制作一个具有弹性的磁盘容量的环境, 并不是要制作一个高效能的储存设备的环境,所以鸟哥在 lvcreate 时, 才没有讲到如何制作 triped 模式的参数啊!如果真的想要制作一个高可靠性、 高性能的储存环境,那还是得重硬件来着手,譬如底下我们要谈一谈的 iSCSI 的 RAID 储存架构,应该就是个不错的选择喔! ^_^ 另外,如果你想要将 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 大标题的图示额外的储存设备 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 有这几种:
两个以上的磁盘整合成为一个实体的储存装置;这个模式的特色是,
所有的数据是『一个一个填满后,才将数据继续写到下一个磁盘上』;
由于数据是一个一个写入到不同的硬盘当中,因此,整个磁盘的读取效能并不会增加,
此外,由于数据具有连续性,因此,若不小心有任何一个磁盘损毁时,嘿嘿!
您的数据可能通通救不回来了〜这种模式唯一的好处,
就是磁盘的空间完整的被利用完毕!不会有任何保留空间 (redundant)。
这种模式主要是利用容量相同的磁盘来达成,效能会比较好。
所谓的交错 (stripe) 是因为档案数据是同步洒到不同的磁盘上头去的意思,
也就是说,假设我有两颗磁盘设定成 RAID-0 ,那么当我有 100MB 数据要写入时,
则 100MB 会被拆成两个 50MB 分别写入不同的磁盘上头去!
所以啰,因为每一个磁盘写入的数据量只有一半,因此,读写的效能都会大大的增加! 而且越多颗磁盘所造成的 RAID-0 装置,理论上,效能增加的越明显。 但是这种模式有个最大的问题,那就是,因为一笔数据被拆成几个部分分布在不同的磁盘上头, 因此『任何一颗磁盘的损毁,都会让你的数据救不回来!』 另外,如果使用不同容量的磁盘来达成 RAID-0 时,则在储存数据长大到一定程度时, RAID-0 的效能会变差。假设我用了一颗 20GB 两颗 16GB 的硬盘好了, 那么当总数据量少于 48GB (16x3) 时,效能是很不错的。 但是当超过 48GB 时,则数据仅能储存在 20GB 那一颗了 (可用容量剩下 4GB 啊!), 所以啰,当然效能就变差了啊!
这种模式也是需要相同的磁盘容量的,最好是一模一样的磁盘啦!
如果是不同容量的磁盘组成 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 会整合多个磁盘 (通常需要三个以上),然后每部磁盘驱动器上面都会记录少许的其他部磁盘驱动器的信息 (
parity information ),由于这个动作,因此,实际上可以使用的容量其实是
(N-1)*S ,那个 N 为全部的磁盘驱动器总数,S 则是最小的那个磁盘的容量。
少掉的空间就是用来作为信息记录用的。
呵呵!经过上面的说明,您应该会晓得,为何企业会需要使用磁盘阵列了吧?
没错,因为 RAID 不但可以增加数据存取的效能,
而且对于备份与数据的可靠性而言,他具有相当程度的类似备份的功效,因此,
很适合需要大量存取数据的主机系统。所以啰,目前很多的在线储存设备,
基本上,都是透过 RAID 装置来达成的〜底下我们就大略的来介绍一下目前挺流行的
iSCSI 接口的储存设备吧!( 如果对于 Linux 上面的 RAID 有兴趣,
可以参考这一篇:http://www.tldp.org/HOWTO/ Software-RAID-HOWTO-1.html )由于这个机制的存在,因此,当那 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), 所以写入的效能虽然是会增加不少,不过,不容易计算出来实际的增加的效能啦〜 小标题的图示iSCSI 磁盘阵列的架设与使用
由于企业的数据量越来越大,而且重要性与保密性越来越高,尤其类似数据库的内容,
哇!常常容量单位是以 TB (1TB = 1024GB) 在进行计算的;可怕吧!
所以啰,上一个小节内提到的磁盘阵列 (RAID) 的应用就很重要了。
不过, RAID 毕竟只是在一部主机上面的储存装置,如果想要提供给网络上面的其他 client
端来使用,可能还需要主机提供相关的服务才行啊!而且,透过网络主机来连接,
效能上可能是卡在网络传输速度,而不是 RAID 的速度说。而且, RAID 装在一部主机上面时,
能够提供给 client 端使用的情况有限啦〜大多仅是数据而已。
为了解决网络应用上面的,很多厂商提供了一些不错的想法。首先,就是那个
NAS (Network Attach Storage),基本上, NAS 其实就是一部客制化好的主机了,
只要将 NAS 连接上网络,那么在网络上面的其他主机就能够存取 NAS 上头的数据了。
简单的说,NAS 就是一部 file server (文件服务器) 啰〜
不过, NAS 由于也是接在网络上面,所以,如果网络上有某个 client 大量存取 NAS 上头的资料时,
是很容易造成网络停顿的问题的,这个比较麻烦点〜
Tips: 在鸟哥的理解当中, NAS 基本上就是一部完整的主机, 他有独立的操作系统与运算、储存等处理单元,其他的 client 端只要能够与 NAS 的协议兼容,那么他就能够存取 NAS 上头的数据啊! 鸟哥的图示
我们需要大量的存取装置,目的就是为了要强化存取效能与总可用容量,现在知道总可用容量可以使用 RAID
技术来加强,但是存取效能呢?透过网络来存取时,确实可能导致存取效能的低落啊。
为了解决这个问题,因此后来很多厂商开发出所谓的光纤信道。光纤信道的速度要快上很多,
目前标准的光纤信道是 2GB ,未来还可能到达 10GB 以上呢〜
不过,使用光纤等技术较高的设备,当然就比较贵一些。
利用光纤,配合一些硬件的标准化,后来一些厂商提出了 SAN (Storage Area Network) 架构;
SAN 利用较高阶的光纤信道来进行主机与储存设备的连接,
让主机透过光纤来快速存取储存设备内的数据,而不是透过较慢的网络架构。
但是 SAN 架构的初设成本太贵,而且维护费用颇高!
拜以太网络盛行,加上技术成熟之赐,现今的以太网络媒体 (网络卡、交换器、路由器等等设备)
已经可以达到 GB 的速度了,离 SAN 的光纤信道速度其实差异已经缩小很多啦〜
那么是否我们可以透过这个 GB 的以太网络来达到类似 SAN 的功效呢?
没错!这就是我们接下来要提到的 iSCSI 架构啦! ^_^
其实,整个 iSCSI 的架构主要分为储存设备与提供 iSCSI 联机的主机端,
而 iSCSI 则透过以太网络链接储存设备与主机就是了。
两者的关系有点像底下这个图示:
经过上面的说明,你可以了解到,其实整个 iSCSI 的储存设备并不是一个完整的主机喔,他仅是一个储存设备,
跟上头提到的 NAS 并不相同,反而有点类似 SAN 啦〜而且,这个储存设备可以让主机完整掌控,
几乎就与主机上头的 SCSI 硬盘没有两样就是了。iSCSI 架构图 图一、 iSCSI 的主机与储存设备的关系。 首先,您必须要拥有 iSCSI 接口的储存设备 (废话!不然怎么玩?) , 然后,您的 iSCSI 储存设备上面必须要具有 IP 地址,并且储存设备以网络线链接到拥有 GB 速度的 Switch 上。再来,您的主机必须要启动 iSCSI 的驱动程序, 驱动他之后,他会使用 TCP/IP 的网络协议链接到储存设备上头, 并且『将整个储存设备视为主机上面的一个 SCSI 硬盘』的模样! 也就是说,基本上,iSCSI 的储存设备就是您主机上面的一个实体硬盘, 只是这个硬盘是以 iSCSI 协议及 TCP/IP 协议来达成的。而且,他在主机上面的使用, 几乎就与实体 SCSI 硬盘没有两样!磁盘代号则为 /dev/sda... 。 底下鸟哥以 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 的设备才能够玩这一篇啊!呵呵〜 其实还挺高兴的! ^_^ 鸟哥的图示
大标题的图示参考文献
大标题的图示习题练习 ( 要看答案请将鼠标移动到『答:』底下的空白处,按下左键圈选空白处即可察看)
首先,必须要查阅得该装置的主要装置代号,亦即 180,至于次要代号则是 8 ,
再使用 mknod 来建立,因此,需要这样做:
mknod /dev/usb/lp8 c 180 8 chown root:lp /dev/usb/lp8 chmod 660 /dev/usb/lp8
这个问题很有趣喔!建议你可以先参考这一篇:
http://www.l-penguin.idv.tw/article/dd-sys-backup.htm ,主要的工作可以这样做:
2005年10月25日:准备准备〜写一些跟硬件比较有关系的数据! 2005年11月08日:准备完毕 USB 与 lm_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 来制作备份的资料! |
|
本网页主要以Firefox配合解析度 1024x768 作为设计依据 鸟哥自由软件整合应用研究室