少年击剑更吹箫,剑气箫心一例消。这篇文章主要讲述升级grub 第一分区遇到的问题相关的知识,希望能为你提供帮助。
问题:当前系统盘第一分区只有60M, 升级新系统后感觉第一分区有点小,所以在升级新系统的时候也必须修改第一分区的大小。
【升级grub 第一分区遇到的问题】目前已经有制作好的镜像文件!这个文件第一分区是120M 足够了!
先看一下概念:MBR GRUB的概念
MBR是硬盘上的一个扇区,包含三部分内容(引导程序、分区表及分隔标识,MBR总计512字节;其中引导程序最多占446个字节);为什么需要这个MBR,主要是因为Bios太小,功能有限。当系统加电,bios自检后,就会将MBR Load进内存。也就意味着引导程序被激活,分区表信息已经加载到内存,同时也意味着对系统的控制权从bios过渡到GRUB.GRUB是GRand Unified Bootloader的缩写,它是一个多重操作系统启动管理器。用来引导不同系统。
GRUB是一个系统引导程序,分为两个阶段,
第一阶段它保存在MBR中.用汇编语言编写,也就是MBR中的引导程序部分。①基本的硬件设备初始化(屏蔽所有的中断、关闭处理器内部指令/数据cache 等)。②为加载 Bootloader 的Stage2 准备空间。③如果是从某个固态存储媒质中,则拷贝 Bootloader 的stage2 到RAM 空间中。④设置好堆栈。⑤跳转到 stage2 的C 程序入口点。
GRUB引导程序的第二阶段,通常用C语言编写,这个阶段的任务有: ①初始化本阶段要使用到的硬件设备。②检测系统内存映射。③将kernel 映像和根文件系统映像从flash 上读到RAM 空间中。④为内核设置启动参数⑤调用内核。
它通常保存在/boot/grub/中。 当我们启动系统进入GRUB界面时,会看到有选择信息,如果我们自己编译了系统内核的话,你可以选择从某个内核启动。同时要注意的是GRUB的配置文件和内核在/boot分区。从前面分析我们可以看出,/BOOT和MBR不存在包含关系。
GRUB第一阶段需要去MBR中去读引导程序,GRUB第二阶段需要到/boot分区读系统内核和配置文件。
mbr中存放了启动程序和该磁盘的分区表,分区表一共描述了4个分区,其中一个分区为可启动分区,mbr中的启动程序的任务就是在分区表中找到这个启动分区,然后将执行权力交给启动分区的引导程序
启动第一步--加载BIOS
当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。
启动第二步--读取MBR
众所周知,硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,别看地方不大,可里面却存放了预启动信息、分区表信息。
系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0×7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。
启动第三步--Boot Loader
Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。
Boot Loader有若干种,其中Grub、Lilo和spfdisk是常见的Loader。
我们以Grub为例来讲解吧,毕竟用lilo和spfdisk的人并不多。
系统读取内存中的grub配置信息(一般为menu.lst或grub.lst),并依照此配置信息来启动不同的操作系统。
启动第四步--加载内核
根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。
系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。
启动第五步--用户层init依据inittab文件来设定运行等级
内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。
其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。Linux的运行等级设定如下:
0:关机
1:单用户模式
2:无网络支持的多用户模式
3:有网络支持的多用户模式
4:保留,未使用
5:有网络支持有X-Window支持的多用户模式
6:重新引导系统,即重启
所以目前:需要一个镜像 这个镜像文件以及对磁盘第一分区进行了划分,同时grub等已经设置好
目前已经有现成的镜像文件,file了一下查看了相关信息
file xxxx13.img
xxxxxx13.img: DOS/MBR boot sector; GRand Unified Bootloader, stage1 version 0x3, stage2 address 0x2000, stage2 segment 0x200
此时只需要dd 到系统盘就行
dd if=/xx.imgof=/dev/sdabs=50M
为了检测这个dd 过程是不是正常的,也就是文件是否成功写入磁盘
将文件mount后 进入发现文件有问题!!
同时使用 kpartx 挂载虚拟文件,查看文件正常,对比文件MD5值也是一样的,此时就有点。。。。。
目前看是:之前内核加载的是老的磁盘分区信息,现在新的img写入了磁盘,分区都改变了,所以此时需要执行 partprobe 重读分区表,将磁盘分区表变化信息通知内核
http代理服务器(3-4-7层代理)-网络事件库公共组件、内核kernel驱动 摄像头驱动 tcpip网络协议栈、netfilter、bridge 好像看过!!!! 但行好事 莫问前程 --身高体重180的胖子
推荐阅读
- 那些只有几行,但是却非常牛逼的代码!
- docker 基础入门
- crontab自动定时执行
- Windows Server 2022 FTP服务搭建注意如下几点
- 关于SSL证书的学习与总结
- 笔记法F2键不能重命名
- 使用 Gorilla Mux 和 CockroachDB 编写可维护 RESTful API
- 统一化
- FTXUI编译和使用(不含ROS1/2)Linux手机或平板版本