安卓手机玩转linux,玩转linux之启动篇

想要玩转linux,首先明白其启动流程,这里简单说明一下:

CentOS 6启动流程:

POST --> Boot Sequence(BIOS) --> Boot Loader --> Kernel(ramdisk) --> rootfs--> switchroot--> /sbin/init-->(/etc/inittab, /etc/init/*.conf) --> 设定默认运行级别--> 系统初始化脚本rc.sysinit--> 关闭或启动对应级别的服务--> 启动终端

Boot Loader:

bootloader是系统的启动加载器。通常情况下,引导程序都安装在bootloader中。以我们常见的grup为例,grub分为stage1,stage1.5,stage2。其中stage1的代码是直接存放在mbr中的。当BIOS将控制权传递给MBR后,stage1的代码就开始运行,它主要负责将stage1.5或者stage2的内容加载在内存中。stage2被加载到内存中后,就会读取grub的配置文件grub.conf。

想要玩转,我们就要先玩破坏,然后再修复,才可以。

首先stage1阶段:

stage1的代码是直接存放在mbr中的,

MBR引导扇区共512bytes,其中:

主引导程序(boot loader):446bytes, 可以安装引导加载程序

主分区表(partition table):64bytes,记录整块硬盘分区的状态(16bytes: 标识一个分区)

结束标识: 2 bytes, 55AA ,MBR区域的有效性标识;55AA为有效

我们可以使用命令来查看一下MBR的内容:[root@CentOS-6 ~]# hexdump -C -n 512 /dev/sda

然后我们要破坏stage1,主要是破坏MBR中前446个字节,可以使用命令[root@CentOS-6 ~]# dd if=/dev/zero of=/dev/sda bs=446 count=1

FniYfvKThZw1AQXKHdG97R-nbLPK

这样MBR前446个字节就全为0了,这时bootloader就已经被破坏,下面来重启试试看:)

重启系统后,stage1阶段没有正常启动,直接跳至光盘引导。。。

Fpq0F2M_gRMio-3hPXgHM6ZUMzFv

下面我们就要进入救援模式,来进行修复:

FtVcN0_TulSl12j_yp5Wta2WWW0t

之后会有一些语言和键盘及网卡的选项,根据需要自主选择,再之后会出现Rescue选择界面,我们选择Continue继续。

Fqboauu4APzMsuGij9ACXVcb2Lwq

再之后会有一些提示信息,ok继续,直至出现下图界面,我们选择start shell,ok继续

FnIn--d3TYxEftR_VK0maIR4WQuR

这样我们就会进入一些救援模式的shell,现在我们所在的位置,并不是我们系统的根,而是当前救援shell的根,所以我们首先要切换根目录,使用“chroot”命令:

Fub5RAO8nIK49ws3beFPvYfHxUrb修复完成后,退出shell,选择reboot重启系统

FgarktZiGRV_Ia2p-Fjz9lyJMSha

FreQrYFh3xulgpm09oF3fqxHX654

在系统重启后,系统会修复,需要等待一段时间,切勿强制退出

FjhT0Eq_-87XkfsxCG51NQ1c2EjY

OK,这样stage1的破坏与修复我们就学会了,是不是很简单,下面我们将stage1.5给破坏了,看看怎么修复。stage1.5是为stage2提供驱动的(在0柱面1扇区后面的63个扇区中存储)

首先我们看看stage1.5的位置[root@localhost6 ~]# hexdump -C -n 1024 /dev/sda

FlOnuREg0EyxcPixR7u4dVew8zXZ

我们摧毁stage1.5,而不摧毁stage1就需要跳过前512个字节[root@localhost6 ~]# dd if=/dev/zero of=/dev/sda bs=512 count=2 seek=1

然后重启来试试看:

显示结果就是:黑屏。。。

这是因为stage1是正常的,他认为系统是存在的,但是到1.5阶段,找不到驱动,所以就卡在那里了。

所以我们修复的话还是需要进入的救援模式下,进行修复,步骤和修复stage1是完全一样的,这是因为

安装grub命令:

(1) grub-install

安装grub stage1和stage1_5到/dev/DISK磁盘上,并复制GRUB相关文件到DIR/boot目录下

命令格式:grub-install --root-directory=DIR /dev/DISK

注:这里的"--root-directory=DIR"是指定/boot目录的父目录,因为grub-install还可以复制GRUB相关文件到DIR/boot目录下。如果/boot的父目录为根目录,则可以省略。

(2) grub    交互式修复

grub> root (hd#,#)

grub> setup (hd#)

注:这条命令,依赖于“/boot/grub”目录下的文件,如果文件丢失,请使用第一种方法。

因为“grub-install”命令不仅能修复stage1 还可以修复stage1.5,所以1.5的修复步骤和1的完全一样,但这里我们就来使用第二种方法来修复一下1.5阶段,(进入救援模式的步骤参考前文)

FpdICWqtSd7lBhqBwiO25dBCA8QVreboot重启!

完工,还是这么简单。。。:)

修复就是这么简单,下面我们来玩一个稍微复杂一点的,将stage1,stage1.5,stage2及/boot/grub目录全部破坏,然后来修复。

FvuMJazTdxFb6DaML4ML0ifxoWjs

进入救援模式:然后执行以下操作:

Fhod3yi68k2EAMUHjDZDCXVpETFzFkoCJfGOOBd6Yu15ehoLbvz-uC--

然后保存退出,重启系统即可。

再接再励越玩越大

实验:删除/boot 和/etc/fstab,恢复之

Ftn9ZzCw35rMBbT7giVI_0iX8Mdw

进入救援模式,首先解决挂载问题,然后重启让系统重新读取fstab文件,重新挂载

FoF4flv-mgW5GHGIniITQcHj92ck

Ft280yetdso4obHrn83FLdAFA-20

Ft5blUfQg6Sq-fJP_jkpIuH3xq8Y

reboot 重启,让系统重新挂载,重新进入救援模式:

Fo_HiOFRohmBwLLbrkJmlplSNGeJ

FkoCJfGOOBd6Yu15ehoLbvz-uC--

重启系统,系统需要修复文件,需要稍等片刻。。。

进入系统后,即可重新更改/etc/fstab/ 重新设置系统挂载条件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值