Lab1 硬件和安装

步骤一:准备计算机
任务: 使用Red Hat Linux光盘启动系统
在启动时进入BIOS界面
设置系统启动顺序为A,CDROM,C
修改其他任何推荐的设置
保存并退出BIOS设置
步骤二:使用Anaconda(图形模式)安装Red Hat Linux
任务: 按照以下要求从光盘安装Red Hat Linux。注意,要初始化图形安装界面可能需要等待一两分钟。
l 使用检测到的鼠标配置(除非老师另有指定)
l 选择全新安装
l 使用定制安装选项
l 选择使用Disk Druid手动分区,删除所有原有的分区
l 使用以下分区方案:
n /boot 100M
n / 256M
n /usr 1000M
n swap 512M
n /var 400M
l 格式化所有分区,但是不选择检查坏块
l 使用默认的启动加载器设置(除非老师另有指定),不创建启动加载器密码
l 为网络设置选择DHCP,选择启动时激活
l 使用默认防火墙配置
l 选择适当的语言支持
l 设置对应的时区,根据老师的指示设置UTC
l 设置根密码为redhat
l 启用MD5和shaow密码模式(默认验证设置)
l 选择安装X window,不选任何其他组件
l 切换到tty5查看文件系统格式化的过程(使用Ctrl-Alt-5,用Alt-7切换回安装向导)
l 创建启动软盘可选
l 使用检测到的显示器和图形卡设置(除非老师另有指定)
l 配置使用图形界面登录
l 在安装结束后重启,完成初始化设置,不注册Red Hat Network

安装结束后启动系统,以root帐号登录,并检查以下文件:
l /var/log/messages
l /var/log/dmesg

以上安装的系统使用twm视窗管理器。通过后续的实验,我们将安装更多的软件包,实现功能的扩展和界面的美观

步骤三:使用NFS,FTP或HTTP安装Red Hat Linux
任务: 破坏现有的系统,重新安装Red Hat Linux。事先准备安装光盘1或从老师那里得到启动的介质。

破坏现有系统:
cat /var/log/messages > /dev/hda; reboot
cat /var/log/messages > /dev/sda; reboot

重启后使用启动介质启动,按照以下要求安装(由于已经覆盖了分区表,系统将警告没有找到分区表,必须重新初始化)

1. 使用CD启动
2. 在boot提示下回车
3. 选择对应的语言(English)
4. 在OK提示下回车
5. 选择对应的键盘(US)
6. 在OK提示下回车
7. 选择对应的安装方式(NFS镜像,FTP,HTTP)
8. 配置TCP/IP,选择“使用动态IP配置(BOOTP/DHCP)”
9. 在OK提示下回车
10. 根据选择的安装方式输入对应的信息:

FTP方式
FTP站点名称:192.168.0.254
Red Hat目录:pub/

HTTP方式
Web站点名称:192.168.0.254
Red Hat目录:pub/

NFS方式
NFS服务器名:192.168.0.254
NFS加载点:/var/ftp/pub

11. 这时Anaconda会读取安装镜像并检测显示器和鼠标的类型,显示欢迎界面
12. 选择定制安装
13. 使用diskdruid分区。使用以下分区方案:
/boot 100M
/ 2000M
swap 512M
/home 3 × 256M RAID0

14. 启动加载器,时区,图形,防火墙和验证方式都是用默认设置,除非教师指定
15. 设置适当的语言
16. 设置root密码为redhat
17. 安装默认的软件包

*指南中的分区方案非常重要,否则可能出现意料外的结果。


Lab2 Linux文件系统
目标:熟悉文件系统相关知识和技能

步骤一:创建和加载文件系统
任务:
1. 使用fdisk –l 得到ev/hda的分区尺寸信息。计算硬盘上没有分区的空间尺寸
2. 使用fdisk新增一个512M的逻辑分区(使用w命令将改动写入磁盘)。这个新分区的设备名是/dev/had_ ?为什么?
3. 重启以确定改动后的分区表被读入
4. 使用mke2fs,在新建的分区上创建一个新的ext2文件系统。创建时使用2k的块,每4k一个inode的设置。可能需要查看mke2fs的man page
5. 创建目录/data,作为该文件系统的加载点
6. 使用mount命令把新文件系统加载到/data。把/etc/passwd复制到/data,检查确认复制成功
7. Umount /data
8. 使用e2label为新分区指定卷标:
e2label /dev/hdax /data x是新创建分区的序号
9. 在/etc/fstab文件中为加载/data加入以下行:
LABEL=/data /data ext2 defaults 1 2
或者
/dev/hdax /data ext2 defaults 1 2
以上两行的实际效果相同。但是,如果更换了硬盘的总线或者是更改了主从的顺序,在fstab中使用卷标仍然可以定位这个设备
10. 加载新的分区
mount /data
11. 复制文件或使用touch 创建文件

