GRUB(Boot Loader):

  grub:GRand Unified Bootloader

    grub 0.x:grub legacy

    grub 1.x:grub2

  grub legacy:

    stage1:mbr

    stage1_5:mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统;

    stage2:磁盘分区(/boot/grub/)

    配置文件:/boot/grub/grub.conf  <--  /etc/grub.conf

    stage2及内核等通常放置于一个基本磁盘分区;

      功用:

        (1) 提供菜单,并提供交互式接口

          e:编辑模式,用于编辑菜单;

          c:命令模式,交互式接口;

        (2) 加载用户选择的内核或操作系统

          允许传递参数给内核

          可隐藏此菜单

        (3) 为菜单提供了保护机制

          为编辑菜单进行认证

          为启用内核或操作系统进行认证

    如何识别设备:

      (hd#,#)

        hd#:磁盘编号,用数字表示;从0开始编号

        #:分区编号,用数字表示;从0开始编号

    grub的命令行接口

      help:获取帮助列表;

      help KEYWORD:详细帮助信息

      find (hd#,#)/PATH/TO/SOMEFILE;

      root ( hd#,#)

      kernel /PATH/TO/ERNEL_FILE;设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的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

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

      配置项:

        default=#:设定默认启动的菜单项;茶单项(title)编号从0开始;

        timeout=#:指定菜单项等待用户选择的时长;

        splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;

        hiddenmenu:隐藏菜单;

        password [--md5] STRING:菜单编辑认证;

        title TITLE:定义菜单项“标题”,可出现多次;

          root (hd#,#):grub查找stae2及kernel文件所在设备分区;为grub的“根”;

          kernel /PATH/TO/VMLINUZ_FILE [ PARAMETERS];启动内核

          initrd /PATH/TO/INITRAMFS_FILE:内核匹配的ramfs文件;

          password [--md5] STRING:启动选定的内核或操作系统时进行认证;

      grub-md5-crypt命令

    进入单用户模式:

      (1) 编辑grub菜单(选定要编辑的title,而后使用e命令);

      (2) 在选定的kernel后附加

        1,s,S或single都可以;

      (3) 在kernel所在行,键入“b"命令;

    安装grub:

      (1) grub-install  # 完整安装,三个阶段都会安装

           grub-install  --root-directory=ROOT /dev/DISK

      (2) grub  # 安装第1阶段和1.5阶段

         grub> root (hd#,#)

         grub> setup (hd#)

    练习:

      1、新加硬盘,提供直接单独运行bash系统;

      2、破坏本机grub stage1,而后在救援模式下修复之;

      3、为grub设备保护功能;

Linux Kernel:

  单内核体系设计、但充分借鉴了微内核设计体系的优点,为内核引入模块化机制。

    内核组成部分:

      kernel:内核核心,一般为bzImage,通常在/boot目录下,名称为vmlinuz-VERSION-RELEASE;

      kernel object:内核对象,一般放置于/lib/modules/VERSION-RELEASE/

        [ ]:N

        [M ]:M

        [*]:Y

      辅助文件:ramdisk

        initrd

        initramfs

    运行中的内核:

      uname命令:

        uname - print system information

        uname [OPTION]...

          -n:显示节点名称;

          -r:显示VERSION-RELEASE;

      模块:

        lsmod命令:

          显示由核心已经装载的内核模块

          显示的内容来自于:/proc/modules文件

        modinfo命令:

          显示模块的详细描述信息

          modinfo [ -k kernel ] [modulename|filename...]

            -n:只显示模块文件路径

            -p:显示模块参数

            -a:author

            -d:description

            -l:license

        modprobe命令:

          装载或卸载内核模块

          modprobe [ -C config-file ]  [ modulename ] [ module parame-ters... ]  # 直接指定模块名且可自动解决依赖关系

            配置文件:/etc/modprobe.conf,/etc/modprobe.d/*.conf

          modprobe [-r] modulename...

        depmod命令:

          内核模块依赖关系文件及系统信息映射文件的生成工具;

        装载或卸载内核模块:

          insmod命令:  

            insmod [ filename ] [ module options... ]  # 此命令必须指定路径且不能自动解决依赖关系

          rmmod

            rmmod [ modulename ]

    /proc目录:

      内核把自己内部状态信息及统计信息,以及可配置参数通过proc伪文件系统加以输出。

      参数:

        只读:输出信息

        可写:可接受用户指定“新值”来实现对内核某功能或特性的配置

          /proc/sys

          (1) sysctl命令用于查看或设定此目录中诸多参数;

             sysctl -w path.to.parameter=VALUE

          (2) echo命令通过重定向的方式也可以修改大多数参数的值;

             echo "VALUE" > /proc/sys/path/to/parameter

        sysctl命令:

          配置文件:/etc/sysctl.conf

            (1) 设置某参数

              sysctl -w parameter=VALUE

            (2) 通过读取配置文件设置参数

              sysctl -p [/path/to/conf_file]

        内核中的路由转发:

          /proc/sys/net/ipv4/ip_forward

          常用的几个参数:

            net.ipv4.ip_forward

            vm.drop_caches

            kernel.hostname

    /sys目录:

      sysfs:输出内核识别出的各硬件设备的相关属性信息;也有内核对硬件特性的设定信息;有些参数是可以修改的,用于调整硬件工作特性。

      udev通过此路径下输出的信息动态为各设备创建所需要设备文件;uddev是运行用户空间程序;专用工具:udevadmin,hotplug;

      udev为设备创建设备文件时,会读取其事先定义好的规则文件,一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目录下;

    ramdisk文件的制作:

      (1) mkinitrd命令

        为当前正在使用的内核重新制作ramdisk文件

          ~]# mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)

      (2)dracut命令

        为当前正在使用的内核重新制作ramdisk文件

          ~]# dracut /boot/initramfs-$(uname -r).img $(uname -r)

    编译内核:

      前提:

        (1) 准备好开发环境;

        (2) 获取目标主机上硬件设备的相关信息;

        (3) 获取到目标主机系统功能的相关信息,例如要启用的文件系统;

      准备好开发环境:

        包组(CentOS 6):

          Server Platform Development

          Development tools    

      目标主机硬件设备相关信息:

        CPU:

          cat /proc/cpuinfo

          x86info -a

          lscpu

        PCI设备:

          lspci

            -v

            -vv

          lsusb

            -v

            -vv

          lsblk

        了解全部硬件设备信息

          hal-device

      简单依据模板文件的制作过程:

        tar xf linux-3.10.57.tar.xz -C /usr/src

        cd /usr/src

        ln -sv linux-3.10.67 linux

        cd linux

        cp /boot/config-$(uname -r) ./.config

 

        make menuconfig

        screen

        make -j #

  

        make modules_install

        make install

        重启系统,并测试使用新内核;

      练习:编译好,并启用之;  

Linux:Day13(下) GRUB的更多相关文章

  1. 如何在Linux上通过grub添加内核参数

    转自Linux中国 我们可以在linux内核启动时为其提供各种各样的参数.这些参数可以自定义内核默认的行为,或者通知内核关于硬件的配置信息.内核参数应在内核启动时通过引导装载程序,如GRUB或LILO ...

  2. Linux 技巧之 Grub 超实用技巧

    1. 简单介绍 什么是 GRUB?GRUB 全名Grand Unified Boot Loader,它是一个引导装入器 -- 它负责装入内核并引导 Linux 系统.GRUB 还能够引导其他操作系统, ...

  3. Ubuntu 11.10下GRUB 2 1.99版编译安装笔记

    Ubuntu 11.10下GRUB 2 1.99版编译安装笔记 以下的安装笔记,都是QLi自己学习grub2 时,所整理的,还是新手,有错误的话,请大家帮忙就别提出来了. 最新版grub V1.99官 ...

  4. 深入理解linux系统下proc文件系统内容

    深入理解linux系统下proc文件系统内容 内容摘要:Linux系统上的/proc目录是一种文件系统,即proc文件系统. Linux系统上的/proc目录是一种文件系统,即proc文件系统.与其它 ...

  5. 【云和恩墨】性能优化:Linux环境下合理配置大内存页(HugePage)

    原创 2016-09-12 熊军 [云和恩墨]性能优化:Linux环境下合理配置大内存页(HugePage)   熊军(老熊) 云和恩墨西区总经理 Oracle ACED,ACOUG核心会员 PC S ...

  6. python基础——Linux系统下的文件目录结构

    单用户操作系统和多用户操作系统 单用户操作系统:指一台计算机在同一时间只能由一个用户使用,一个用户独自享用系统的全部硬件和软件资源. 多用户操作系统:指一台计算机在同一时间可以由多个用户使用,多个用户 ...

  7. 在Linux虚拟机下配置tomcat

    1.到Apache官网下载tomcat http://tomcat.apache.org/download-80.cgi 博主我下载的是tomcat8 博主的jdk是1.8 如果你们的jdk是1.7或 ...

  8. 在Linux系统下运行微信Web开发者工具

    微信Web开发者工具只有window版本和mac版本,如果想要在Linux系统下运行微信Web开发者工具,需要花费很大周折. 注:带 * 的步骤或文件为不确定是否管用的步骤或文件.本人系统为Linux ...

  9. 在Linux虚拟机下配置jdk的环境变量

    1.到Oracle公司的官网里下载好jdk,网址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133 ...

随机推荐

  1. 行为驱动:Cucumber + Selenium + Java(四) - 实现测试用例的参数化

    在上一篇中,我们介绍了Selenium + Cucumber + Java框架下的使用Tags对测试用例分组的实现方法,这一篇我们用数据表格来实现测试用例参数化. 4.1 什么是用例参数化 实际测试中 ...

  2. mysqldump备份表中有大字段失败的排错过程

    几天前收到某个业务项目,MySQL数据库逻辑备份mysqldump备份失败的邮件,本是在休假,但本着工作认真负责,7*24小时不间断运维的高尚职业情操,开始了DBA的排错之路(一开始数据库的备份都是成 ...

  3. 新的一年,来看看大数据与AI的未来展望

    本文由云+社区发表 作者:堵俊平 在数据爆炸与智能革命的新时代,新的平台与应用层出不穷,开源项目推动了前沿技术和业界生态快速发展.本次分享将以技术和生态两大视角来看大数据和人工智能技术的发展,通过分析 ...

  4. 打造自己的.NET Core项目模板

    前言 每个人都有自己习惯的项目结构,有人的喜欢在项目里面建解决方案文件夹:有的人喜欢传统的三层命名:有的人喜欢单一,简单的项目一个csproj就搞定.. 反正就是萝卜青菜,各有所爱. 可能不同的公司对 ...

  5. mybatis-generator自动生成代码插件使用详解

    mybatis-generator是一款在使用mybatis框架时,自动生成model,dao和mapper的工具,很大程度上减少了业务开发人员的手动编码时间,今天自己研究了一下,也分享一下使用心得供 ...

  6. Linux下安装Tomcat启动报错

    一.报以下错误: Using CATALINA_BASE:   /home/apache-tomcat-7.0.72Using CATALINA_HOME:   /home/apache-tomcat ...

  7. HAProxy负载均衡技术

    软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现.LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载. HA ...

  8. [android] 创建模拟器遇到的常见错误

    1.错误提示: invalid command line sdk安装目录有中文添加ANDROID_SDK_HOME环境变量,指向sdk安装目录2.模拟器无法安装应用模拟器开启其实是开启了的程序占用这个 ...

  9. C# 处理PPT水印(一)——添加水印效果(文字水印、图片水印)

    对文档添加水印可以有效声明和保护文档,是保护重要文件的方式之一.在PPT文档中同样也可以设置水印,包括文本水印和图片水印,本文将讲述如何通过Spire.Presentation for .NET来对P ...

  10. string[]转list<long>,List转字符串

    List转字符串,用逗号隔开 List<string> list = new List<string>();list.Add("a");list.Add(& ...