实验环境:删除boot上的几个主要个文件:


config-2.6.18-164.el5
grub
initrd-2.6.18-164.el5.img
symvers-2.6.18-164.el5.gz
System.map-2.6.18-164.el5
vmlinuz-2.6.18-164.el5
 

修复过程:

1.先入放入光盘,从CD-ROM启动Linux,进入Linux急救模式
boot: linux rescue

 
2.挂载光盘, 安装被删文件所需要的rpm
mount /dev/hdc /mnt/source
rpm -ivh --root=/mnt/sysp_w_picpath /mnt/source/Server/kernel-xxx.rpm --force

3.安装grub,手工编写grub配置文件
chroot /mnt/sysp_w_picpath   #
更改root目录
grub-install /dev/sda   #
安装grub
vim /boot/grub/grub.conf
default=0 #
默认加载第几个系统,从0起算

timeout=5 #
启动时停留在Grub配置界面中的时间

splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz #Grub
的背景图片

hiddenmenu #
是否隐藏菜单

title Red Hat Enterprise Linux Server (2.6.18-8.el5) #
操作系统的标题

root (hd0,0) #
操作系统的引导分区

kernel /vmlinuz-2.6.18-164.el5 ro root=LABEL=/ rhgb quiet #
设置加载的内核

initrd /initrd-2.6.18-164.el5.img4 #
设置加载必要的驱动(内存磁盘文件)

4.退出,重启
exit
sync
reboot

说明:grub.conf

 default - 默认引导的菜单条目。
timeout - 自动选择默认引导前菜单显示的时间。本例中,如果用户没有在 5 秒之内选择操作系统,则会默认引导第一个条目 (default 0)
splashp_w_picpath -
指定 GRUB 引导菜单的界面风格。(hd0,0)/grub/splash.xpm.gz,是指在第一块硬盘的第一个分区(hd0,0) 中,使用 grub 目录下的 splash.xpm.gz 文件作为界面风格。一般来讲,无需更改这个配置

hiddenmenu -
隐藏 GRUB 引导菜单。如果不想在启动时显示 GRUB 引导菜单,则删除此条目。

系统引导条目

title - 引导条目的名称。通常使用操作系统的名称做为标识,你可以自行更改这个名称,例如使用 "Fedora 12", "Fedora", 或者是 "MyLinux" 都可以。这个标题将显示在 GRUB 引导菜单中。
root -
操作系统内核和引导文件所在的磁盘分区。(hd0,0) 表示第一块硬盘的第一个分区,(hd0,2) 表示第一块硬盘的第3个分区,依次类推。 (0开始算起),这里面的root不是root用户,
就是代表/
kernel - 系统内核及 boot 命令用到的参数。
initrd -
系统引导程序

boot分区是不是可以被umount的掉

我如果不删除/boot分区里面的重要的文件的话,直接umount /boot分区的话,重启会不会导致系统启动不了呢?
答案是不会。
我们可以到Linux下的/etc/fstab命令来查看Linux启动时的挂载情况及顺序
  
可以看到上面,已经定义了在启动时默认到/boot目录下去寻找启动文件,所以即便我们把boot分区umount掉了,重启后还是能够正常进入的。它是靠什么自动加载的呢?其实fstab 文件中的 defaults 就包含了 "auto" 功能,除非明确指定 noauto ,否则开机都会自动挂载。
 