步骤二:把ext2转换为ext3
1. 键入sync。这个命令把磁盘缓存信息写入磁盘。通常这个命令是定期执行的,但是以下步骤可能会先占自动同步。
2. 使用reset键重启动,或者使用电源开关关闭再打开(正常情况下不要这样)
3. 如果出现“Repair filesystem”的提示,尝试使用e2fsck /dev/hdx 修复文件系统
4. 成功启动后,通过创建journaling inode日志把ext2文件系统转换为ext3。因为ext3 的数据完整性和文件系统完整性大大增强了,所以可以 把自动预加载(pre-mount)基于时间的定期文件系统检查。
Tune2fs –j –c 0 –i 0 /dev/<partition>
5. 检查文件系统的characteristics
tune2fs –l /dev/<partition>
6. 编辑/etc/fstab /data的相关行,把文件系统由etx2更改为ext3
7. 卸载并用ext3重新加载文件系统,确认使用了ext3:
umount /data ; mount /data
df –T /data
8. 确认/boot下初始的虚拟盘镜像中包含了必要的ext3模块和jbd日志模块。如果/data是你的机器上的第一个ext3文件系统,很可能initrd中并不包含这些模块。这种情况只当我们需要ext3的支持而在initrd中又不包括相关的模块时非常重要。假设出现了这种情况,我们可以制作一个/boot/initrd-<version>.img文件:
mkinitrd –f –v /boot/initrd-$(uname –r).img $(uname –r)
9. 键入sync,然后手动重启动系统。
10. 观察启动过程。系统检查了哪个文件系统?在/data文件系统,是否看到了“recovering journal”提示信息?当不正常重启时,使用ext3的日志恢复是否比ext2的fsck快了?

步骤三:使用autofs自动加载系统
1. 确认iptables已经关闭
2. 编辑/etc/auto.master文件,去掉对/misc一行的注释
3. 在/etc/auto.misc文件中增加一行,用于加载server1.example.com的/var/ftp/pub目录到本机的目的/server1. 可以参考ftp.example.com行的示例.
4. 重启autofs服务 service autofs restart
5. 测试/misc/server1目录


Lab 3 管理启动
目标: 定制系统服务的技巧

步骤一: 使用chkconfig禁用服务
1. 使用chkconfig检查系统服务的状态: chkconfig --list
2. 使用以下示例将isdn在所有runlevel关闭
chkconfig --del <service name>
3. 使用--help 查看chkconfig语法信息 chkconfig --help. 关闭runlevel3和runlevel5的kudzu服务
4. 观察 on 和 --add 的差异, off 和 --de 的差异
chkconfig isdn --list
chkconfig isdn on
chkconfig isdn --list
chkconfig isdn off
chkconfig isdn --list
chkconfig isdn --del
chkconfig isdn --list
chkconfig isdn --add
chkconfig isdn --list
5. 使用chkconfig查看系统服务的状态和改变状态

步骤二: 更改系统登录标题
1. 我们将设置rc.local脚本用于每次重启时出现登录标题. 打开/etc/rc.local文件找到以下行:
touch /var/lock/subsys/local
2. 在后面插入以下行:
echo “ Welcome to \n” > /etc/issue
echo “All access to this computer is monitored” >> /etc/issue
echo “Unauthorized access is prohibited” >> /etc/issue
echo >> /etc/issue
echo “Last reboot complete at $(/bin/date)” >> /etc/issue
3. 保存文件,把/etc/issue复制为/etc/issue.orig
4. 重启动系统
5. 当系统启动后,切换到虚拟控制台确认登录标题出现了. 打开/etc/issue, 注意mingetty把\n扩展为你的主机名

步骤三: 更改默认runlevel
1. 编辑/etc/inittab文件,将默认runlevel从5改为3,如下:
id:3:initdefault:
2. 重启动系统.发生了什么?
3. 把默认runlevel改为5,重启动系统

步骤四: 增加当天的消息
1. 编辑/etc/motd文件,默认应为空. 增加以下行:
##################################
# Welcome to station xx #
##################################
<date> The sysadmin is playing today.
Expect frequent system downtime.
2. 切换到虚拟控制台登录.


