linux内核修复(一)

一、 删除/boot/grub/*下所有文件,只保留grub.conf配置文件,系统能否正常启动修复?
1、未经修复过的系统。

[root@centos6 grub]# ls
device.map     fat_stage1_5  grub.conf         jfs_stage1_5  minix_stage1_5     splash.xpm.gz  stage2         vstafs_stage1_5
e2fs_stage1_5  ffs_stage1_5  iso9660_stage1_5  menu.lst      reiserfs_stage1_5  stage1         ufs2_stage1_5  xfs_stage1_5
[root@centos6 grub]# mv grub.conf /data
[root@centos6 grub]# rm -f ./*
[root@centos6 grub]# mv /data/grub.conf ./
[root@centos6 grub]# ls
grub.conf


系统能够正常启动
stage2阶段就是一个grub.conf配置文件,其它文件都不起到直接的作用
此时重新启动系统只会在一开始报一个没有启动图片的错误,此错误不影响系统的正常启动(可忽略),/boot/grub下的其他文件只做暂时备份使用即stage1 stage1_5阶段的备份文件,只有当1和1.5阶段出现故障的时候 可以通过一些命令进行修复,修复的时候会用到此处的备份文件
2、经过修复的系统。
再启动会出现报错,状态码为Error 15
在这里插入图片描述
修复方案:
1、进入救援模式
esc键进入boot menu菜单,这里选择第3项光盘引导
在这里插入图片描述
选择第三项Rescue installed system
在这里插入图片描述
2、使用grub-install命令修复,该命令可以修复1阶段,1.5阶段,2阶段。进救援模式的时候,可以看到提示说明,系统的根将被挂载到/mnt/sysimage目录下。因此进去之后我们还得执行切换根目录操作。
在这里插入图片描述
可以看到/boot/grub/目录下生成了一些文件。这时候退出,重启系统即可。
在这里插入图片描述
二、破坏MBR的前446字节的信息,修复(stage1阶段修复)
破坏stage1阶段,dd if=/dev/zero of=/dev/sda bs=1 cout=446

[root@centos6 ~]# dd if=/dev/zero of=/dev/sda bs=1 cout=446
dd: unrecognized operand `cout=446'
Try `dd --help' for more information.
[root@centos6 ~]# dd if=/dev/zero of=/dev/sda bs=1 count=446
446+0 records in
446+0 records out
446 bytes (446 B) copied, 0.00243429 s, 183 kB/s
[root@centos6 ~]# hexdump -C  -n 512 /dev/sda
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000001b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 80 20  |............... |
000001c0  21 00 83 aa 28 82 00 08  00 00 00 00 20 00 00 aa  |!...(....... ...|
000001d0  29 82 83 fe ff ff 00 08  20 00 00 80 1a 06 00 fe  |)....... .......|
000001e0  ff ff 83 fe ff ff 00 88  3a 06 00 80 a9 03 00 fe  |........:.......|
000001f0  ff ff 05 fe ff ff 00 08  e4 09 00 f8 1b 0f 55 aa  |..............U.|
00000200


重启系统,此时进入光盘界面。说明磁盘MBR遭到破坏,没有找到启动项。
在这里插入图片描述
修复方案1:
选择第三项进入救援模式
1、切换根目录,chroot /mnt/sysiamge在这里插入图片描述
2、grub-install命令修复,这个命令修复全阶段。
在这里插入图片描述
3、sync同步设置到磁盘,确保磁盘已经写入进去了。
在这里插入图片描述
4、退出shell,重新启动。
在这里插入图片描述
修复方案二:
使用grub交互命令修复
grub
grub> root (hd0,0)
grub> setup (hd0)
在这里插入图片描述
退出重启即可。
三 、破坏512字节之后的内容进行修复(stage1.5阶段过程)
dd if=/dev/zero of=/dev/sda bs=1 count=10000 skip=512 seek=512

[root@centos6 ~]# dd if=/dev/zero  of=/dev/sda  bs=1 count=10000 skip=512 seek=512
10000+0 records in
10000+0 records out
10000 bytes (10 kB) copied, 0.0185813 s, 538 kB/s

此时会发现菜单都看不到
在这里插入图片描述
stage1.5出故障使用光盘引导
修复方案1:
1.按Esc键进入光盘引导界面
在这里插入图片描述
2.选择第三项进入救援模式
在这里插入图片描述
3.切根 chroot /mnt/sysimage
在这里插入图片描述

4.使用grub-install命令
在这里插入图片描述
5、sync同步磁盘,此时grub目录已经修复好了。
在这里插入图片描述
6、exit退出,重启系统
在这里插入图片描述
修复方案2:
前三个步骤和方案1一样,然后使用grub命令修复。

sh-4.1# grub
grub>root (hd0,0)     #表示boot在第一块磁盘第1个分区
grub>setup (hd0)      #此步骤依赖于/boot/grub/*下面的文件

在这里插入图片描述
四、删除/boot/grub整个目录,如何修复?(破坏stage2阶段)

[root@centos6 ~]# rm -f /boot/grub/*
[root@centos6 ~]# ls /boot/grub/

重启后界面如下。
在这里插入图片描述

修复方案:
1、进入救援模式
2、chroot /mnt/sysimage 切根
在这里插入图片描述
3、使用grub-install /dev/sda
在这里插入图片描述
4、sync同步磁盘,此时grub目录已经修复好了
在这里插入图片描述
5、ls查看 /boot/grub目录,发现缺少grub.conf文件,因此这里需要手写一个grub.conf文件。
在这里插入图片描述
在这里插入图片描述
使用设备名称也是可以的,不过建议使用UUID
在这里插入图片描述

vim /boot/grub/grub.conf
#必须写三项分别是title kernel initrd
default 0
timeout 3
title  Centos6
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=/dev/sda2 selinux=0 #root这里可以使用UUID代替,ro表示只读挂载,临时禁用selinux
initrd /initramfs-2.6.32-696.el6.x86_64.img 

可以小技巧,防止手敲出错

:r! ls /boot/vmlinuz-2.6.32-696.el6.x86_64 /boot/initramfs-2.6.32-696.el6.x86_64.img

在这里插入图片描述

查看系统根目录的UUID 注:r!blkid|grep /dev/sda2 #UUID后面注意去掉引号
在这里插入图片描述
6、重启系统即可。
五、删除grub.conf文件修复

[root@centos6 ~]# rm -f /boot/grub/grub.conf 
[root@centos6 ~]# ls /boot/grub/grub.conf 
ls: cannot access /boot/grub/grub.conf: No such file or directory

重启系统后界面如下
在这里插入图片描述
解释:stage1、stage1.5没有问题主要stage2有问题,连菜单都进不去,直接跳到grub
修复方案:
1、在界面上输入以下几行命令。

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

在这里插入图片描述
2、重启系统后,进入/boot/grub目录下,手动编辑grub.conf文件即可。

[root@centos6 grub]# vim grub.conf 
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda2
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS 6 (2.6.32-696.el6.x86_64)
	root (hd0,0)
	kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=e9bd1e7a-d025-4245-aba7-f480de3c3d60 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=128M  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
	initrd /initramfs-2.6.32-696.el6.x86_64.im

grub支持交互式输入,如果没有grub.conf文件可以手动输入,也可以进入救援模式,手动编辑grub.conf文件。
六、设置grub背景图片
图片像素和格式是有要求的
使用convert工具对图片像素进行设置
首先得安装convert命令所提供的包

[root@centos6 ~]# yum install ImageMagick
[root@centos6 ~]# which convert
/usr/bin/convert
[root@centos6 ~]# rpm -qf /usr/bin/convert
ImageMagick-6.7.2.7-6.el6.x86_64
[root@centos6 ~]# convert -resize 640x480 -colors 14 beijing.jpg  beijing.xpm  #此命令必须在beijing.jpg位置使用,使用less zf.xpm可以在头部看到相关信息 
[root@centos6 ~]# gzip beijing.xpm
[root@centos6 ~]# cp beijing.xpm.gz /boot/grub/
[root@centos6 ~]# ls  /boot/grub/
beijing.xpm.gz  e2fs_stage1_5  ffs_stage1_5  iso9660_stage1_5  minix_stage1_5     stage1  ufs2_stage1_5    xfs_stage1_5
device.map      fat_stage1_5   grub.conf     jfs_stage1_5      reiserfs_stage1_5  stage2  vstafs_stage1_5
[root@centos6 ~]# vim /boot/grub/grub.conf 
splashimage=(hd0,0)/grub/beijing.xpm.gz

重启系统,进入grub界面就能看到设置的背景图片
在这里插入图片描述
七、调换kernel和initrd调换顺序,开机启动情况?

title CentOS 6 (2.6.32-696.el6.x86_64)
	root (hd0,0)
	initrd /initramfs-2.6.32-696.el6.x86_64.img
	kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=e9bd1e7a-d025-4245-aba7-f480de3c3d60 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=128M  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

重启系统后界面如下
在这里插入图片描述
意思是linux kernel必须在initrd之前加载,否则系统无法启动。只有加载kernel才会知道操作系统的根,找到根了才会找到内存用户驱动。
修复:
1、进入GRUB界面,选择要编辑的内核,按“e”键进入编辑界面
在这里插入图片描述
2、选中initrd这行,按d键删除。
在这里插入图片描述
3、按o键开启新的一行
在这里插入图片描述
4、按e键编辑,添加initrd这行,支持tab键补全。
在这里插入图片描述
5、编辑完成后,按b键启动即可。
在这里插入图片描述
八、删除/boot下所有文件如何修复?

[root@centos6 ~]# rm -rf /boot
rm: cannot remove `/boot': Device or resource busy
[root@centos6 ~]# ls /boot

系统启动后,进入如下界面
在这里插入图片描述
分析:
/boot下面主要的文件有内核(kernel),和虚拟文件系统(initramfs),还有就是grub目录下的文件。内核文件可以从光盘拷贝或者去其它相同系统的机子上拷一份。
修复方案1:
1、进入救援模式
在这里插入图片描述
在这里插入图片描述
2、chroot /mnt/sysimage切换根目录。
3、df查看挂载情况,如果光盘没有挂载则先挂载光盘mkdir /mnt/cdrom mount /dev/sr0 /mnt/cdrom。这里可以看到光盘已经挂载。
在这里插入图片描述
4、进入挂载光盘的目录,内核文件在/mnt/cdrom/isolinux目录下,只需复制到/boot目录下即可。
cp /mnt/cdrom/isolinux/vmlinuz /boot/vmlinuz-‘uname -r’
vmlinuz文件的大小和刚开始文件系统大小是一样的,说明内核是一个固定不变的东西
在这里插入图片描述
5、生成新的initramfs文件mkinitrd /boot/initramfs-uname -r.img uname -r
在这里插入图片描述
6、使用grub-install命令生成grub目录下的一些配置文件。
在这里插入图片描述
7、在/boot/grub目录下新建一个grub.conf文件

vim /boot/grub/grub.conf
#必须写三项分别是title kernel initrd
default 0
timeout 3
title  Centos6
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=/dev/sda2 selinux=0 #root这里可以使用UUID代替,ro表示只读挂载,临时禁用selinux
initrd /initramfs-2.6.32-696.el6.x86_64.img 

在这里插入图片描述
8、同步数据,然后退出
在这里插入图片描述
9、重启系统
修复方案2:
1、进入救援模式
2、chroot /mnt/sysimage 切根,然后df查看光盘是否挂载
3、安装kernel包,kernel包包含了vmlinuz文件和initramfs文件。
在这里插入图片描述
4、grub-install /dev/sda
在这里插入图片描述
5、在/boot/grub目录下新建一个grub.conf文件

vim /boot/grub/grub.conf
#必须写三项分别是title kernel initrd
default 0
timeout 3
title  Centos6
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=/dev/sda2 selinux=0 #root这里可以使用UUID代替,ro表示只读挂载,临时禁用selinux
initrd /initramfs-2.6.32-696.el6.x86_64.img

在这里插入图片描述
6、重启恢复正常
在这里插入图片描述
九、误删除/sbin/init,无法进入系统如何修复
/sbin/init是用户空间的第一个应用程序,系统启动后将第一个运行。

[root@centos6 ~]# rm -f /sbin/init

系统启动后,直接进入如下界面
在这里插入图片描述
恢复方案1:
1、进入grub,按c键进入命令行
在这里插入图片描述
2、按a键在后面添加 init=/bin/bash,不用系统默认的init,使用/bin/bash来代替
在这里插入图片描述
用bash来作为计算机的第一个进程,bash内置了一些内部命令
4、回车之后进入如下界面,可以输入一些命令
在这里插入图片描述
可以输入一些命令
在这里插入图片描述

5、查看/sbin/bash命令来自哪个包

bash-4.1# rpm -qf /sbin/init
#upstart包提供

在这里插入图片描述

此时根目录的挂载是只读方式挂载,不能安装此包
在这里插入图片描述
6、重新挂载根,默认只读挂载

bash-4.1# mount -o remount,rw /   #以可读可写方式挂载根目录

在这里插入图片描述

7、挂载光盘,安装upstart包
挂载光盘
在这里插入图片描述
安装包要强制安装,–force选项,upstart包毕竟已经安装过了
在这里插入图片描述
8、sync同步到磁盘
在这里插入图片描述

9、检查一下可以看到/sbin/init
在这里插入图片描述
总结:/sbin/init文件误删除后,不需要进入救援模式就可以直接通过命令进行修复,过程中发现根是只读挂载的,必须重新挂载,同时也要挂载光盘,才能安装upstart包。
10、重启系统
在这里插入图片描述
恢复方案2:
1、进入救援模式。
2、切换根目录,chroot /mnt/sysimage
在这里插入图片描述
3、df -h查看挂载情况,如果光盘挂载了则直接安装upstart包,如果没挂载则先挂载光盘。
df -h查看挂载
在这里插入图片描述
安装软件包
在这里插入图片描述
或者把upstart安装包解开。
在这里插入图片描述
4、退出,重启即可。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 用Linux内核作为操作系统的基础,可以实现一个新的操作系统。在这个过程中,需要深入了解Linux内核的各个方面,包括内存管理、进程管理、文件系统、设备驱动程序等。 需要使用C语言编写内核代码,并且需要了解一些汇编语言来实现一些底层的功能。同时,还需要了解操作系统的整体架构和设计原则,以确保操作系统的可靠性、安全性和效率。 这是一个非常复杂的任务,需要经验丰富的程序员和计算机科学家的共同努力才能实现。即使使用了Linux内核,也需要进行大量的开发和测试工作,才能构建出一个完整、稳定、可靠的操作系统。 ### 回答2: 要用 Linux 内核写一个操作系统,首先需要了解操作系统的基本概念和功能,并熟悉 Linux 内核的架构和编程接口。接下来,可以按照以下步骤进行: 1. 确定操作系统的需求和目标:思考要开发的操作系统的用途、目标用户群体和基本功能等方面的需求。 2. 下载和安装适当的开发工具:根据所选操作系统开发的需求,从 Linux 官方网站或其他可靠资源下载合适版本的 Linux 内核,并安装在开发机上。 3. 初步配置和编译内核:根据实际需求,进行初步的内核配置,确定需要的功能模块。然后,使用内核配置工具进行配置保存,接着开始编译内核源码。 4. 针对具体应用进行内核定制:根据所需操作系统的功能需求,可以对内核进行二次开发和定制,添加或删除相应模块,扩充或精简某些功能。 5. 编写系统级驱动程序和服务:根据需求,编写特定的设备驱动和系统服务程序。可以利用 Linux 内核提供的接口函数,编写驱动程序,控制硬件设备的操作。 6. 进行内核的构建和连接:按照所做的修改和定制,重新编译内核源码,生成适合的内核映像文件。 7. 进行系统的测试和调试:将生成的内核映像文件烧录到目标设备上,进行系统的验证和测试。调试是一个不可或缺的环节,可以通过调试工具和日志信息定位和修复问题。 8. 配置和优化操作系统:根据实际需求,对操作系统进行细致的配置和优化,保证系统的性能和稳定性。 9. 发布和更新操作系统:在进行充分测试和验证之后,将操作系统发布到用户,并及时修复和升级系统中的漏洞和问题。 总之,使用 Linux 内核写一个操作系统是一项复杂的任务,需要掌握操作系统和编程技术的知识,并进行详细的计划和设计。同时,要耐心和细心进行开发、测试和调试工作,确保最终的操作系统具备所需的功能和稳定性。 ### 回答3: 使用Linux内核编写一个操作系统是一个庞大的工程,需要深入了解Linux内核的结构和原理,以及操作系统的设计和实现。 首先,我们需要从Linux内核的源代码开始,这可以从Linux官方网站或其他途径获取。然后,我们需要对内核进行分析和理解,包括内核的启动过程、内核空间和用户空间的切换、设备驱动、进程管理等。 接下来,我们可以根据需求对内核进行定制,可以添加或删除某些功能,设计和实现自己的系统调用,以及其他相关的内核模块。这需要深入了解Linux内核的API和接口,如系统调用接口、文件系统接口等。 然后,我们需要编写启动引导程序,将我们的操作系统加载到内存中并启动。 在编写操作系统的过程中,需要注意保护内核的安全性和稳定性,处理各种异常和中断,管理和调度进程,实现进程间通信和同步,支持多线程和多CPU,设计并实现内存管理、文件系统、网络协议栈等核心功能。 此外,对于更高级的功能,如图形界面、设备驱动程序、网络系统等,我们需要进一步的学习和研究。 总之,使用Linux内核编写一个操作系统是一个充满挑战的任务,需要对底层的硬件、操作系统原理和编程技术有深入的了解。通过不断的学习和实践,我们可以逐步掌握这个技能,创建出符合我们需求的定制化操作系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值