欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

修复/boot及/etc/fstab、自制linux、编译安装内核

最编程 2024-02-24 15:41:13
...

   修复/boot及/etc/fstab、自制linux、编译安装内核

实验一、破坏dev/sda 的MBR的446字节:

破坏:dd if=/dev/zero of=/dev/sda bs=1 count=446 

查看:hexdump -C -n 512 /dev/sda 

发现前面的字节都为0

========================================================================================

========================================================================================

状况一、刚破坏未重启的时候修复:

可以利用grub重新生成:

grub

grub> root (hd0,0)  

grub> setup (hd0)

quit退出

修复完之后使用hexdump -C -n 512 /dev/sda查看发现已经修复成功

========================================================================================

 

=======================================================================================

 

======================================================================================

状况二、破坏之后重启了,但是有MBR备份时的修复:

备份:dd if=/dev/sda of=/app/mbr bs=1 count=512

======================================================================================

=================================================================================

破坏:dd if=/dev/zero of=/dev/sda bs=1 count=446

=================================================================================

 

=================================================================================

修复:

1、进入救援模式

   1)在系统启动显示进度条的时候,按一下esc键

   2)在弹出的页面中选择第三项Rescue

w

  3)选择语言的都按默认的来,直接按回车,直到出现Setup Networking,可以根据自己的选择,是利用网络接口还是不用。在这里就不用,选择no

 

   4)接下来就按默认的来,一步步回车就行,就进入shell了。默认硬盘的根被挂载到/mnt/sysimage/

2、利用备份的mbr恢复

           dd if=/mnt/sysimage/app/mbr of=/dev/sda bs=1 count=446

3、保险起见,恢复完之后使用sync同步

4、reboot重启即可

状况三、破坏之后重启,但是没有MBR备份时的修复:

1、进入救援模式

2、切换根,使根/表现为硬盘的根

                      chroot /mnt/sysimage

 

3、重新生成mbr

  grub-install /dev/sda   

   当然也可以使用状况一中的grub的方式生成mbr

4、sync同步

5、reboot重启

实验二、删除/boot下所有文件(rm -rf /boot)

恢复:

1、进入救援模式

2、切换根

  chroot /mnt/sysimage

3、在/boot下生成initramfs文件

           mkinitrd /boot/initramfs-`uname -r`.img  `uname -r`

4、挂载光盘,将光盘的内核文件拷贝到/boot下

                    mount /dev/sr0 /mnt

                    cp /mnt/isolinux/vmlinuz /boot/

 

5、安装grub,生成grub文件

                    grub-install /dev/sda

 

6、创建并编辑grub.conf文件

  vim /boot/grub/grub.conf

   default=0

   timeout=5

   title centos6.9

   kernel /vmlinuz root=/dev/sda2

   initrd /initramfs-2.6.32-696.el6.x86_64.img

7、sync同步

8、退出切换的根,并且重启即可

  exit;reboot

  如果不退出,那么reboot无法使用

 

实验三、在分区情况下,删除/boot下所有文件,删除/etc/fstab

1、进入救援模式,但是由于没有/etc/fstab文件所以根无法自动挂载到/mnt/sysimage

2、找到根在哪个分区

     建一个临时目录作为挂载点:mkdir /mnt/tmp

     尝试所有sda挂载:mount /dev/sda{1,2,...} /mnt/tmp

     ls /mnt/tmp 查看文件,判断哪个是根

 

3、挂载根

  mount /dev/sda2 /mnt/tmp

4、创建fstab文件并写内容

  cat > /mnt/tmp/etc/fstab   

   /dev/sda1  /boot ext4 defaults 0 0

   /dev/sda2  /    ext4 defaults 0 0

   /dev/sda3  /app  ext4 defaults 0 0

   /dev/sda5  swap  swap defaults 0 0

使用Ctrl+d 结束输入。不能使用Ctrl+c退出,否则会删除最后一条记录。

 

5、写完重启再进救援模式,就会自动挂载根到/mnt/sysimage了

 