Lab 4 用户和组管理
目标: 用户和组管理的技巧

步骤一: 创建用户和组
1. 使用useradd命令,为以下用户创建帐号:Joshua, alex, dax, bryan, zak, ed, manager. 为每个用户设置一个密码.
2. 使用groupadd命令,增加以下组: 并使用 –g 选项设定对应的GID
group gid
sales 10000
hr 10001
web 10002
为什么不用系统默认的gid?
3. 使用usermod命令把joshua和alex增加到sales组, dax和bryan到hr组, zak和ed到web组. 把manager加入所有组. 使用 –G选项.
4. 用各帐户登录,使用id命令确认组成员身份. 还有什么方法可以确认?

步骤二: 设置共享文件夹
1. 创建/depts目录,在目录下创建sales, hr, web文件夹
mkdir –p /depts./{sales,hr,web}
2. 使用chgrp命令设置对应组拥有对应文件夹
chgrp sales /depts/sales
3. 设置/depts目录的权限为755, 子文件夹的权限为770
4. 设置各部门的子文件夹的sgid, 使得创建的文件所有权为对应的组
shmod g+s /depts/sales
5. 使用各个帐号登录,并在对应位置创建文件,检查效果.只有manager可以进入所有的目录.也可以使用su -命令,但是要加上-,并且su下一个帐户之前要退出前一个帐户.

步骤三: 设置磁盘配额
1. 创建名为filehog的帐户,并设置用户在/home目录有60个inode的软限制和100个inode的硬限制. 使用以下命令测试, 要使用su - 命令,否则会失败.
su – filehog
quota
for I in $(seq 1 100); do echo –n “file$(i)”; touch file$(i) 2 >&1; done | less
quota

quota命令会报告当前的限制和已经使用的inode. 使用循环的目的是创建100个文件. 因为当创建用户filehog的时候需要从/etc/skel复制一些文件,所以创建100个文件的命令将不会成功.
如果quota设置成功,你会看到一系列反馈的数字直到达到软限制的数目. 超过限制后,会看到一个警告,但是命令仍然能够执行.达到硬限制后,将得到出错信息,而且不能再创建任何文件. 可以用<shift><Page Up>回滚检查输出,并且用ls命令查看filehog的主目录.
2. 创建一个名为diskhog的用户, 设置用户在/home目录的软限制为4MB, 硬限制为5MB,使用以下命令测试
su – diskhog
quota
dd if=/dev/zero of=bigfile count=3 #将成功
dd if=/dev/zero of=bigfile count=4 #将成功
dd if=/dev/zero of=bigfile count=5 #将失败
观察quota命令的输出. 注意当超出inode软限制和block软限制的输出差别.达到inode软限制时用户得到警告,而达到block软限制时是不同的.

步骤四: 客户端NIS
1. 使用authconfig配置系统为NIS客户. 设置notexample为NIS域名, 服务器为192.168.0.254
2. 试用guest200x为帐号从虚拟控制台登录, x为座位编号.发生了什么? 如果登录失败,检查设置.如果还有问题,确认教师机的设置正确.当验证成功后,你将看到shell的目录为/. 因为没有在本地创建帐号,所以没有主目录. 当用户帐户使用目录服务的时候会出现这种情况,无论是NIS,LDAP还是SMB
3. 使用autofs解决主目录问题.用户主目录位于server1.example.com,我们可以加载基于NFS的共享来提供用户环境.首先编辑/etc/auto.master,增加以下行
/home/guests /etc/auto.guests --timeout=60
这条记录告诉自动加载器(内核模块之一)/home/guests由它控制.所有相关的加载设置保存在/etc/auto.guests文件中,而且如果60秒内没有活动就自动卸载.
4. 创建并编辑/etc/auto.guests文件.增加以下行:
* -rw, soft, intr 192.168.0.254:/home/guests/&
这条记录指明在目录下的所有子目录都配置为从192.168.0.254:/home/guests下的相应目录加载,并且设为:读写,如果加载不成功就返回超时,并且在加载不可用时仍允许进程访问文件.
5. 配置autofs在runlevel3,4,5时运行,并手动启动:
chkconfig autofs on
service autofs start
6. 登录并查看是否主目录自动加载.可以试验登录到附近的其他机器.你将可以在notexample域内的任何一台机器上获得自己的用户环境.
7. 在自己的机器上以root登录,,使用su –guest200x.是否提示输入密码? 这意味着本地root帐号和NIS域之间是什么关系?

