当前位置: 首页 > news >正文

Linux基础(二):磁盘分区

1.磁盘在Linux中的文件名

SATA接口的磁盘在Linux中名字为/dev/sdx。/dev 几乎是所有外接设备存放的文件夹:
在这里插入图片描述
磁盘在Linux中的文件名是不确定的,比如拿一个U盘插到Linux主机,可能第一次名字为sda,拔插后名字为sdc,这取决于Linux主机识别到磁盘的顺序。

2.分区表

磁盘需要进行分区(就像window里的CDF区),而存放分区信息就有2种格式——MBR和GPT。

2.1 Master Boot Record(MBR)

在这里插入图片描述
在这里插入图片描述
开机管理程序和分区表放在磁盘的第一个扇区(通常为512Byte):446Byte的开机管理程序和64Byte的分区表。
将一个个的柱面在水平方面上铺开,形成下面这张图:
在这里插入图片描述
如上图所示的分区表,则Linux系统的分区为sda1、sda2、sda3、sda4。
在这里插入图片描述
当然也可以不止分四个区:像下图这样的做法
在这里插入图片描述
P1为主分区,P2为延伸分区,L1~L5则为延伸分区切出来的逻辑分区。磁盘的文件名变为了:
在这里插入图片描述
上面是没有sda3和sda4的,因为1~4是给主分区标识用的。
在这里插入图片描述
由于MBR分区每个分区只有16Byte,它能记录的起始和结束位置的大小是有限的,无法处理2.2T以上的磁盘,所以才有下面的GPT格式。

2.2 GUID Partiton Table(GPT)

GPT用逻辑区块地址(LBA)来划分。从0开始编号,如LBA0。GPT 使用了 34 个 LBA 区块来纪录分区信息! 同时与过去 MBR 仅有一的区块, 被干掉就死光光的情况不同, GPT 除了前面 34 个LBA 之外, 整个磁盘的最后 33 个 LBA 也拿来作为另一个备份!一个LBA默认是512Byte。
在这里插入图片描述
(1)LBA0
与 MBR 模式相似的, 这个相容区块也分为两个部份, 一个就是跟之前 446 Bytes 相似的区块, 储存了第一阶段的开机管理程序! 而在原本的分区表的纪录区内, 这个相容模式仅放入一个特殊标志的分区, 用来表示此磁盘为 GPT 格式之意。
(2)LBA1
这个部份纪录了分区表本身的位置与大小, 同时纪录了备份用的 GPT 分区 ( 就是前面谈到的在最后 34 个 LBA 区块) 放置的位置, 同时放置了分区表的检验机制码( CRC32) , 操作系统可以根据这个检验码来判断 GPT 是否正确。
(3)LBA2~33
每个LBA可以记录4个分区,所以总共可以有4*32=128个分区。
(4)LBA34
存储数据的地方
(5)LBA-1~-34
分区数据备份

3.区分磁盘是MBR还是GPT

按“Windows + R”键,在弹出的运行对话框中输入“diskpart”,并按回车键启动diskpart实用程序。
输入“list disk”命令,然后按回车,查看磁盘信息。
在这里插入图片描述
带有一个星号(*)的为GPT磁盘类型。没有星号(*)的为MBR磁盘类型。
一般电脑硬盘都是GPT,U盘有的是MBR,有的是GPT。
fdisk 这个老牌的软件并不认识 GPT 喔! 要使用 GPT 的话, 得要操作类似 gdisk 或者是 parted 指令才行!开机管理程序方面, grub 第一版并不认识 GPT 喔! 得要 grub2 以后才会认识的! 是否能够读写 GPT 格式又与开机的检测程序有关!

4.开机检测程序

