Linux基础(7)-Linux启动

linux操作系统启动流程

  1. POST系统
    X86平台硬件被设计成一旦通电会自动运行ROM中的程序,所以当主机加电时,CPU寻址ROM,使存放于ROM中的POST系统运行,该系统用于硬件自检,内容包括检查内存,I/O设备是否存在,显示设备是否存在等,如果正常,则进入下一步。

  2. Boot Sequence
    加电自检完成后,位于ROM中的BIOS系统运行,BIOS为基本输入输出系统,此时BIOS中的Boot Sequence会按次序查找各引导设备,其中第一个有bootloader(引导程序)的设备即为本次启动要用到的设备,BIOS会读取该设备的MBR,MBR即为Master Boot Record,大小为512bytes,其中前446bytes为bootloader,之后46bytes为分区表,后2bytes为魔术,当标记55AA时即表示MBR有效,否则无效。

  3. BootLoader
    现Linux用GRUB作为bootloader,GRUB分为两段,1st stage为bootloader,用于把第二阶段加载到内存从而完整实现更多功能,2nd stage 即为存放于内核中的/boot/grub,其中1.5stage可做为文件系统驱动,使文件系统中的2nd stage可以被识别。UEFI与GPT分区格式不同于MBR。

  4. Kernel
    通过GRUB会加载内核程序到内存中,首先内核会自身初始化,探测可识别到的所有硬件设备,在内存上划出临时根ramdisk,并转换为基于fs的文件系统来防止双缓冲,通过该系统加载硬件所需要的驱动。

  5. rootfs
    有了临时根,有了驱动,就可以以只读方式挂载硬件上的真正的根文件系统,使用只读方式是为了防止因内核BUG等原因造成破坏。 有了根文件系统,将会启动用户空间的第一个应用程序init程序,其中CentOS7使用Systemd作为第一个程序

  6. init
    init程序将读取/etc/inittab文件中的配置,根据运行级别,运行对应的脚本程序来开启或关闭对应的服务程序。其中系统初始化脚本为/etc/rc.d/rc.sysinit,该文件配置了
    (1) 设置主机名;hostname
    (2) 设置欢迎信息
    (3) 激活udev和selinux;
    (4) 挂载/etc/fstab文件中定义的所有文件系统;
    (5) 检测根文件系统,并以读写方式重新挂载根文件系统; (之前是只读挂载)
    (6) 设置系统时钟; (读取硬件时钟实现)
    (7) 根据/etc/sysctl.conf文件来设置内核参数;
    (8) 激活lvm及软raid设备;
    (9) 激活swap设备;(fstab已包含)
    (10) 加载额外设备的驱动程序;
    (11) 清理操作;

  • 运行级别:
    分为7个级别,分别为0-6
    0:关机, shutdown
    1:单用户模式(single user),root用户,无须认证;维护模式;
    2、多用户模式(multi user),会启动网络功能,但不会启动NFS(网络文件系统);维护模式;
    3、多用户模式(mutli user),完全功能模式;文本界面;
    4、预留级别:目前无特别使用目的,但习惯以同3级别功能使用;
    5、多用户模式(multi user), 完全功能模式,图形界面;
    6、重启,reboot
    开机默认级别为:3或 5