配额方案:
1. 编辑/etc/fstab, 用usrquota代替defaults, 然后执行 mount –o remount /home
2. 创建一个用于保存用户配额的数据库(-c 可以在第一次运行quotacheck时隐藏警告)
touch /home/aquots.user
quotacheck –c /home
3. 打开内核强制配额
quotaon /home
4. 设置EDITOR变量为你希望的文本编辑器
5. edquota filehog 设置硬节点限制为100,软节点限制为60
6. edquota diskhog 设置软块限制为4096,硬块限制为5120

Lab 5 静态网络设置
目标: 手动配置网络设置的技巧
步骤一: 设置IP地址
1. 使用ifdown命令关闭网卡
ifdown eth0

2. 用文本编辑器打开/etc/sysconfig/network-scripts/ifcfg-eth0, 按以下内容更改(x为你的座位号)
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.0.x
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
3. 查看/etc/resolv.conf的内容.里面应该包含从DHCP服务器得到的设置.如果没有.改为以下设置:
search example.com
nameserver 192.168.0.254
4. 使用ifup启动配置好的网卡
ifup eth0
5. 使用ping server1 确认网络配置
6. 重启动系统,使用ping server1 确认网络配置

Lab 6 系统管理工具
目标: 掌握系统管理工具的使用以及对CUPS的管理

步骤一: 使用at和cron
1. 设置一个提示,提醒今天中午12:00去吃午餐. 在root提示符下.使用以下命令:
at noon; (回车)
echo “Time for lunch with Joe.” (回车)
2. 使用atq命令检查任务队列,确认
3. 使用at命令在5分钟后运行 df –k命令
4. 设置今天每10分钟检查一次系统状态用于检查性能问题.你怀疑时内存或者IO问题,所以要进行相关的监控. 使用root帐户,并使用crontab –e 命令编辑cron文件
5. 在文件种加入以下行:
*/10 8-17 * * * /usr/bin/free; /usr/bin/iostat
6. 如何把来自cron的输出到一个邮件地址?
7. 以root身份使用pine,mail或mutt检查使用受到了来自at和cron任务的邮件
8. 成功后删除cron任务

步骤二: 日志记录到一个集中的位置
这个实验需要和相邻计算机的配合.
1. 首先设置syslogd接受远程消息. 编辑/etc/sysconfig/syslog文件:
SYSLOGD_OPTIONS=”-R –M 0”
2. 重启动syslogd:
service syslog restart
3. 设置syslogd把消息发向远程机器: 在/etc/syslog.conf文件种增加以下行:
user.* @stationx
4. 重启动syslogd:
service syslog restart
5. 使用logger命令生成syslog消息,测试设置:
logger –i –t yourname “this is a test”
这条消息是否出现在相邻机器的/var/log/messages文件中?

步骤三: 使用dump/restore恢复单个文件
1. 准备用dump备份/boot目录下的文件. 使用df /boot查看/boot所在的设备(以下假设为/dev/hda1)
2. 首先确认备份需要的空间. 查看一个0级备份需要的字节数,使用 -S
# dump -oS /dev/hda1
3. 备份到文件而非磁带. 确认在/var/tmp目录是否有足够的空间,执行
# dump -0u –f /var/tmp/dumpfile /dev/hda1
4. 检查/etc/dumpdates,查看完全备份的时间戳.
5. 使用restore检查备份文件的内容
# restore –tf /var/tmp/dumpfile
6. 我们可以使用restore的互动模式恢复特定文件到一个临时目录.
# mkdir /tmp/restored; cd /tmp/restored
# restore –if /var/tmp/dumpfile
7. 这时会看到一个restore > 提示符. 键入help查看可用命令的列表. 使用ls和cd命令查看备份文件的列表.
8. 使用add,选中/grub.menu.1st和/grub/grub.conf文件.列出所在目录,恢复的文件应该带有星号.
9. 键入extract命令恢复选中的文件.设置下个卷名为1, 不为解压目录设置所有者模式. quit退出restore模式.
10. 在restore运行的目录中应该有一个grub目录,包含恢复的grub.conf和menu.1st文件.

步骤四: 设置打印机,使用CUPS管理打印机.
1. 使用root帐户运行redhat-config-printer
2. 选择新建,回车
3. 在队列名称位置输入lp0
4. 选择队列类型为本地打印设备
5. 选择下一步,回车
6. 选择/dev/lp0,选择下一步
7. 选择postscript printer, 选择下一步
8. 当出现创建新队列:名称和类型画面时,选择结束,回车
9. 选择退出,回车.将询问是否保存.选择是.
10. 键入命令: cd 并键入 lpr < install.log
11. 键入命令: lpq (将会看到一个由root激活的打印任务,任务号为1)
12. 键入命令: lprm 1 删除任务
13. 键入命令: lpq (将会看到任务已经删除)