开机检测程序有BIOS和UEFI。以BIOS为例,开机检测程序是写入到主板上的一个固件,开机的时候就会自动执行,其作用是分析计算机有哪些存储设备,取得能够开机的硬盘,并且到该硬盘里面去读取第一个扇区的MBR位置/LBA0。446 Bytes的硬盘容量里面会放置最基本的开机管理程序(Boot loader), 此时BIOS就功成圆满, 而接下来就是开机管理程序的工作了。开机管理程序的目的是载入核心文件, 由于开机管理程序是操作系统在安装的时候所提供的, 所以他会认识硬盘内的文件系统格式, 因此就能够读取核心文件, 然后接下来就是核心文件的工作, 开机管理程序与 BIOS 也功成圆满, 将之后的工作就交给大家所知道的操作系统啦!
在这里插入图片描述
(1)BIOS
BIOS则是一个写入到主板上的一个固件,这个BIOS就是在开机的时候, 计算机系统会主动执行的第一个程序了。
对于GPT磁盘来说,由于 LBA0 仅提供第一阶段的开机管理程序码, 因此如果你使用类似 grub 的开机管理程序的话, 那么就得要额外分区出一个“ BIOS boot ”的分区, 这个分区才能够放置其他开机过程所需的程序码! 在 CentOS 当中, 这个分区通常占用 2MB 左右而已。
(2)UEFI
BIOS 其实不懂 GPT , 还得要通过 GPT 提供相容模式才能够读写GPT磁盘,而且 BIOS 仅为 16 位的程序, 在与现阶段新的操作系统接轨方面有点弱掉了! 为了解决这个问题, 因此就有了 UEFI ( Unified Extensible Firmware Interface) 这个统一可延伸固件界面的产生。
与 BIOS 模式相比, 虽然 UEFI 可以直接取得 GPT 的分区表, 不过最好依旧拥有BIOS boot 的分区支持, 同时, 为了与 windows 相容, 并且提供其他第三方厂商所使用的UEFI 应用程序储存的空间, 你必须要格式化一个 vfat 的文件系统, 大约提供 512MB 到 1G左右的容量, 以让其他 UEFI 执行较为方便。
在这里插入图片描述

5.开机管理程序(Boot loader)

Boot loader的功能包括:
①提供菜单: 使用者可以选择不同的开机项目, 这也是多重开机的重要功能;
②载入核心文件: 直接指向可开机的程序区段来开始操作系统;
③转交其他loader: 将开机管理功能转交给其他loader负责。
第三点是为一个磁盘上的多系统设计的:
在这里插入图片描述
在上图中我们可以发现, MBR的开机管理程序提供两个菜单, 菜单一( M1) 可以直接载入Windows的核心文件来开机; 菜单二( M2) 则是将开机管理工作交给第二个分区的开机扇区( boot sector) 。 当使用者在开机的时候选择菜单二时, 那么整个开机管理工作就会交给第二分区的开机管理程序了。 当第二个开机管理程序启动后, 该开机管理程序内( 上图中) 仅有一个开机菜单, 因此就能够使用Linux的核心文件来开机啰。 这就是多重开机的工作情况啦! loader只会认识自己的系统盘内的可开机核心文件, 以及其他loader而已。

6.挂载

Linux系统为树结构,所谓的“挂载”就是利用一个目录当成进入点, 将磁盘分区的数据放置在该目录下; 也就是说, 进入该目录就可以读取该分区的意思。 这个动作我们称为“挂载”, 那个进入点的目录我们称为“挂载点”。 由于整个Linux系统最重要的是根目录, 因此根目录一定需要挂载到某个分区的。 至于其他的目录则可依使用者自己的需求来给予挂载到不同的分区。
在这里插入图片描述

相关文章:

  • Rust调用tree-sitter支持自定义语言解析
  • 等保2.0数据库测评之达梦数据库测评
  • 启动hadoop集群出现there is no HDFS_NAMENODE_USER defined.Aborting operation
  • go 使用笔记
  • Java面试题·解释题·Vue框架
  • 学Java还是c++好?
  • Python:import语句的使用(详细解析)(一)
  • C语言 | Leetcode C语言题解之第448题找到所有数组中消失的数字
  • excel不经过后台实现解析和预览(vue)
  • Docker Compose 搭建 nacos 集群
  • react-问卷星项目(3)
  • 多普勒频移
  • MVC core 、MVC framework addTagHelper、htmlhelper 、Environment
  • 1、深入理解Redis线程模型
  • leetcode-链表篇3
  • AngularJS指令开发(1)——参数详解
  • export和import的用法总结
  • fetch 从初识到应用
  • passportjs 源码分析
  • Python语法速览与机器学习开发环境搭建
  • Service Worker
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Vue UI框架库开发介绍
  • vue.js框架原理浅析
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 关于使用markdown的方法(引自CSDN教程)
  • 基于web的全景—— Pannellum小试
  • 今年的LC3大会没了?
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 如何进阶一名有竞争力的程序员?
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 小李飞刀:SQL题目刷起来!
  • 主流的CSS水平和垂直居中技术大全
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • 容器镜像
  • # Redis 入门到精通(九)-- 主从复制(1)
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (回溯) LeetCode 40. 组合总和II
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)Sql Server 保留几位小数的两种做法
  • .Net Core 中间件与过滤器
  • .NET 读取 JSON格式的数据
  • .net 中viewstate的原理和使用
  • .NET中 MVC 工厂模式浅析
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @AliasFor注解
  • @Transactional 参数详解
  • @取消转义
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [C# 网络编程系列]专题六:UDP编程