简单的对etc/fstab做个介绍
/etc/fstab是用来存放文件系统的静态信息的文件。当系统启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录。下面我来介绍如何在此文件下填写信息。
我们要关注的是它的六个域,分别为:<file system>、<mount point>、<type> 、<options>、<dump>、<pass>。
 1、<fie sysytem>。这里用来指定你要挂载的文件系统的设备名称或块信息,也可以是远程的文件系统。做过嵌入式linux开发的朋友都可能知道mount192.168.1.56:/home/nfs /mnt/nfs/ -o nolock (可以是其他IP)命令所代表的意义。它的任务是把IP为192.168.1.56的远程主机上的/home/nfs/目录挂载到本机的/mnt/nfs /目录之下。如果要把它写进/etc/fstab文件中,file system这部分应填写为:/192.168.1.56:/home/nfs/。
   如果想把本机上的某个设备(device)挂载上来,写法如:/dev/sda1、/dev/hda2或/dev/cdrom,其中,/dev/sda1 表示第一个串口硬盘的第一个分区,也可以是第一个SCSI硬盘的第一个分区,/dev/hda1表示第一个IDE硬盘的第一个分区,/dev/cdrom 表示光驱。
   此外,还可以label(卷标)或UUID(Universally Unique Identifier全局唯一标识符)来表示。用label表示之前,先要e2label创建卷标,如:e2label /dir_1 /dir_2,其意思是说用/dir_2来表示/dir_1的名称。然后,再在/etc/fstab下添加:LABEL=/dir_2 /dir_2 <type>   <options> <dump> <pass>。重启后,系统就会将/dir_1挂载到/dir_2目录上。对于UUID,可以用vol_id -u /dev/sdax来获取。比如我想挂载第一块硬盘的第一个分区,先用命令vol_id -u /dev/sda11 来取得UUID,比如是:5dc08a62-3472-471b-9ef5-0a91e5e2c126,然后在<file system>这个域上填写: UUID=5dc08a62-3472-471b-9ef5-0a91e5e2c126,即可表示/dev/sda11。Red Hat linux 一般会使用label,而Ubuntu linux 一般会用UUID。
   2、<mount point>。挂载点,也就是自己找一个或创建一个dir(目录),然后把文件系统<fie sysytem>挂到这个目录上,然后就可以从这个目录中访问要挂载文件系统。对于swap分区,这个域应该填写:none,表示没有挂载点。
       3、<type>。这里用来指定文件系统的类型。下面的文件系统都是目前Linux所能支持的:adfs、befs、cifs、ext3、 ext2、ext、iso9660、kafs、minix、msdos、vfat、umsdos、proc、reiserfs、swap、 squashfs、nfs、hpfs、ncpfs、ntfs、affs、ufs。
   4、<options>。这里用来填写设置选项,各个选项用逗号隔开。由于选项非常多,而这里篇幅有限,所以不再作详细介绍,如需了解,请用 命令 man mount 来查看。但在这里有个非常重要的关键字需要了解一下:defaults,它代表包含了选项rw,suid,dev,exec,auto,nouser和 async。
   5、<dump>。此处为1的话,表示要将整个<fie sysytem>里的内容备份;为0的话,表示不备份。现在很少用到dump这个工具,在这里一般选0。
   6、<pass>。这里用来指定如何使用fsck来检查硬盘。如果这里填0,则不检查;挂载点为 / 的(即根分区),必须在这里填写1,其他的都不能填写1。如果有分区填写大于1的话,则在检查完根分区后,接着按填写的数字从小到大依次检查下去。同数字 的同时检查。比如第一和第二个分区填写2,第三和第四个分区填写3,则系统在检查完根分区后,接着同时检查第一和第二个分区,然后再同时检查第三和第四个 分区。
 

GRUB加密码

GRUB加密分为两种。
  1、全局加密

  2、局部加密

全局加密:

  功能:锁定启动界面,禁止了

  e 
to edit the commands before booting
  a 
to modify the kernel arguments before booting
  c  for a command-line
 然后我们看看全局加密码后的效果。需要按P,输入全局密码才可以编辑查看commands.这样就可以保护我们的局部密码了。不输入全局密码可以直接回车开始启动系统,如果你还有局部密码,就需要输入局部密码。
 
 
局部加密:相对与某个特定的系统来进行控制
功能:用户必须输入密码才能进入系统。 :(你的电脑是双系统,如果你只给一个加密的话,那么启动另一个就不需要密码
)
下面我们来看看怎么实现这些功能
先说局部加密:
  由于每个系统都是由title 来标志的,所以我们局部加密就是在这个标志后加入相应的语句。

  加密分两种

  1、明文

  2MD5加密。

  具体方法如下图
 
 上面就是对grub进行的密文加密,明文加密,就是在password后面"空格+密码"OK,
[root@localhost ~]# grub-md5-crypt
Password:
Retype password:
$1$J7NPh/$77Q7IpLMzwetf2.adDQcN.
可以通过grub-md5-crypt来计计算MD5,上面的MD5的值是"123456",直接拷贝到/boot/grub.grub.conf中就可以了。然后就保存退出,从新启动就需要你输入密码才能进入系统。但是我们可以在启动画面用e键编辑进入command模式就可以查看密码。我们需要怎么杜绝这种事情发生呢?那就需要全局加密,不让其他人具有编辑的权限。
全局加密:
  如上,生成一个MD5密码。然后进入/boot/grub/grub.conf (明文,直接填加明文);在第一个title标志前面加如我们的密码,如图,timeout5后面就是我们对全局的加密。
 
 这样其他人需要全局密码才能查看局部密码。
这只是简单整理以上内容,说明boot分区的修复和加密码,接着研究linux的启动过程,linuxinodes的结构图