Lab 7 RPM和Kickstart
步骤一: kickstart安装
安装前阅读排故的建议
1. 编辑 /root/anaconda-ks.cfg文件,在开头插入以下行
nfs --server server1.example.com --dir /var/ftp/pub
使用以下分区方案:
clearpart --all
part / --fstype ext3 –size=256
part /boot –fstype ext3 --size=100
part /tmp –fstype ext3 --size=128
part /usr –fstype ext3 --size=2800
part /var –fstype ext3 --size=400
part /home –fstype ext3 --size=128
part swap –size=512
在%post部分增加以下内容作为一行
perl –pi –e ‘s, Welcome to %n, My kickstart system %n,’ /etc/X11/gdm/gdm.conf
2. 保存anaconda-ks.cfg文件为ks.cfg.复制到软盘
3. 用光盘或其他启动介质重启动系统, 把kickstart软盘放在软驱中
4. 当出现boot提示符时 输入linux ks=floppy 如果软盘有错系统会提示修正.
使用这个系统进行后面的实验.

排故建议:
如果安装过程中提示配置语言或者键盘,是因为ks.cfg中缺少对应的行.
如果出现Disk Druid, 说明分区配置不对.确定有足够的硬盘空间,并且分区配置包括swap分区.
Phython编译器在出错时会大量溢出信息.使用<Shift><Page Up>和<Shift><Page Down>仔细检查,即使对Phython不熟悉也会找到出错原因.
在%post部分之外的错误往往会在覆盖现有系统之前出现.可以重启动系统并修改ks.cfg文件.启动时用linux 1进入单用户模式可以加快启动速度.

步骤二 安装
Lab10 系统恢复和排故
目标:掌握排故过程中的技巧
1. 使用RPM查询以下请求:
initscripts包中有那些文件?
Bash包由哪一台主机创建?
pam包在安装后是否更改过?
哪个包名称中包含gnome?
哪个包生成了/etc/inittab文件?
哪个包生成了/etc/fstab文件?为什么?
你的内核的版本更新记录的最后一条记录是什么?
以下命令有什么差异?
rpm –ivh <package file>
rpm –Uvh <package file>
rpm –F <package file>
2. 练习检查光盘或server1上的RPM包的签名和完整性
使用 rpm –import 把Red Hat 的GPG导入系统
gpg --import /usr/share/rhn/RPM-GPG-KEY
rpm --import /usr/share/rhn/RPM-GPG-KEY
下面的命令将把包中的私钥和安装的公钥比较,确定包在创建后是否改变过
rpm -K <RPM package file>
3. 验证.
ftp://server1.example.com/pub 安装可用的更新.注意,如果要复制到本地安装则要有足够的空间,在对内核进行更新时要使用安装而非更新命令.
删除Red Hat的公钥(使用 man gpg查看方法), 用Red Hat,Inc(security@redhat.com)创建假公钥, 然后使用rpm -K查看当密钥不一致时的情况.

步骤三: 自动解析依存性
开始前, 确认以下包没有安装:
rpmdb-redhat
xsane
sane-backends
可用的文件包在加载NFS共享server1.example.com:/var/ftp/pub后找到,位于RedHat/RPMS
1. 观察没有自动解析的情况: 从共享位置安装xsane包.会出现类似提示:
error: Failed denpendencies:
libsane.so.1 is needed by xsane-0.89-3
不要试图完成安装.
2. 使用rpmdb-redhat. 安装rpmdb-redhat包,再次试图安装xsane包.这次仍然会失败,但是会给出有用的信息:
Suggested resolutions:
sane-backends-1.0.9-5.i386.rpm
3. aid. 在RPMS目录下使用rpm –ivh --aid xsane-0.*.rpm
sane-backends将被自动加载以满足依存性
注意,因为安装包和依存的包在同一目录,所以不需要指明rpm安装的方法

步骤四: GRUB
1. 重启动进入GRUB界面.如果在grub.conf文件中设置了timeout选项,可以看到画面下方的倒数.
2. 在倒数结束之前,按方向键停止计数
3. 注意显示下方的提示.使用上下键选择启动的内核,按e选择编辑grub.conf的内容.
4. 根据下方的提示,使用上下键选择有kernel字样的行并按e编辑
5. 现在进入了GRUB编辑模式.输入空格,s 然后回车.可以看到返回了前一画面,kernel行多出了文本s.如果不想保存更改,可以按ESC返回前一画面
6. 按b使用更改选项启动.在上例中将进入单用户模式(single user)
7. 重启后检查grub.conf文件.你将发现所作的更改没有保存在文件中
8. 重复以上步骤, 试验其他runlevel

