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系统最重要的是根目录, 因此根目录一定需要挂载到某个分区的。 至于其他的目录则可依使用者自己的需求来给予挂载到不同的分区。