zoukankan      html  css  js  c++  java
  • 硬盘分区和系统启动

    一.分区
    1.1安装Linux在分区时,最好有以下三个分区
    /boot:分区时一般将磁盘最前面的100-200M分出来做/boot分区,该目录用于存放内核kernel和boot loader,boot loader即系统启动程序Grub
    根分区/:这个就不说了,这是必须有的
    Swap:在windows中叫虚拟内存

    1.2在企业中一般将/tmp和/var/log也单独分出来
    /tmp用于存储宕机时的文件,单独分区,防止多次宕机时将根分区占满
    /var/log用于存储日志,单独分区作用同上(但Linux一般会在凌晨4点定期清除日志)

    二.关于硬盘和操作系统启动
    2.1 MBR,DPR和PBR
    在硬盘的第一个扇区(每个扇区是512字节),也就是0磁头(head)、0柱面(cyliner)、0扇面(side)、0磁道(track)、0扇区(sector)处,存放着硬盘最重要的信息MBR(Master Boot Record,主引导记录)和DPT(磁盘分区表)
    其中MBR占446字节,DPT占64字节,剩余2字节存的是55AA(结束标志);每一个分区需要16字节存放其信息,所以最多可以分出64/16=4个主分区。
    MBR (Master Boot Record)即硬盘的主引导记录。MBR,共446字节,一般在操作系统安装时写入,但它并不属于操作系统。MBR就是一段引导程序,用于检测磁盘的分区合法性和加载操作系统,它的重要作用就是识别活动分区,并引导操作系统。
    DPT ,即磁盘分区表,共64字节,记录了硬盘有多少分区以及分区的各种属性。由于一个分区的信息要占用16字节,所以分区表只能定义64/16=4个分区,这就是为什么我们说硬盘一般最多只能分为 4个主分区
    PS:如果是MBR和DPT部分出了问题,即使只是”55AA”标志字丢失或被改为其他值,通常都会出现”无效分区表”、逻辑盘丢失、启动死机等现象
    PBR: (Partition Boot Record) 即硬盘的分区引导记录, PBR是各个分区自己的引导记录,又称分区引导记录,它是由FORMAT高级格式化命令写在各个分区开始处第一个扇区。
    PS:如果PBR部分出了问题,通常会出现”未格式化的分区”的错误提示,显然如果该分区装有操作系统,该分区的操作系统也无法启动。

    2.2 主分区,拓展分区和逻辑分区
    主分区:正如前面所讲, 主分区是由主引导扇区中64字节的磁盘分区表所定义的,最多只能有4个。
    拓展分区:为了满足更多分区的需求,便产生了 扩展分区 。形式上,如果拥有扩展分区,就必须牺牲一个主分区,而且最多有一个扩展分区,也就是说: 主分区+扩展分区<=4 and 扩展分区<=1 。因此扩展分区也可以看成一种特殊的主分区。
    逻辑分区:但扩展分区并不可以直接使用,扩展分区又必须以逻辑分区的形式出现,可以这样认为:扩展分区包含着若干逻辑分区,而且至少包含一个。

    扩展分区中的逻辑分区是以链式存在的。即每一个逻辑分区都记录着下一个逻辑分区的位置信息,依次串联。事实上每一个逻辑分区都有一个和主引导扇区类似的引导扇区,引导扇区里有类似的分区表。该分区表记录了该分区的信息和一个指针,指向下一个逻辑分区的引导扇区。
    因此,逻辑分区是借鉴了主分区的方法,相当于在一个主分区下面建立了若干级“主分区”。另一个可以预测的现象是:一旦某一个逻辑分区损害,跟在它后面的所有逻辑分区都将丢失,而前面的逻辑分区去可以保留。这也是链式结果的特点。

    2.3 活动分区,系统分区,启动分区和引导分区
    之前的主分区,拓展分区和逻辑分区时物理概念,现在讲的这几个是逻辑概念。
    首先,引导分区就是启动分区 ,两者是同一概念
    启动分区:包含操作系统内核文件的分区
    系统分区:包含操作系统引导文件的分区
    活动分区:我们结合双系统来讲,启动分区被标记为活动分区后,该活动分区的操作系统内核才会被加载,启动操作系统。也就是说,加入我们安装了多个操作系统,就存在多个启动分区,我们开机时选择的那个操作系统对应的启动分区会被标记为活动分区。
    PS:根据windows的概念,活动分区必须是主分区,即操作系统必须安装在主分区,其实不必,在系统启动中我们会讲。

    2.4 操作系统的启动
    拿Linux来说启动过程是这样的:加点—–>BIOS自检——>执行引导加载器程序——>加载内核——>执行init进程——>登录Linux系统
    执行引导加载程序即执行Boot Loader,这一步可以细分为BIOS->MBR -> DPT -> PBR,为什么还有BIOS呢:因为其实BIOS也是引导加载程序,BIOS负责检测硬件,如果未发现问题,则将硬件设施设置为备用状态,而MBR负责加载操作系统内核。
    每种不同体系结构的CPU都有不同的Boot Loader:
    X86架构的CPU自带BIOS,我们在其上装系统很简单可以选择从硬盘启动还是USB启动,因为BIOS实现了这些功能。
    而在嵌入式开发还有Android等系统中是不存在BIOS的,BOIS和MBR是作为Boot Loader这样的一个整体存在的

    不管是BIOS和MBR分开的还是一体的,Boot Loader的实质都是相同的,是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

    每种操作系统都有自己的Boot Loader,其会在系统安装时写入MBR,而且当你安装第二个操作系统时,新的MBR会覆盖原来的MBR。
    最初Linux的Boot Loader是LiLo(Linux Loader),现在在linux中 GRUB(GRand Unified Bootloader)是一个系统默认自带的多重启动管理器。它可以在多个操作系统共存时选择引导哪个系统。尽管引导操作系统看上去是件平凡且琐碎的任务,但它实际上很重要。如果引导装入器不能很好地完成工作或者不具有弹性,那么就可能锁住系统或者无法引导计算机
    其他常见系统的Boot Loader:
    NTLDR(XP)、bootmgr(WIN7、Vista)、grldr(Grub)、btldr.mbr(BootLink)

    那么系统是怎么引导内核启动的呢,下面分三种情况讲一下:
    ①如果只有一个系统安装在主分区,启动时BIOS找到MBR中的引导程序,通过DPT找到各个主分区,如果该分区中有操作系统kernel,MBR会找该分区下的PBR,读取后,加载系统的启动文件,比如Ntldr,然后就是一系列的系统启动的顺序了。
    (PS:boot loader可以嵌套,一层一层引导,如我们在刷机时就用到,只是大家没注意过)
    ②安装了多个操作系统Windows和Linux,且都在主分区下,如下图1,那么开机时BIOS加载MBR中的Boot Loader,MBR检测到有两个时则会让用户选择,被选择的分区被标记为活动分区,MBR加载活动分区的PBR,读取后,加载系统的启动文件
    图1
    图1
    ③如果安装了多个操作系统,且其中有一个在逻辑分区如图2,须在活动分区的启动支持文件里加上对这个逻辑分区里CentOS的引导信息。具体到XP,就是boot.ini文件添加上对双系统的引导,而这个boot,ini文件必须在启动分区。
    图2
    图2

    PS:同时安装Linux和Windows时应先安装Windows,因为后来的MBR会覆盖之前的MBR。而linux的启动引导程序会正确识别windows的并接管,Windows的主引导却只识别Windows系统
    三. Linux系统的7种运行级别
    3.1Linux系统有7个运行级别(runlevel)
    运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
    运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
    运行级别2:多用户状态(没有NFS)
    运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
    运行级别4:系统未使用,保留
    运行级别5:X11控制台,登陆后进入图形GUI模式
    运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

    3.2运行级别的原理
    ①在目录/etc/rc.d/init.d下有许多服务器脚本程序,一般称为服务(service)
    ②在/etc/rc.d下有7个名为rcN.d的目录,对应系统的7个运行级别
    ③rcN.d目录下都是一些符号链接文件,这些链接文件都指向init.d目录下的service脚本文件,命名规则为K+nn+服务名或S+nn+服务名,其中nn为两位数字。
    ④系统会根据指定的运行级别进入对应的rcN.d目录,并按照文件名顺序检索目录下的链接文件
    对于以K开头的文件,系统将终止对应的服务
    对于以S开头的文件,系统将启动对应的服务
    ⑤查看运行级别用:runlevel
    ⑥进入其它运行级别用:init N
    ⑦另外init0为关机,init 6为重启系统

    3.3 修改默认运行级别
    用文本编辑器修改 /etc/inittab,其中id:5:initdefault行中id后对应的数字即为默认运行级别。保存后就reboot重起,即更改为你改的运行级别。

  • 相关阅读:
    实验 3:Mininet 实验——测量路径的损耗率
    福州大学软件工程实践个人编程作业
    实验 2:Mininet 实验——拓扑的命令脚本生成
    初识MinIO
    基础《Go学习笔记》读书笔记——函数
    Linux配置Golang 依赖包安装
    《Linux shell 脚本攻略》第1章——读书笔记
    vscode连接云服务,搭建Python远程开发
    Python多线程
    Python多进程
  • 原文地址:https://www.cnblogs.com/zandon/p/11923619.html
Copyright © 2011-2022 走看看