Lab 8 逻辑卷和阵列
目标: 在安装后创建逻辑卷和阵列的技巧
步骤一: 使用LVM创建逻辑卷
1. 使用fdisk在未分区空间创建四个新分区,类型为Linux LVM (0x8e), 尺寸一样,为了加快速度,不要大于1G. 退出时使用w保存更改.不要重启动.
2. 编辑/etc/modules.conf中包含以下行(RHEL 可以不用做以下修改):
alias block-major-58 lvm-mod
alias char-major-109 lvm-mod
使用当前内核创建initrd
mkinintrd –f –v /boot/initrd-$(uname –r).img $(uname –r)
这个命令将使系统在启动时加载lvm-mod模块,启用LVM
3. 重启动系统
4. 用root登录, 运行vgscan初始化LVM配置文件
5. 使用pvcreate将LVM分区初始化为物理卷.假设分区为
/dev/hda9
/dev/hda10
/dev/hda11
/dev/hda12
命令为: pvcreate /dev/hda9 /dev/hda10 /dev/hda11 /dev/hda12
可以使用pddisplay查看分区信息
6. 然后创建卷组test0. 使用默认4MB的扩展尺寸,只包含一个物理卷
vgcreate test0 /dev/hda9
可以使用pddisplay查看信息

7. 创建一个小逻辑卷,不要占用所有空间. 使用vgdisplay的VG size和 PE/size信息,比如创建一个40M的逻辑卷:
lvcreate –L 40M –n data test0
可以使用 lvdisplay /dev/test0/data 确认命令执行了.
8. 在逻辑卷上创建ext3文件系统: mke2fs –j /dev/test0/data
9. 创建/data目录. mount /dev/test0/data /data
10. 复制文件到/data. 可以创建一个大文件: dd if=/dev/zero of=/data/bigfile bs=1024 count=20000
使用df检查/data的磁盘使用情况和剩余空间. 确认能够正常使用.可以编辑/etc/fstab来自动加载/data.重启动测试

步骤二: 使用逻辑卷
1. 首先, 卸载/data. 使用e2fsadm扩展分区尺寸: e2fsadm –L+50M /dev/test0/data
2. 重加载/dev/test0/data到/data, 确认文件. 运行df检查/data的磁盘使用情况和剩余空间.
3. 使用剩余扩展创建第二个逻辑分区. 运行vgdisplay查看PE /size,格式类似于166/644MB,这表示卷组包含166个扩展,664MB剩余空间. 创建一个占用166个扩展逻辑卷/dev/test0/scratch, 命令为:
lvcreate –l 166 –n scratch test0
4. 格式化新卷: mke2fs –j /dev/test0/scratch
5. 把未使用的物理卷加入卷组 vgextend test0 /dev/hda10
6. 如果再次运行vgdisplay, 可以看到增加的扩展.用20MB的扩展定义新逻辑卷.
e2fsadm –L+20M /dev/test0/scratch
使用lvdisplay和vgdisplay确认成功
7. 接下来用/data的只读快照创建新的逻辑卷. 首先用只读选项加载/data
mount –o remount,ro /data
8. 快照不需要和父卷尺寸一致,我们假设不需要保存太多数据,可以设置为5M
lvcreate –s –L 5M –n snap /dev/test0/data
9. 现在重加载/data为读写状态
mount –o remount,rw /data
10. 创建新加载点/snap, 使用 mount /dev/test0/snap /snap 比较/data和/snap,两者内容应该一致
11. 运行命令 for I in$(seq 1 10); do echo $1 > /data/$1; done 将在/data下创建十个文件,名称从1到10. 这个命令不影响/snap, 可以用lvdisplay /dev/test0/snap检查
12. 当快照逻辑卷不能容纳改变的块时,将被LVM自动删除,即使当前在加载状态.(避免这一情况的方法是尺寸和父卷一致,或者及时用lvextend扩展尺寸)可以通过以下方式看到这一现象:
rm /data/bigfile
for i in $(seq 1 10000); do echo $1 > /data/$1; done
13. 在/var/log/messages里可以看到类似信息:
Mar 19 16:30:02 station12 kernel: lvm --giving up to snapshot
/dev/test0/data on /dev/test0/snap: out of space
运行ls /snap. 快照已经不可用了,目录是空的.运行 lvdisplay /dev/test0/snap,和11步的结果比较.
14. 做完快照之后,如果数据已经备份,或者快照已被删除,都需要被卸载,否则会造成轻微的性能下降, 使用 umount /snap; lvremove /dev/test0/snap

