启动流程排错和自建linux系统

一、grub的配置文件/boot/grub/grub.conf

default=0        ###设置默认启动项0表示第一个
timeout=5        ##设置超时时间,如果超过5s用户没有操作,则默认启动第一个
splashimage=(hd0,0)/grub/splash.xpm.gz        ###设置选择内核界面的图片
hiddenmenu
password --md5 $1$mCYby$yvu3YoVDYW9jf4M47YcM4/        ###选择内核界面,进入"a","e","c"模式需要登录的密码
title CentOS 6 (2.6.32-642.el6.x86_64)        ###选择内核界面处的提示信息
        root (hd0,0)        ###相对于grub的根路径
        kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=8ecfb3ed-37d8-43cd-a1ec-8a4be6fa5973 nomodeset rd_NO_LUKS  
        KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet  ax_loop=100       
              ###内核的核心文件,如果boot没有独立分区则需要写成/boot/vmlinuz.....ro只读挂载(系统启动后会重新挂载rw)
              ###root=***指明根,后面的都是配置的其他额外辅助功能可省略。
             ###ax_loop=100定义最大的loop设备为100个(默认8个)
             ###rhgb(图形) quiet(隐藏内核启动过程) 这两项去掉后会显示启动过程(默认不显示,只有按esc才能看到)
        initrd /initramfs-2.6.32-642.el6.x86_64.img        ###虚拟文件系统,伪根,根的驱动程序
        password --md5 $1$mCYby$yvu3YoVDYW9jf4M47YcM4/        ###启动该系统时需要输入的密码

               2.png   

                        p:输入密码,输入密码之后会提示"a","e","c"

                        a:在启动之前修改内核参数

                        e:编辑模式,用于编辑菜单
                        c:命令模式,交互式接口

                        o:在选择的行后面增加一行

                        O:在选择的行前面增加一行

                        d:删除选择的行

                    上述操作都是属于临时修改!!!

                    注意:输入c进入命令行模式,此时可以略过选择内核阶段,自己制定内核文件和伪根文件,步骤如下:

            1.png

                注意:kernel处,指明的根是文件系统的根,不是相对于grub的根。

        

                内核选择界面更换图片的办法:

                        more /boot/grub/splash.xpm.gz  可以查到图片的分辨率

                        根据分辨率的大小,截取或查找对应的图片

                         linux系统中安装图片编辑器yum install ImageMagick -y

                         格式转换 convert-resize 640×480 -colors 14 win.jpg win.xpm

                         gzip win.xpm

                         更改grub.conf 中配置的图片名字,重启即可。

启动排错问题:

    1、内核文件,虚拟文件系统文件配置文件中写错或者信息不完整导致系统无法启动。

            1.png

                如果出现上述kernel文件信息不完整或者错误,可按下"e"键,输入kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sda3,按回车,然后回到上述界面,按"b"键,重新启动即可。

                注意:上述修改属于临时修改,启动完成之后,下次启动还是存在问题,还要重新修改grub的配置文件。

    2、grub.conf被误删除,导致系统无法启动。

                启动后直接进入命令行模式:

        1.png

             按如下操作即可,由于是临时生效,因此后续还要重新编辑grub.conf 配置文件。

        1.png

    3、破坏第一阶段MBR 446个字节,dd if=/dev/zero of=/dev/sda bs=1 count=446,hexdump -C -v /dev/sda -n 512 确认。

            重启后出现如下所示,因为启动程序被破坏,因此系统认为硬盘不可启动,直接从光盘引导,选择第三项进入安全模式。

            1.png