6、修复/boot如实验二,或者使用如下方法

 1)进去救援模式后挂载光盘

   mkdir /mnt/cdrom 创建临时目录作为挂载点

   mount /dev/sr0 /mnt/cdrom 挂载光盘

 2)安装内核包

   如果在安装内核包之前没有切换根,那么使用下面的命令来安装

   rpm -ivh /mnt/cdrom/Packages/kernel-2.6.32-696.el6.x86_64.rpm --root=/mnt/sysimage --force

   如果已经切换根,那么使用下面的命令来安装

   rpm -ivh /mnt/cdrom/Packages/kernel-2.6.32-696.el6.x86_64.rpm --force

 3)在已经切换根(chroot /mnt/sysimage)的情况下,安装grub

       grub-install /dev/sda  安装grub

       sync 同步

 4)编辑/boot/grub/grub.conf文件

       vim /boot/grub/grub.conf

           default=0

           timeout=5

           title linux

  kernel /vmlinuz-2.6.32-696.el6.x86_64 root=UUID=6da11b60-dd80-460a-a00f-beb8b3373b5c

          initrd  /initramfs-2.6.32-696.el6.x86_64.img

 说明:UUID可以通过r!blkid /dev/sda2导入

        

     /vmlinuz-2.6.32-696.el6.x86_64和initrd /initramfs-2.6.32-696.el6.x86_64.img的文件名都可以通过r!ls /boot/导入    。

     不写grub.conf文件就没有菜单,会出错,不过可以在出错界面直接写kernel /vmlinuz-2.6.32-696.el6.x86_64以及initrd /initramfs-2.6.32-696.el6.x86_64.img 。临时启动了系统之后再写去编辑grub.conf文件

  5)退出切换的根并且重启系统

    exit;reboot

实验四、在逻辑卷环境下删除/boot下所有文件,删除/etc/fstab:

修复:

1、进入救援模式

2、激活卷组

  vgchange -ay

  使用lvscan查看逻辑卷状态此时是active了

3、挂载逻辑卷

  blkid  查看逻辑卷名,为下面的挂载做准备

  mkdir /mnt/tmp 创建目录作为挂载点

  mount /dev/UolGroup/lv_root /mnt/tmp 挂载逻辑卷

4、编辑fstab文件

  cat > /mnt/tmp/etc/fstab

   /dev/sda1          /boot   ext4 defaults 0 0

   /dev/UolGroup/lv_root  /     ext4 defaults 0 0

   /dev/UolGroup/lv_home  /home  ext4 defaults 0 0

   /dev/UolGroup/lv_swap  swap   swap defaults 0 0

5、重启之后再进入救援模式来修复/boot,此后的步骤完全同实验三的修复/boot

实验五、/sbin/init故障(被移走mv /sbin/init /app):

修复:

1、在选择内核的界面按a,在UUID后面加一个参数init=/bin/bash

  /bin/bash是系统自带的程序,可以使用这个先启动系统(不过起来后仅能使用部分命令)

 

2、系统启动后重新挂载根/为可写(启动后是只读的,不能写文件,不能挂载/app)

  mount -o remount,rw /

3、挂载/app

  mount /dev/sda3 /app  挂载/app对应的分区

4、将init文件移回来

  mv /app/init /sbin/

  如果是删除了init文件,那么可以利用光盘重装init:

  1)挂载光盘

     mount /dev/sr0 /mnt/

  2) 重装init:

     rpm -ivh /mnt/Packages/upstart-0.6.5-16.e16.x86_64.rpm --force

5、重启

实验六:自制linux:

准备工作:添加一块新硬盘,将来将自制的Linux系统放在这里

使硬盘生效: echo '- - -'>/sys/class/scsi_host/host2/scan 或者

        echo '- - -'>/sys/class/scsi_host/host0/scan

步骤:

上一篇: Linux中fstab文件的配置和理解

下一篇: Centos 6.7 图文讲解救援模式修复fstab过程