在进行阵列试验以前清除LVM卷:
删除所有/etc/fstab中增加的记录
umount /dev/test0/data; umount /dev/test0/scratch
lvremove /dev/test0/data; lvremove /dev/test0/scratch
vgchange –an test0; vgremove test0

步骤三: 软件阵列
1. 在实验中我们将在同一磁盘创建多个分区来实现阵列,但是在实际工作中我们一般使用在不同磁盘上的分区来创建.使用fdisk将Linux LVM(0x8e)分区转换为Linux raid auto(0xfd)分区.保存更改.
2. 重启动系统.
3. 创建/etc/raidtab文件定义四个RAID-5阵列设备.根据以下示例,用实际的分区替换.chunk-size是一个重要的参数,决定了一次向阵列中每个磁盘写入数据的量.RAID-5需要一个校验算法行,一般设为left-symmetric来提高磁盘性能
raiddev /dev/md0
raid-level 5
nr-raid-disks 4
chunk-size 32
persistent-superblock 1
parity-algorithm left-symmetric
device /dev/hda9
raid-disk 0
device /dev/hda10
raid-disk 1
device /dev/hda11
raid-disk 2
device /dev/hda12
raid-disk 3

4. 初始化阵列: mkraid /dev/md0. 如果阵列没有启动,手动启动 raidstart /dev/md0. 此时阵列会立即开始建立,但是已经可用了.可以在另一个虚拟控制台用 watch cat /pro/mdstat 监控建立过程.
5. 使用4k的块的ext3文件系统格式化. Stride选项应设为chunk size和阵列磁盘数的乘积, 可以加快格式化的速度
mke2fs –j –b 4096 –R stride=32 /dev/md0
6. 查看是否能 mount /dev/md0 /data. 即使仍在建立过程也可以加载. 使用df命令查看文件系统尺寸. 如果是四个同尺寸的分区组成的阵列,文件系统尺寸应该为三个分区之和.(其他空间用于储存校验信息)
7. 使用lsraid显示阵列设备的相关信息. Lsraid –A –a /dev/md0
8. 试着在/data创建文件. 可以在/etc/fstab中加入记录用来自动加载.
9. 检查/proc/mdstat, 确认阵列已经建立. 可以看到类似输出:
md0: active raid5 hda12[3] hda11[2] hda10[1] hda9[0]
2328064 blocks level 5, 32k chunk, algorithm 2[4/4] [UUUU]
10. 测试卷的破坏.用以下命令模拟: raidsetfaulty /dev/md0 /dev/hda11
在/var/log/messages中寻找出错信息, 注意/proc/mdstat文件的改变
md0: active raid5 hda12[3] hda11[2] hda10[1] hda9[0]
2328064 blocks level 5, 32k chunk, algorithm 2[4/3] [UUUU]
重启动系统, 查看启动时dmesg和/var/log/messages的出错信息
11. 模拟在重启前更换了损坏的磁盘. 使用命令替换阵列分区:
raidhotadd /dev/md0 /dev/hda11
12. 这时将看到/proc/mdstat显示阵列的重建

