《鸟哥的Linux私房菜》chapter3 20190118

2024-05-30 05:32

本文主要是介绍《鸟哥的Linux私房菜》chapter3 20190118,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 主机规划与磁盘分区
        • 各硬件装置在linux中的文件名
        • 磁盘连接方式和文件名的关系
        • 磁盘的组成
        • 磁盘分区表
      • 开机流程和MBR

主机规划与磁盘分区

各硬件装置在linux中的文件名
硬件装置文件名
IDE接口硬盘/dev/hd[a-d]
SCSI/SATA/USB接口硬盘/dev/sd[a-p]
软盘/dev/fd[0-1]
打印机25针:/dev/lp[0-2]
USB:/dev/usb/lp[0-15]
鼠标USB:/dev/usb/mouse[0-15]
PS2:/dev/psaux
当前DVDROM/CDROM/dev/cdrom
当前鼠标/dev/mouse
磁带IDE:/dev/ht0
SCSI:/dev/st0
磁盘连接方式和文件名的关系

拿IDE接口装置来举例,一根IDE电缆可以连接2个IDE接口磁盘,其中一个为master,另一个为slave。而通常主机上有2个IDE接口,可以连接2条IDE电缆,所以一个主机一般可以连接4个磁盘,其中2个master磁盘,2个slave磁盘。此时磁盘和文件名的关系如下表

IDE(jump)masterslave
IDE1(primary)/dev/hda/dev/hdb
IDE2(secondary)/dev/hdc/dev/hdd

那么假设我有一台主机,一个磁盘连接在第二个IDE接口的master上,该磁盘设备在linux中对应的文件名就应该是/dev/hdc
而SATA接口磁盘在linux中的命名是以被系统侦测到的顺序来命名的。
假如我有2个SATA接口磁盘,1个USB接口磁盘,分别插在主机的SATA1,SATA5和USB插槽中,那么这三个磁盘的文件名应该是:
SATA1插槽上的磁盘:/dev/sda
SATA5插槽上的磁盘:/dev/sdb
USB(开机完成后才被系统侦测到):/dev/sdc

磁盘的组成

磁盘的组成如图所示
在这里插入图片描述
磁盘由磁盘盘碟,主轴马达,机械手臂,磁头组成。磁盘盘碟上有无数个扇区和磁柱。每个扇区为512bytes。磁柱是磁盘的最小组成单位。
一个磁盘的第一个扇区最重要。第一扇区中存储了MBR和分割表

  • MBR(Master boot record):存储开机管理程序的地方,446bytes
  • 分割表(partation table):存储磁盘的分区信息,64bytes

疑问:第一扇区中剩下的2bytes去哪了

开机时,系统会主动去读取MBR中的内容,以确定如何开机

注意:MBR中存储的是开机管理程序,并不是操作系统,而是操作系统启动前的引导程序

磁盘分区表

磁盘为什么要分区?
数据安全性:分区之后,当我们需要重整某个分区时,只需要将该分区的数据转移到其他分区,不会发生数据丢失的情况
操作数据效率高
数据存储在特定分区中,系统查找该数据时,就会在该分区的开始磁柱和结束磁柱之间找,大大缩减了查找的范围,提高效率
磁盘分区表在磁盘的第一扇区中,只占有64bytes的容量,对磁盘分区的过程,其实就是在磁盘分区表中设置一下。
开始磁柱和结束磁柱是文件系统的最小单位,也是分区槽的最小单位。磁盘分区表分成4组记录区,每组记录区记录了该区段开始磁柱和结束磁柱号码,作为一个分区。如图所示
在这里插入图片描述
如果该磁盘装置文件名为/dev/sda,那么磁盘上的4个分区文件名应该为
/dev/sda1
/dev/sda2
/dev/sda3
/dev/sda4
我们在磁盘文件名后加上数字来表示该磁盘上的第几分区。假如该磁盘的第一分区起始磁柱为1-100,那么写入第一分区的数据将会被记录在磁盘磁柱号码为1-100的磁柱之间。
分区表只能记录4笔分区记录,分区可以是主分区(primary partition),也可以是扩展分区(extended partition)。扩展分区指向其他扇区,可以使系统读取到存储在其他扇区的分区信息(换句话说扩展分区就像一个指针,有了扩展分区,我们就可以在额外的扇区存储分区信息)。

  • 主分区+扩展分区的数量不能超过4个。
  • 扩展分区最多只能有1个。
  • 扩展分区无法被格式化。
  • 逻辑分区是在扩展分区内进行分区的。
  • 所有逻辑分区容量之和应小于等于扩展分区容量,但逻辑分区的数量不受限制。