grub启动引导程序配置及命令行接口详解

  • grub的命令行接口
    • help: 获取帮助列表

    • help KEYWORD: 详细帮助信息

    • find (hd#,#)/PATH/TO/SOMEFILE:查找文件

    • root (hd#,#) 设定根设备

    • kernel /PATH/TO/KERNEL_FILE: 内核文件路径

      • 内核通常为vmlinuz,z表示是压缩格式存放
      • 设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数;
      • 例如:init=/path/to/init, selinux=0
    • initrd /PATH/TO/INITRAMFS_FILE:

      • 设定为选定的内核提供额外文件的ramdisk;
      • 需要与内核版本号完完全全匹配
    • boot: 引导启动选定的内核;

    • 手动在grub命令行接口启动系统:

          grub> root (hd#,#)
          grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE
          grub> initrd /initramfs-VERSION-RELEASE.img
          grub> boot

grub配置文件

  • 配置文件:/boot/grub/grub.conf
    配置项:

    • default=#: 设定默认启动的菜单项;落单项(title)编号从0开始;
    • timeout=#:指定菜单项等待选项选择的时长;(超时时间,超时则选择默认菜单项)
    • splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;xpm格式,只能使用14位色,默认的图片需要800*600分辨率才能显示,可以替换为更小的,使用gimp可以编辑图片
    • hiddenmenu:隐藏菜单;
    • password [--md5] STRING: 菜单编辑认证;设定认证方式,匹配才可以编辑
    • title TITLE:定义菜单项“标题”, 可出现多次;
      • root (hd#,#):grub查找stage2及kernel文件所在设备分区;为grub的“根”;
      • kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核
      • initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs文件;
      • password [--md5] STRING: 启动选定的内核或操作系统时进行认证;
  • grub-md5-crypt命令:生成要保护的密码串,将密码串贴到--md5 密码串,这要配置文件里的密码就不会明文暴露

  • 进入单用户模式:
    • (1) 编辑grub菜单(选定要编辑的title,而后使用e命令);
    • (2) 在选定的kernel后附加
    • 1, s, S或single都可以;
    • (3) 在kernel所在行,键入“b”命令;

实现kickstart文件制作与光盘镜像制作

kickstart文件的格式

  • 命令段:
    • 指定各种安装前配置选项,如键盘类型等;
      • 必备命令
      • 可选命令
    • 程序包段:
      • 指明要安装程序包,以及包组,也包括不安装的程序包;
        • %packages 程序包段开始
        • @group_name 安装的包组
        • package 安装的包
        • -package 不安装的,也可能因为依赖而被安装
        • %end 程序包段结束
  • 脚本段:
    • %pre:安装前脚本
      • 运行环境:运行安装介质上的微型Linux系统环境;
    • %post:安装后脚本
      • 运行环境:安装完成的系统;

命令段中的必备命令:

authconfig:认证方式配置,本地认证配置,基于shadow

authconfig  --enableshadow  --passalgo=sha512

bootloader:定义bootloader的安装位置及相关配置,--append=补充参数

bootloader  --location=mbr  --driveorder=sda  --append="crashkernel=auto rhgb quiet"

keyboard:设置键盘类型

keyboard us

lang:语言类型

lang  zh_CN.UTF-8

part:分区布局;以及分区使用方式,默认被注释,默认单位mb,pv为固定前缀

part  /boot  --fstype=ext4  --size=500
part  pv.008002  --size=51200

rootpw:管理员密码

rootpw   --iscrypted  $6$4Yh15kMGDWOPtbbW$SGax4DsZwDAz4201.O97WvaqVJfHcISsSQEokZH054juNnoBmO/rmmA7H8ZsD08.fM.Z3Br/67Uffod1ZbE0s.

timezone:时区

timezone  Asia/Shanghai

clearpart:清除分区

clearpart  --none
 --drives=sda:清空磁盘分区;

volgroup:创建卷组

volgroup  myvg  --pesize=4096  pv.008002

logvol:创建逻辑卷

logvol  /home  --fstype=ext4  --name=lv_home  --vgname=myvg  --size=5120

生成加密密码的方式:生成4个字节8位16进制数为随机数

~]# openssl  passwd  -1  -salt `openssl rand -hex 4`

命令段中的可选命令:

install OR upgrade:安装或升级;

text:

    安装界面类型,text为tui,默认为GUI,单独成行,不需要参数  

network:配置网络接口,自动dhcp

network  --onboot yes  --device eth0  --bootproto dhcp  --noipv6

firewall:防火墙

firewall  --disabled

selinux:SELinux安全加强的策略库

selinux --disabled

repo:指明安装时使用的repository;

repo  --name="CentOS"   --baseurl=cdrom:sr0  --cost=100

url: 指明安装时使用的repository,但为url格式;

url --url=http://172.16.0.1/cobbler/ks_mirror/CentOS-6.7-x86_64/

halt、poweroff或reboot:安装完成之后的行为;

    参考官方文档:《Installation Guide》

定制kickstart文件:

# yum install  system-config-kickstart
# system-config-kickstart

通过该程序界面可以配置上面所有选项

创建光盘镜像:

~]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6 x86_64 boot" -c isolinux/boot.cat -b isolinux/isolinux.bin -o  /root/boot.iso   myboot/

你可能感兴趣的:(Linux基础(7)-Linux启动)