首先/sbin/grub-install 救援模式上不存在该工具,存储在硬盘上,因此要切根,stage1不属于任何分区的属于MBR,关联硬盘设备,因此要写/dev/sda。

            具体操作步骤:

                      方法1:

                                    1、chroot /mnt/sysimage/

                                    2、grub-install /dev/sda

                                    3、exit exit

                                    4、选择reboot

            注意:有些环境中如果想把grub安装到别的硬盘上根不是boot的上级目录就要按如下写法操作:

                                grub-install –root-directory=DIR(boot目录的父目录,如果其父目录是根则可省略) /dev/DISK

                        方法2:

                                    1、grub

                                    2、root (hd0,0)

                                    3、setup (hd0)

                                    4、quit exit

                                    5、选择reboot

    

    4、破坏1.5阶段,dd if=/dev/zero of=/dev/sda bs=512 cxount=2 seek=1.

                    reboot后直接黑屏,重新启动进入光盘引导,进入救援模式,后续具体操作同第三题破坏MBR的解决办法相同。

                    注意:用上述第二种方法修复stage1.5要依赖于/boot/grub/*1.5*的文件,如果这个文件不存在则会修复失败,第一种方法grub-install不依赖/boot/grub/*1.5*文件。

    5、删除rm -rf /boot/grub  stage 2阶段并修复。

        1.png

                重新启动,光盘启动进入救援模式,在命令行中操作如下(不能采用问题3中的方法2 ,因为缺失1.5文件):

        q.png

                注意:–root-directory=/ 可以省略,此时进入/boot/grub目录中,可以看到缺少grub.conf文件

        1.png

                可以在在该目录下手写一份,也可以重新启动,在gurb命令行中重新输入,同问题2一样的解决办法。

        1.png

                    注意:输入上述操作完后会进行修复,修复完成之后还要在输入一遍才能启动,启动完成后,在/boot/grub/目录下手写一份grub。conf文件。

        1.png

    6、删除/sbin/init程序,并恢复。

                    开机后进入后卡在如下画面,不支持输入命令,不能进行任何操作。

        1.png

                重新启动,进入内核选择界面,按"a"键,进入编辑内核参数,让bash代替init命令,具体操作如下。

            1.png

                回车后重新启动,将准备好的init文件还原到/sbin目录下,重新启动即可。

            2.png

                    如果启动过程中,卡在某个程序不能正常启动,可以在内核选择界面,输入"a",进入内核编辑界面输入1,回车,进入单用户模式,用chkconfig 某程序 off ,在重新启动即可。

    

    7、删除vmlinuz-2.6.32-642.el6.x86_64,initramfs-2.6.32-642.el6.x86_64.img 文件,重启并恢复

                重启后出现的画面

                1.png

                再次从光盘启动进入救援模式,然后创建一个目录挂载光盘,在光盘中的isolinux目录中可以看到vmlinuz文件,将其cp到/mnt/sysimage/boot/目录下

            3.png

                创建/boot目录下创建initramfs-2.6.32-642.el6.x86_64.img 文件:

            1.png

                注意:光盘/boot目录里面vmlinuz 文件名要与/boot/grub/grub.conf配置文件的中文件名保持一致,复制完后还要修改grub.conf中文件名

       方法2、

                假设我们用网络启动,用光盘引导,开启网络连接,选择yes。

            1.png

                可以自己配置网络也可动态获取,我们选择动态获取。

1.png

            进入到命令行模式后,输入ifconfig 获取ip地址后,通过scp命令从别的主机拷贝到问题主机上,重新启动即可。

            1.png

            1.png

    8、dd if=/dev/zero of=/dev/sda bs=446 count=1

            rm -rf /boot

            破坏后重新启动,光盘引导进入救援模式,安装kernel包,指明安装路径,用–force 或–replacepkgs选项

            2.png

                用grub-install修复mbr第一阶段

            2.png

                进入/boot/grub/目录下,创建grub.conf 文件,重启即可。

    9、删除/etc/fstab 、删除/boot/,重新启动不恢复。

                进入光盘救援模式,fdisk -l 和 blkid 查看磁盘信息

            1.png

                根据上图根据磁盘空间大小可以分析出来sda1是boot,sda3是根,但是如果在磁盘大小比较均衡,且数目表多时,就需要将每个磁盘挂载到指定目录中,然后根据磁盘空间中的内容来确定每个磁盘。

                1.png

                2.png

                   进入根目录中,创建etc/fstab文件。

            1.png

                    /dev/sda1 /boot ext4 defaults 1 1

                    /dev/sda3 / ext4 defaults 1 2

                    重新启动系统,重新进入救援模式,让系统帮我们挂载

                1.png

                1.png

                    在/boot/目录下可以看到缺失grub目录,因此需要通过grub-install /dev/sda来安装

                1.png

                    最后在/boot/grub/目录下创建grub.conf 的配置文件,重新启动系统即可。

    

    10、逻辑卷情况下,删除/etc/fstab,删除/boot/的修复方法。

                    光盘启动进入救援模式

                    lvscan 扫描逻辑卷

                    vgchage -ay 激活逻辑卷

                    mount /dev/vg0/root /mnt/sysimage 挂载逻辑卷

                    vi /mnt/sysimage/etc/fstab

                    /dev/sda1     /boot     ext4     defaults     1 1

                    /dev/vg0/root  /     ext4       defaults     1 2

                    /dev/vg0/var    /var      ext4    defaults    0  0

                    /dev/vg0/usr    /usr       ext4    defaults     0 0   

                     reboot

                     光盘启动进入救援模式,让系统自动挂载

                     mkdir /mnt/cdrom

                     mount /dev/cdrom /mnt/cdrom

                     chroot /mnt/sysimage

                     rpm -ivh /mnt/cdrom/Packages/kernel-2****.rpm –replace|force

                     grub-install /dev/sda

                     vim /boot/grub/grub.conf

                     default=0

                     timeout=5

                     title linuxkernel

                     root (hd0,0)

                     kernel /vmlinuz。。。。。root=/dev/vg0/root

                     initrd /intramfs……………………..

 

    11、简易linux制作

          添加一块硬盘,扫描让系统识别

                1.png
          分区格式化,创建/boot/  和 /

                1.png

           格式化

                    mkfs.ext4 /dev/sdc1

                    mkfs.ext4 /dev/sdc2

           挂载/dev/sdc1 到/mnt/boot目录,并将核心文件拷贝到目录中,安装grub-intall

                1.png

            创建/boot/grub/grub.conf

                1.png

           挂载根目录,并创建根目录中的文件

                1.png

                1.png

           编辑/mnt/sysroot/etc/fstab,注意由于我要把这个硬盘当做系统来启动,因此在新的主机上面启动sdc1会变成sda1 

                1.png

            将命令对应的二进制文件和库文件通过脚本拷贝到对应的目录中

            关机,新建虚拟机,让配置好的硬盘,添加到虚拟机中启动。

                        CentOS 6.8-milinux.vmdk  54M

            

                

                

原创文章,作者:Naruto,如若转载,请注明出处:http://www.178linux.com/45913

(0)
NarutoNaruto
上一篇 2016-09-18 12:24
下一篇 2016-09-18 12:26

相关推荐

  • 使用CDN后,PHP如何获取用户的真是IP?

    在统计访问日志参数的时候IP是一个重要的参数,所有索取客户端的IP就至关重要。 在logformat配置中有两个变量是获取IP地址的: remoteaddr:客户端IP xforwardedfor:客户端的IP 从上面来看两个都是客户端IP,那这两个变量有什么不同? 首先当你访问某个网站,假设你中间不经过任何代理,那么webserver就会把remotead…

    Linux干货 2015-12-21
  • JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解

    摘要: JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,本博客希望能起抛砖引玉之用,让大家能开始对JVM性能调优的常用工具有所了解。     现实企业级Java开发中,有时候我们会碰到下面这些问题: Out…

    2017-08-17
  • sed和awk和数组实践-week15

    1、总结sed和awk的详细用法; (1) sedsed:Stream EDitor,流编辑器,行编辑器 基本原理:一次从文本中读取一行,放到sed自己的工作车间加工, 该工作车间叫做模式空间(pattern space)判断该行是否符合过滤模式, 如果符合过滤模式: 送往标准输出(终端) 执行编辑操作, 从模式空间中处理以后,处理过后送到标准输出(不一定有…

    Linux干货 2017-05-06
  • 8-10 bash变量浅谈

    8-10 作业 一、脚本 1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小。 2、编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到/root/etcYYYY-mm-dd中 3、编写脚本/root/bin/disk.…

    Linux干货 2016-08-15
  • 第二十六天 iptables 初识

      Iptables是位于用户空间,是linux系统上的防火墙管理配置规则的工具,主要用于添加、删除、管理netfilter的规则,   Netfilter是位于内核中真正的防火墙,由5个钩子组成,也叫五个规则链。 Netfilter的作用:起到过滤封包,转换与映射IP地址和端口,拆分和修改封包内容,追踪封包等功能 Iptabl…

    Linux干货 2016-07-02