在linux系统中,逻辑分区的设备文件号从5开始,IDE硬盘最多有59个逻辑分区(hda5~hda63),SATA硬盘最多有11个逻辑分区(sda5~sda15)
逻辑分区和逻辑分区可以互相整合,但逻辑分区和主分区不能互相整合。

开机流程和MBR

补充说明:
1.BIOS,这里的BIOS不是主板的意思,而是一个嵌入到主板的软件程序,被称为韧体
2.CMOS,记录各项硬件参数且嵌入在主板上的存储器
(这里我有疑问:CMOS如何知道主机的硬件参数,如果是组装机呢)

BIOS是开机时系统会去主动执行的第一个程序,开机时,BIOS会去分析主机的存储设备,然后根据用户的设定去访问能开机的那个硬盘,读取该硬盘第一个扇区的MBR。MBR中存储了基本的开机管理程序,该程序会去硬盘内寻找操作系统的核心档案,找到核心档案后,核心档案开始运行,操作系统启动。

这里要注意两个概念
MBR:用来放置开机管理程序(boot loader)的区块
开机管理程序(boot loader):寻找核心档案的程序

开机管理程序(boot loader)主要有以下功能

  • 提供选单:用户可以选择不同的开机项目(这是多重引导的功能)
  • 载入核心档案:载入操作系统的核心档案,启动系统
  • 转交给其他开机管理程序:将开机管理功能转交给其他开机管理程序负责

一个系统中可以有多个开机管理程序,开机管理程序不一定要放在第一扇区的MBR中,也可以安装在每个分区的启动扇区。
每个分区都有自己的启动扇区。假如第一第二分区分别安装了Windows和linux系统,而MBR中安装的开机管理程序两个操作系统都能识别,那么开机的时候系统是怎样一个运行流程呢?
解:MBR位于磁盘的第一个扇区,当我们开机的时候,MBR内的开机管理程序运行,直接访问位于第一分区的Windows操作系统核心档案,同时访问位于第二分区的启动扇区,而第二分区的启动扇区可以直接访问第二分区的Linux系统
如图所示
在这里插入图片描述
MBR提供两个选单
选项一:加载Windows系统核心档案
选项二:将开机管理程序移交给第二分区的启动扇区
注意以下几点:

  • 每个分区都有自己的启动扇区
  • 系统核心档案是放置在分区内的
  • 每个开机管理程序只能认识自己分区内的核心档案和其他开机管理程序
  • 开机管理程序可以直接指向或间接把管理权移交给另一个开机管理程序

question:如果要安装多重引导,最好先装windows,再装linux,为什么?
Linux在安装的时候,可以选择将开机管理程序安装在MBR或者分区的第一扇区,我们可以手动设置开机选单,在linux的开机管理程序中加入Windows开机的选项。
Windows在安装的时候,会主动覆盖掉MBR和自己分区的启动扇区,我们没有选择的机会,而且它没有给我们自己选单的功能。
文件系统和目录树的挂载关系
文件系统是挂载在目录树下的。什么是挂载?我们把磁盘分区设备,比如说/dev/sda1挂载在/home目录下,也就是说进入/home目录就可以读取到磁盘/dev/sda1这个分区的内容了。而我们在/home目录下存储的所有档案,其数据都被存储在/dev/sda1这个分区内,在磁盘中位于该分区开始磁柱和结束磁柱之间。
如何看档案A在哪个分区中
假如A的完整档案名为/home/huyan/test/A,/目录下挂在了磁盘的第一分区/dev/sda1,/home目录下挂在了磁盘的第三分区/dev/sda3,我们使用反向追踪法,最接近A的挂在点是/home,而不是/,所以档案A是被存储在磁盘的第三分区中的。
主机的服务规划与硬件的关系
工作中可能会需要同时用到Windows系统和Linux系统,因此我们需要在一台主机上安装两个操作系统,这样就会用到之前提到的开机流程和多重引导了。

这篇关于《鸟哥的Linux私房菜》chapter3 20190118的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1015699

相关文章

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配

linux系统中java的cacerts的优先级详解

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式... 目录Java 默认使用哪个?如何检查当前使用的信任库?简要了解Java的信任库总结了解 Java 信

Linux命令rm如何删除名字以“-”开头的文件

《Linux命令rm如何删除名字以“-”开头的文件》Linux中,命令的解析机制非常灵活,它会根据命令的开头字符来判断是否需要执行命令选项,对于文件操作命令(如rm、ls等),系统默认会将命令开头的某... 目录先搞懂:为啥“-”开头的文件删不掉?两种超简单的删除方法(小白也能学会)方法1:用“--”分隔命

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4