linux启动和自动挂载

来源:互联网 发布:学生空间七天网络下载 编辑:程序博客网 时间:2024/05/23 14:23

系统启动流程

一.BIOS 加电自检

  当你按电源开关开机时,电脑会首先去启动BIOS(基本输入输出系统),BIOS一般是集成在主板上的.

  BIOS 的工作

1.检测连接硬件,比如显卡,内存,磁盘等等,检测的目的是以后把这些设备信息提供给操作系统

2.寻找启动磁盘,每一种BIOS都会有开机启动菜单,可以在菜单里设置以哪个设备启动系统

  比如:光驱,硬盘,网络等等,这个菜单可以设置多个选项,依照设置次序在设备上寻找启动信息

3.找到了启动硬盘,接着BIOS就会在磁盘上找启动扇区,找到内核启动系统.

  1)先试着寻找第一个扇区,也就是主引导记录MBR(Master Boot Record)

  2)如果第一个扇区上没有没有存在操作系统,再去寻找标记为BOOT的分区.

不论是MBR还是BOOT分区,存储操作系统的空间都只有446字节;

如果没有在上面提到的位置找到操作系统的内核,那么BIOS就无法继续启动工作.

而我们的内核往往会大于446个字节,存放在磁盘的其他位置上,既然446装不下内核,又为了能顺利的找到放在其他位置上的内核,人们想出了一个办法就在446字节里写了一个小程序,当BIOS试着启动操作系统时就会执行这个小程序,然后再由小程序来载入其他位置的内核.这个小程序就是启动载入器(boot loader)

二.BOOT Loader

  linux的boot loader(上文提到的小程序) 常见的有两种:lilo grub

因为lilo存在着一个1024柱面的限制,并且更改了磁盘上的启动信息文件后需要重新启动系统才能同步446字节的内容,因为lilo的缺陷,已经被grub所取代.现在的绝大多数类linux系统都采用grub做boot loader;

grub则没有了lilo各种限制,而且方便到能修改系统文件的启动内容就可以立刻与446内容同步.

那么我们就看看grub的内容 它存在于 /boot/grub中

GRUB有几个重要的文件,STAGE1、STAGE1.5、STAGE2

STAGE1:它只有512字节,通常放在MBR中,它的作用很简单,就是在系统启动时用于装载STAGE2并将控制权交给它。

STAGE2:GRUB的核心,所有的功能都是由它实现。

STAGE1.5:介于STAGE1和STAGE2之间,是它们的桥梁,因为STAGE2较大,通常都是放在一个文件系统当中的,但是STAGE1并不能识别文件系统格式,所以才需要STAGE1.5来引导位于某个文件系统当中的STAGE2。根据文件系统格式的不同,STAGE1.5也需要相应的文件,如:e2fs_stage1_5,fat_stage1_5,分别用于识别ext和fat的文件系统格式。它存放于1-63的柱面之间.

引导顺序如下:STAGE1->;STAGE1.5->;STAGE2,

主要的配置文件时 grub.conf

里面选项含义:

title:一个操作系统引动的标头,可以使多个

root :指明所需文件存在于哪个磁盘哪个分区上 (hd0,0)表示第一个硬盘,第一个分区(启动分区),可参考/boot/grub/device.map

kernel:内核文件的名字,并且会有一些加载内核时的参数 ro代表以只读方式加载

initrd:包含一些附加的驱动程序

三.内核启动

内核启动后会向bios查询电脑的所有硬件信息,然后自己接手下来管理这些设备,以便提供给linux使用

内核会试着驱动这些设备,这些设备的驱动一部分包含在内核中,叫做静态驱动,一部分以模块的方式(动态)存放文件系统中,由于此时还未挂载任何文件系统,因此还不能使用文件系统中的模块,这里只能驱动在内核中存在的硬件驱动程序的对应设备.想驱动内核中未包含的硬件驱动就需要加载文件系统.

内核会尝试挂载根文件系统,根文件系统至少包含 /etc /bin /sbin /lib /dev 这5大目录

他们5个缺一不可.都会导致系统无法启动

根文件系统挂载是以只读方式挂载的,因为这时linux还在启动阶段,并不稳定,避免破坏系统资料

四.启动INIT服务

顺利的挂载了根文件系统后,就会启动init服务

内核会按 /sbin/init /etc/init /bin/init 顺序寻找init程序,