进阶实验:在软件阵列上创建LVM
以下实验可选,需要创建一个在两个磁盘上的物理卷建立的RAID1镜像卷基础上的RAID10. 使用同一磁盘的两个分区模拟这一情况.
1. 撤销前面的软件阵列设置: umount /dev/md0, 删除/et/fstab中的对应行.运行 raidstop /dev/md0. 从/etc/raidtab中删除/dev/md0设备.
2. 编辑/etc/raidtab创建两个RAID1镜像/dev/md0和/dev/md1, 分别由两个分区组成.示例如下:
raiddev /dev/md0
raid-level 1
nr-raid-disks 2
chunk-size 32
persistent-superblock 1
device /dev/hda9
raid-disk 0
device /dev/hda10
raid-disk 1
3. 注意: 运行命令时可能需要-f和-R重运行.因为系统会检测到上次创建的相关superblock.
4. 格式化并启动阵列设备: mkraid /dev/md0; mkraid /dev/md1
5. 设置阵列设备为物理卷: pvcreate /dev/md0 /dev/md1
6. 创建卷组: vgcreate test0 /dev/md0 /dev/md1
7. 使用vgdisplay查看有多少扩展可用
8. 设置条带的逻辑卷. 使用-i 指定构成条带逻辑卷的卷组中物理卷的数目. –I 设置条带的尺寸. 当使用-i时作用等同于RAID0阵列的chunk-size.使用 –l指定vgdisplay报告的卷组中逻辑卷可用的扩展.假设有500可用.示例为:
lvcreate –i 2 –I 64 –l 500 –n data test0
9. 使用ext3格式化/dev/test0/data ,作为条带的RAID阵列设置stride选项,
mke2fs –j –b 4096 –R stride=8 /dev/test0/data
10. 在/data加载/dev/md0/data. 把文件复制到/data,使用e2fsadm重设置尺寸.使用raidsetfaulty模拟磁盘损坏.(条带的逻辑卷在创建后可以重定义尺寸,只要不在另一个物理卷上使用这些扩展.)这样将得到RAID的冗余,条带的性能和LVM的灵活性.

Lab 9 X window系统
步骤一: 了解X的启动顺序
1. 创建并编辑/etc/X11/xinit/xinitrc.d/xeyes,加入以下行并设为可执行
#!/bin/sh
xeyes &
2. 切换到runlevel5
3. 使用显示管理器登录系统 gdm,kdm,xdm等.发生了什么?切换到虚拟控制台,运行
startx --:1
发生了什么? 为什么需要指定 -- :1?
4. 在创建的用户主目录下创建并编辑.xsession文件,增加以下行并设为可执行:
#!/bin/sh
xterm &
exec metacity
5. 使用这个帐户登录,发生什么? 使用这个帐户在虚拟控制台登录,并运行startx,发生了什么?

其他问题:
1. 列出升级视频卡的过程,包括选择卡的过程.
2. 描述当视频卡配置错误时,如何修复一个启动到runlevel5的系统.


Lab 10 系统修复和排故
目标: 熟悉系统修复的技巧

步骤一: 在rescue模式修复MBR
rescue模式提供了修复一个不能正常启动的系统的最后手段. 即使启动加载器或者根文件系统配置错误或损坏.进入该模式需要RedHat Linux的第一张光盘或者是网络路径的boot.iso镜像
任务.破坏GRUB使之不能启动.使用rescue模式重安装GRUB.
1. 使用以下命令,将MBR中的GRUB的第一部分用0覆盖.小心设置块尺寸.如果写入太多0,会覆盖分区表,造成的问题会大的多.(以下命令假设使用IDE设备)
dd if=/dev/zero of=/dev/had bs=446 count=1; reboot
恭喜---你的启动扇区已经破坏.不过你的主分区表还可用.重启确定系统不能启动.使用以下步骤修复系统.
2. 从光盘/软盘启动进入rescue模式. 当启动时输入 linux rescue
3. 修复环境将询问是否加载硬盘文件系统.选择继续.用读写模式加载.检查mount的输出保证文件系统加载正确.可以使用fdisk检查分区
mount
fdisk –l /dev/hda
4. 注意硬盘加载在/mnt/sysimage. 检查grub.conf文件确认配置正确.
cat /mnt/sysimage/boot/grub/grub.conf
5. 安装GRUB需要切换上下文,使/mnt/sysimage成为grub-install认为的系统的根.加载chroot shell, 运行grub-install, 退出.
Chroot /mnt/sysimage
grub-install /dev/had
exit
6. 输入exit退出rescue模式. 注意这会卸载加载的分区.

步骤二: 在rescue模式安装软件.
使用以下命令覆盖mount命令:
cp /bin/date /bin/mount
恭喜---你已经破坏了一个重要的执行文件. 重启动后你会发现系统不能启动.使用rescue模式,安装合适的rpm包.
1. 使用启动介质启动系统到rescue模式.
2. 系统会提示加载硬盘文件系统.使用mount检查是否正确加载.
3. 注意硬盘的文件系统加载在/mnt/sysimage. 查看哪个rpm包包含这个命令
rpm –qf --root /mnt/sysimage/bin/mount
4. 确认mount的rpm包,使用chroot安装rpm
chroot /mnt/sysimage
rpm –V mount
exit
5. rpm会报告/bin/mount被修改了.从网络重新安装mount包,要使用chroot
rpm –ivh --force --root /mnt/sysimage /mnt/source/RedHat/RPMS/mount*
6. 输入exit退出rescue模式. 注意这会卸载加载的分区.