1、硬盘分区
1.1 硬盘设备名与主要组成部件
常见的硬盘类型有两种:SATA和SAS;
由于SATA/USB/SAS等硬盘都是使用SCSI模组来驱动的,因此这些界面的硬盘设备文件名都是/dev/sd[ap]的格式。
硬盘设备名以Linux核心检测到的硬盘顺序来排序;(比如主板有6个SATA接口,SATA1接了一个硬盘,SATA5接了一个硬盘,USB接口接了一个U盘,那它们的设备名分别是:SATA1上的设备名为:/dev/sda、SATA5上的设备名为:/dev/sdb(而不是/dev/sde)、U盘的设备名为:/dev/sdc(开机后才会被系统识别到));
各类硬件在Linux下的文件名如下图:
Linux下各硬件的设备名
硬盘的组成主要有磁盘、机械手臂、磁盘读取头与主轴马达所组成,资料是写入在磁盘上面。磁盘上面又可细分出扇区(Sector)与磁道(Track)两种单位,其中扇区的物理量设计有两种大小,分别是512bytes与4Kbytes。最小存储单位是扇区(Sector);扇区组成的圆称为磁道(Track),所有硬盘上面的同一个磁道可以组成一个柱面(Cylinder),柱面是分割硬盘时的最小单位。
硬盘主要组成部件
磁盘示意图
SATA速度对比
Tips:
硬盘的第一个扇区记录了整个硬盘的重要信息!如传统的MBR(Master Boot Record),以及GPT(GUID Partition Table)这两种分区格式。
1.2 MBR与GPT硬盘分区表
MBR分区表格式与限制
MBR(Master Boot Record,主要开机记录区);
硬盘的第一个扇区存放着开机管理程序记录区和分区表;这个扇区通常是512bytes的大小,有以下两个资料:
(1)主要开机记录区(Master Boot Record,MBR):可以安装开机管理程序的地方,有446 bytes;
(2)分区表(partition table):记录整个硬盘分区的状态,有64 bytes;
最多只能有四个分区记录,即每个分区表仅为16bytes,每个分区表记录了该区段的启始与结束的柱面号码。
MBR主分区、扩展分区与逻辑分区的定义:
主分区与扩展分区最多可以有四个(硬盘的限制);
扩展分区最多只能有一个(操作系统的限制);
逻辑分区是由扩展分区分割出来的分区(只要删除扩展分区,所有的逻辑分区将被删除);
只有主分区和逻辑分区可以被格式化,扩展分区无法被格式化;
逻辑分区的数量在Linux中SATA硬盘可以突破63个以上的分区限制;
/dev/sd[ap]1~4前面这四个号码都是保留给Primary或Extended用的;
逻辑分区的设备名号码从5开始;
MBR分区表限制有如下问题:
操作系统无法识别到2.2T以上的硬盘容量!
MBR仅有一个区块,若被破坏后,经常无法或很难抢救。
MBR存放开机管理程序的区块仅446bytes,无法容纳较多的程序码。
GUID partition table,GPT硬盘分区
过去的扇区大小是512bytes,目前有4K的扇区设计。为了兼容所有的硬盘,会使用逻辑区块地址(Logbical Block Address,LBA)来处理。GPT将硬盘所有区块以此LBA(默认为512bytes)来规划,而第一个LBA称为LBA0。
与MBR仅使用第一个512bytes区块来纪录不同,GPT使用了34个LBA区块来纪录分区信息。GPT除了前面34个LBA之外,整个磁盘的最后33个LBA也拿来作为另一个备份!(MBR只有一个区块,被干掉就死光光)
GPT分区表的结构示意图
上述图示说明如下:
• LBA0 (MBR 相容区块)
与MBR模式相似的,这个相容区块也分为两个部份,一个就是跟之前446 bytes相似的区块,储存了第一阶段的开机管理程序!而在原本的分区表的纪录区内,这个相容模式仅放入一个特殊标志的分区,用来表示此硬盘为GPT格式之意。
• LBA1 (GPT 表头纪录)
这个部份纪录了分区表本身的位置与大小及备份用的GPT 分区的位置(最后34个LBA区块),同时放置了分区表的检验机制码(CRC32 ),操作系统可以根据这个检验码来判断GPT 是否正确。若有错误,还可以通过这个纪录区来获取备份的GPT(硬盘最后的那个备份区块) 来恢复GPT 的正常运作!
• LBA2-33 (实际纪录分区信息处)
从LBA2区块开始,每个LBA都可以纪录4笔分区纪录,总共可以有4*32 = 128笔记录;每个LBA有512bytes,因此每笔纪录为128 bytes,除了每笔纪录所需要的识别码与相关的纪录之外,GPT在每笔纪录中分别提供了64bits来记载开始/结束的磁区号码,因此,GPT分区表对于单一分区来说,他的最大容量限制就会在『 2的64次幂 * 512bytes = 2的63次幂 * 1Kbytes = 2的33次幂 *TB = 8 ZB 』,要注意1ZB = 2的30次幂 TB;
Tips:
GPT分区默认可以提供128笔记录;
目前Linux kernel通过udev等方式的处理,已经没有单个硬盘最多只能分15个分区的限制!
此外,GPT分区已经没有所谓的主、扩展、逻辑分区的概念,即每个分区都可以被格式化!
fdisk这个软件识别不了GPT,需要使用 gdisk 或者 parted 才行!
Linux开机管理程序 grub1 识别不了GPT,需要 grub2 以上版本;
是否能够读写GPT格式与开机的检测程序(即 BIOS 与 UEFI )有关!
1.3 开机流程中的BIOS与UEFI开机检测程序
BIOS搭配MBR/GPT的开机流程
CMOS是记录各项硬件参数且嵌入在主板上面的储存器(在主板上使用一颗纽扣电池单独供电),BIOS则是一个写入到主板上的一个固件(再次说明,固件就是写入到硬件上的一个软件程序)。这个BIOS就是在开机的时候,电脑系统会主动执行的第一个程序!
从开机到操作系统之前的简要流程:
POST开机自检> BIOS分析电脑存在哪些存储设备>> 依据使用者的设置获取可以正常开机的硬盘>>> 读取硬盘的第一个扇区的MBR位置>>>> 接下来的工作交给MBR内的开机程序>>>>> 载入核心文件。
这个开机管理程序的目的是载入(load)核心文件(开机管理程序由操作系统安装时提供)。
Tips:
LBA0仅提供第一阶段的开机管理程序,如果使用grub的开机管理程序的话,需要额外分出一个BIOS boot分区。在CentOS中,这个分区通常占用2MB左右。
BIOS也能够从LBA0的MBR兼容区块读取第一阶段的开机管理程序,只要开机管理程序能够识别GPT,那么使用BIOS同样可以读取正确的操作系统核心。
BIOS与MBR是硬件本身会支持的功能,至于Boot loader则是操作系统安装在MBR上面的一套软件。
boot loader主要任务项目如下:
(1)提供选单:使用者可以选择不同的开机项目,这也是多系统的重要功能!
(2)载入核心档案:直接指向可开机的程序区段来开始操作系统;
(3)转交其他loader:将开机管理功能转交给其他loader负责。
硬盘只有一个MBR,但是开机管理程序除了可以安装在MBR之外,还可以安装在每个分区的开机扇区(boot sector)!这个特色才能造就『多系统』的功能。
Windows和Linux双系统图示
上图总结:
每个分区都拥有自己的开机扇区(boot sector);
图中的系统分区为第一和第二分区;
实际可开机的核心文件是放在各分区内的;
Loader只会认识自己的系统分区内的可开机核心文件,以及其他loader而已;
Loader可直接指向或者是间接将管理权转交给另一个管理程序。
Tips:
如果要安装Windows+Linux双系统,最好先安装Windows再安装Linux。因为Linux在安装的时候,你可以选择将开机管理程序安装在MBR或者其它分区的开机扇区,而且loader可以手动设置选单,所以可以在Linux的boot sector里面加入Windows的开机选项;Windows在安装的时候,它的安装程序会主动覆盖掉MBR以及自己所在的分区的开机扇区,没有选择的机会,也没有选单功能。
UEFI BIOS搭配GPT开机的流程
UEFI (Unified Extensible Firmware Interface) 统一可扩展固件接口,使用C语言编写;(传统的BIOS使用的是组合语言编写)
传统BIOS与UEFI的区别如下图:
传统BIOS与UEFI的区别
由于过去cracker经常借由BIOS开机阶段来破坏系统,并取得系统的控制权,因此UEFI加入了一个所谓的安全启动(secure boot)机制,这个机制代表着即将开机的作业系统必须要被UEFI所验证,否则就无法顺利开机!微软用了很多这样的机制来管理硬件。加入这个机制后,许多的操作系统,包括Linux可能无法顺利开机。此时,需要关闭UEFI的secure boot功能,才能进入Linux。
Tips:
使用UEFI时建议依旧保留BIOS boot的分区支持;
为了与Windows兼容,并且提供给其它厂商使用的UEFI应用程序存储空间,必须要格式化一个vfat的文件系统,大约提供512M到1G左右的容量,以便让其他UEFI执行。
开机管理程序与核心放置在硬盘开始前的2TB位置即可!/boot目录的设备名变成/dev/sda3之后,不再是/dev/sda1。
1.4 Linux安装模式下,硬盘分区的选择(极重要)
目录树结构(directory tree)
目录树结构是以根目录为主,然后向下呈现分支状的目录结构的一种档案架构。整个目录树架构最重要的就是那个根目录(root directory),这个根目录的表示方法为一条斜线『 / 』。
Linux目录树相关性示意图
比如想要获取到mydata这个文件,就必须从根目录开始找:/ >home >dmtsai >mydata;最终的文件名为:/home/dmtsai/mydata
文件系统与目录树的关系(挂载)
所谓的『挂载』就是利用一个目录当成进入点,将硬盘分区的资料放置在该目录下;也就是说,进入该目录就可以读取该分区的意思。那个进入点的目录我们称为『挂载点』。根目录一定要挂载到某个分区,其它目录则按需求挂载。
目录树与分区之间的相关性
上图中假设当资料放置在 /home 目录时,资料是放置到partition2的。
判断某个文件在那个partition可透过反向追踪。如上图/home/vbird/test,由test--> vbird--> home--> /,看那个『进入点』先被查到那就是使用的进入点了。
初次接触Linux只要分『 / 』及『swap』即可,并预留备硬盘容量;
1.5 主机服务规划与硬件的关系
NAT(达成IP分享器的功能):
Linux NAT可以额外的安装很多分析软件,可以用来分析用户端的连线,或者是用来控制带宽与流量,达到更公平的带宽使用。需要较好的网卡。
SAMBA(加入windows网上邻居):
Windows邻居只能连接十个用户,使用SAMBA服务器可以将Linux加入Windows邻居,且不限连接数。可将 /home 独立出来。对网卡和硬盘容量有要求。
Mail(邮件服务器):
可将/var独立出来。也是对网卡和硬盘容量有要求。
Web(WWW服务器):
CentOS使用Apache这套软件来达成WWW网站的功能。CPU等级不能太低,最重要的是RAM!
DHCP(提供用户端自动获取IP的功能):
FTP
对网卡和硬盘容量有要求。
重点回顾:
在Linux系统中,每个设备都被当成一个文件来对待,每个设备都会有设备名。
硬盘设备名通常分为两种,实际SATA/USB设备名为/dev/sd[ap],而虚拟机的设备可能为/dev/vd[ap];
硬盘的第一个扇区主要记录了两个重要的信息,分别是: (1)主要开机记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有446 bytes (1)分区表(partition table):记录整个硬盘分区的状态,有64 bytes;
硬盘的MBR 分区方式中,主要与扩展分割最多可以有四个,逻辑分区的设备名号码,一定由5号开始;
如果磁盘容量大于2TB 以上时,系统会自动使用GPT 分区方式来处理磁盘分区。
GPT 分区已经没有扩展与逻辑分区的概念,你可以想像成所有的分区都是主分区!
某些操作系统要使用GPT 分区时,必须要搭配UEFI 的新型BIOS 格式才可安装使用。
开机的流程:BIOS-->MBR-->-->boot loader-->核心文件;
boot loader的功能主要有:提供选单、载入核心、转交控制权给其他loader;
10.boot loader可以安装的地方有两个,分别是MBR 与boot sector;
Linux操作系统的文件使用目录树系统,与磁盘的对应需要有『挂载』的动作才行;