如果找不到则内核报错(判断1被删、2 x权限、3#!/bin/bash、4/bin/bash)这里存在一个参数 init=/bin/sh 如果启动时指定了则最后执行/bin/sh

 而不会产生内核报错.也被称为快速启动,因为它忽略了很多启动初始化工作.

启动init的目的就是为了初始化系统环境,启动了init就证明了内核已经顺利启动,接下来就由init服务来建立linux使用环境

init做了什么?它会读取 /etc/inittab 文件,根据这个文件的信息来进行初始化工作.

会执行三个脚本 /etc/rc.d/rc.sysinit /etc/rc.d/rc /etc/rc.d/rc.local

rc.sysinit 主要的功能用来建立系统的基本环境

启动udev selinux子系统

udev负责产生 /dev中的文件,selinux负责增强系统的安全性

设定核心参数 sysctl -p 加载 /etc/sysctl.conf

设定系统时间 将硬件时间设定为系统时间

加载键盘和交换分区 swapon -a -e

设置主机名,挂载文件系统,并将根重新挂载为可读写的.

加载动态驱动模块

USB设备与RAID & LVM

卸载 /initrd/ 目录

rc 脚本设置启动级别 linux中有许多不同的启动级别,不同的启动级别会制定不同的服务

   根据指定rc的参数会对应执行 /etc/rc.d/rc[0-6].d/ 中的连接脚本(/etc/init.d)文件 以S开头的则启动

rc.local 前两个脚本都是系统至关重要的脚本,如果我们想在启动过程中放置一些其他程序

 应该使用rc.local脚本中 因为S99local存在于rc[2-5].d中

三个RC脚本执行完毕后,就会建立虚拟主控制台 执行 /bin/login 就提供了用户登陆界面了

如果是图形 L5级别的话,会启动X window登录界面

所有的启动就都已经完毕

五.用户环境初始化 login→PAM→bash→5个环境文件

grub安装

1.rescue模式 mkdir abc   mount /dev/sda2 abc/   mount /dev/sda1 abc/boot/    chroot abc/

  ls -l /dev/sda[]

  mknod abc/dev/sda b 8 0

  mknod abc/dev/sda1 b 8 1

  mknod abc/dev/sda2 b 8 2

  grub-install /dev/sda

    mkdir /dev/mapper

    vim /etc/mtab   加入 /dev/sda1 /boot ext3 rw 0 0   设置跟系统

  chroot abc/

  grub-install /dev/sda

  sync

  cd grub/

设置硬盘安装

cp isolinux/ /boot/ -a  (光盘目录下)

vim grub.conf

title iso hard install OS rhel5u3

root (hd0,0)

kernel /isolinux/vmlinuz

initrd /isolinux/initrd.img

服务的基本控制

讲启动级别时,我们知道需要启动  /etc/rc.d/rc[0-6] 中的脚本 这些脚本既是服务的启动脚本

根据启动级别来控制应该启动哪些服务 他们都是软连接,真实文件存在于 /etc/init.d/ 中

我们可以去这个目录下去手动加参数来执行启动脚本

也可以用命令 service 服务名 start|stop|restart 等等参数来控制

启动级别

0 关机 1 单用户 2 多用户模式但带网络但不能远程登录 3 不受限多用户模式TUI 4 保留 5 图形模式 6 重新启动

# runlevel 查看启动级别(上次的级别和当前级别)

# init 5 切换级别

添加grub密码

grub-md5-crypt 加密密码串

vi /boot/grup/grup.conf

   hiddenmenu   给grup菜单加密

   password --md5 加密密码串

给操作系统加密可用明文密码

删除grub密码

grub> root (hd0,0)  grub.conf

    > kernel / TAB 查看目录结构,是否为/boot

    > kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/sda2 init=/bin/bash(从grub菜单启动)

    > initrd /initrd-2.6.18-128.el5.img

    > boot

mount -o remount,rw /  (rc.sysinit)

mount /dev/sda1 /boot  (修改grub.conf,可把grub密码删除)

光盘救援模式

mkdir mysystem

mount /dev/sda2 mysystem/

mount /dev/sda1 mysystem/boot/

chroot mysystem   (切换真实系统)

/etc/fstab

第一项  是要mount的存储装置的实体位置或者用卷标

第二项  要挂到哪个目录位置

第三项  指定要挂载的系统格式

第四项  mount时要设定的状态,只读或defauls  man mount

第五项  提供DUMP功能,在系统DUMP时需要BACKUP的标志位,其内定位置是0

第六项  设定开机时文件系统是否要check

除了root的文件系统其必要的check为1 其他视需要而定 默认是0

LABEL=/boot             /boot                   ext3    defaults        1 2

触发挂载

触发挂载的服务名叫做 autofs 系统有一个自动加载光驱的配置

auto.master(配置文件) → /misc   /etc/auto.misc(监控配置文件)

/misc是自动挂载的上层目录,/etc/auto.misc指明了对/misc下的目录子目录挂接的配置信息

定制自己的配置信息

vi /etc/auto.misc       →   myext3    -fstype=auto    :/dev/sda6  (cd myext3)

定义自己的父级目录

vi /etc/auto.master     →   /opt   /etc/auto.opt

vi /etc/auto.opt        →   myext3    -fstype=auto    :/dev/sda6

service autofs restart