[操作系统/Linux]磁盘分区

0 基本概念1: 盘片/盘面/磁头/扇区/磁道/柱面

本小节摘自: 硬盘基本知识(磁头、磁道、扇区、柱面) - 博客园

一张磁盘并不是拿过来直接用,需要先分区。
磁盘本身有很多sector(扇区)、cylinder(柱面),partion(分区)等。
我们说,cylinder(柱面)通常原先是文件系统的最小单位,也就是分区的最小单位。
为什么说“通常”呢?因为近来有 GPT 这个可达到 64 bit记录功能的分区表。
然而,到现在,我们甚至使用扇区(sector)号码来作为分区单位
其中,MBRGPT是目前主流的两种分区方式。

0-1 盘片 / 盘面 / 磁头

硬盘中一般会有多个盘片组成,每个盘片包含两个(盘)面,每个盘面都对应地有一个读/写磁头
受到硬盘整体体积和生产成本的限制,盘片数量都受到限制,一般都在5片以内。
盘片的编号自下向上从0开始,如最下边的盘片有0面和1面,再上一个盘片就编号为2面和3面。

0-2 扇区 / 磁道

盘面中一圈圈灰色同心圆为一条条磁道,从圆心向外画直线,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称之为一个扇区(图中绿色部分)。
扇区是磁盘的最小组成单元,通常是512字节。(由于不断提高磁盘的大小,部分厂商设定每个扇区的大小是4096字节)

0-3 磁头 / 柱面

硬盘通常由重叠的一组盘片构成,盘片的每个盘面都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面
磁盘的柱面数与一个盘面上的磁道数是相等的。
由于每个盘面都有自己的磁头,因此,盘面数等于总的磁头数

0-4 磁盘容量计算

存储容量
:= 磁头数(盘面数) x [磁道数(柱面数) x 每条磁道的扇区数] x 每扇区字节数
:= 磁头数(盘面数) x [每张盘面的总扇区数] × 每扇区字节数

[以图为例]
磁盘是一个 3个圆盘6个磁头,7个柱面(每个盘片7个磁道) 的磁盘,图3中每条磁道有12个扇区,所以此磁盘的容量为:
存储容量:= 6 * [7 * 12] * 512 = 258048

0-5 磁盘读取响应时间

寻道时间:磁头从开始移动到数据所在磁道所需要的时间,寻道时间越短,I/O操作越快,目前磁盘的平均寻道时间一般在3-15ms,一般都在10ms左右。
旋转延迟:盘片旋转将请求数据所在扇区移至读写磁头下方所需要的时间,旋转延迟取决于磁盘转速。普通硬盘一般都是7200rpm,慢的5400rpm。
数据传输时间:完成传输所请求的数据所需要的时间。

小结:从上面的指标来看,其实最重要的,或者说我们最关心的应该只有两个:寻道时间旋转延迟
读写一次磁盘信息所需的时间可分解为:寻道时间延迟时间传输时间
为提高磁盘传输效率,软件应着重考虑减少寻道时间和延迟时间。

1 基本概念2: 主分区/扩展分区/逻辑分区/物理分区 | MBR/GPT | BIOS/UEFI

主分区中不能再划分其他类型的分区,主分区是直接在硬盘上划分的;而逻辑分区必须建立于扩展分区中。

[例题]现有2个SATA磁盘以及1个USB磁盘,主板上面有6个SATA的插槽。2个SATA磁盘分别插在主板上的SATA1, SATA5插槽上。
问:这3个磁盘在Linux中的设备文件名为何?

答:由于是使用侦测到的顺序来决定设备文件名,并非与实际插槽代号有关。
因此,设备的文件名如下:
SATA1插槽上的文件名:/dev/sda
SATA5插槽上的文件名:/dev/sdb
USB磁盘(开机完成后才被系统捉到):/dev/sdc

1-1 主分区 := 主磁盘分区

主分区 := 硬盘的启动分区
人们常说的"C盘"就是硬盘上的主分区。
它被操作系统主板认定为这个硬盘的第一个分区。所以,C盘永远都是排在所有磁盘分区的第一的位置上。

1-2 扩展分区

扩展分区: 除去主分区所占用的容量以外,硬盘剩下的容量————就被认定为扩展分区
也就是说:一块硬盘除去主分区外的容量后,如果对剩下的容量进行了再分区,那么,这个再分区就是扩展分区。

扩展分区容量 := 硬盘总容量 - 主分区总容量

1-3 逻辑分区

逻辑分区:扩展分区是不能直接使用的,它是以逻辑分区的方式来使用的。
所以说,扩展分区可以分成N个逻辑分区,二者是包含的关系所有的逻辑分区都是扩展分区的一部分

扩展分区如果不再进行分区了,那么:整个扩展分区就是逻辑分区了。

即 N个逻辑分区容量 := 扩展分区容量

1-4 物理分区

1-5 补充1:应用场景

  • 场景1

主分区能够激活,通常用来【引导系统】

扩展分区本身并不能直接用来存放数据,必须先划分成若干逻辑分区逻辑分区扩展分区进一步分割出来的区块,通常用来【存储数据】
如果将逻辑分区比作房间,那么扩展分区就好比客房区(包括若干个房间)。

1-6 补充2: MBR分区表 / GPT分区表

在Linux中对磁盘分区有两个方案:
1)MBR分区方案(Main Boot Record:=主引导记录);
2)GPT分区方案(GUID Partition Table := 全局唯一标识磁盘分区表)

Q1:如何区分硬盘采用 MBR分区 还是 GPT分区?

[方式1]fdisk -l

# fdisk -l
[情况1] gpt := GPT分区
...
Disk label type: gpt 
...

[情况2] dos := MBR分区
...
Disk label type: dos 
...

[方式2]parted -l

[情况1] MBR分区
... 
Partition Table: msdos
...

[情况2] GPT分区
... 
Partition Table: gpt
...

Q2:MBR分区表方案

Master Boot Record := 硬盘主引导记录分区表

  • 特点:
    1、最多支持4个主分区,或3个主分区和1个扩展分区,扩展分区下可以有多个逻辑分区。
    2、在Linux上使用扩展分区和逻辑分区最多可以创建15个分区
    3、由于分区中的数据以32位存储,使用MBR分区是最大支持2T空间
    4、fdisk管理工具只能创建MBR分区

  • 简述

MBR的意思是“主引导记录”,是IBM公司早年间提出的。
它是存在于磁盘驱动器开始部分的一个特殊的启动扇区。
这个扇区包含了已安装的操作系统系统信息,并用一小段代码来启动系统。
如果你安装了Windows,其启动信息就放在这一段代码中——如果MBR的信息损坏或误删就不能正常启动Windows,这时候你就需要找一个引导修复软件工具来修复它就可以了。
Linux系统中MBR通常会是GRUB加载器。
当一台电脑启动时,它会先启动主板自带的BIOS系统,bios加载MBR,MBR再启动Windows,这就是MBR的启动过程。

Q3:GPT分区表方案

GUID Partition Table := 全局唯一标识分区表(GUID Partition Table)

  • 特点
    1、是UEFI标准的一部分,主板必须要支持UEFI标准。
    即 只有基于UEFI平台的主板才支持GPT分区引导启动。
    2、GPT分区列表支持最大128PB(1PB=1024TB)
    3、【分区数量】:与MBR最大4个分区表项的限制相比,GPT对分区数量没有限制。Windows系统下,最大可支持定义128个分区,GPT可管理硬盘大小达到了18EB
    4、没有主分区,扩展分区和逻辑分区的概念,所有分区都能格式化
    5、gdisk管理工具可以创建GPT分区
    6、系统分区 := EFI分区(即 ESP分区)

  • 简述

GPT的意思是GUID Partition Table,即“全局唯一标识磁盘分区表”。
它是另外一种更加先进新颖的磁盘组织方式,一种使用UEFI启动的磁盘组织方式。
最开始是为了更好的兼容性,后来因为其更大的支持内存(mbr分区最多支持2T的磁盘),更多的兼容而被广泛使用,特别是苹果的MAC系统全部使用gpt分区。
GPT不在有分区的概念,所有CDEF盘都在一段信息中存储。
可以简单的理解为更先进,但是(早先暂时)使用不够广泛的技术。

Q4:二者区别

因为兼容问题,GPT其实在引导的最开始部分也有一段MBR引导,也叫做“保护引导”,为了防止设备不支持UEFI区别内存支持:MBR最多支持2T,而GPT理论上是无限制的。

  • 分区
分区:mbr最多支持4个主分区,GPT没有限制。如果你想跑多系统,mbr最多4个而gpt没有限制。

GPT 分区没有所谓的primary、extend、logic partion的概念,每个分区都可以视为主分区,都可以格式化。
新版的 Linux 大多支持 GPT 分区表
  • 系统
系统:win7只能用MBR分区(GPT也可以,但是很麻烦,不被建议),从Win8开始微软建议你使用GPT。
  • 其它
GPT是由UEFI启动的,而UEFI是后来才提出的概念,兼容性和稳定性(暂)不如【BIOS+MBR】。

Q5: GPT分区表的MSR/EFI分区(ESP分区)?

只有GPT分区表模式才有MSR分区和EFI分区,MBR分区表无此类型的分区。

[MSR分区]
Microsoft Reserved Partition := Microsoft 保留 (MSR) 分区
  微软保留分区,是GPT磁盘上用于保留空间以备用的分区,例如在将磁盘转换为动态磁盘时需要使用这些分区空间。
  MSR分区本身没有做任何工作,是名副其实的保留分区。
  windows不会向msr分区建立文件系统或者写数据,而是为了调整分区结构而保留的分区。
  在Win8以上系统更新时,会检测msr分区。msr分区本质上就是写在分区表上面的“未分配空间”,目的是微软不想让别人乱动。
每个在GUID 分区表 (GPT) 上的 Windows操作系统(windows7以上)都要求的分区
  任何一块GPT磁盘上都有一个MSR分区,大小随硬盘总容量而定,一般不超过128MB。
这个分区不能被用户直接使用,它的用途是防止将一块GPT磁盘接到老系统(如XP)中,被当作未格式化的空硬盘而继续操作(例如重新格式化),导致数据丢失。
  GPT磁盘上有了这个分区,当把它接入XP等老系统中,会提示无法识别的磁盘,也无法进一步操作。

[ESP分区 := EFI分区 := 系统启动/引导分区]
ESP分区 := EFI System Partition := 该分区用于采用了EFI BIOS的电脑系统,用来启动操作系统。
  该分区中,存放:引导管理程序、驱动程序、系统维护工具等。
  如果电脑采用了EFI系统,或当前磁盘用于在EFI平台上启动操作系统,则应建议ESP分区。
  该分区在 Windows 操作系统下一般是不可见的。支持EFI模式的电脑需要从ESP启动系统,EFI固件可从ESP加载EFI启动程序和应用程序。
GPT磁盘只有做【系统盘】的时候才会有【EFI分区】,这个分区是操作系统的【引导分区】,与在MBR磁盘上安装Win7(8)生成的那个100MB隐藏分区用途相同。
  ESP是一个独立于操作系统之外的分区,操作系统被引导之后,就不再依赖它。

Q6:BIOS: BIOS | Legacy VS UEFI

  • BIOS
    BIOS (Basic Input Output System) := 基本输入输出系统
所有的电脑都会有一个BIOS,用于加载电脑最基本的程序代码,担负着初始化硬件,检测硬件功能以及引导操作系统的任务。
  • UEFI
    UEFI (Unified Extensible Firmware Interface) := 统一的可扩展固件接口
    UEFI旨在提高软件互操作性和解决BIOS的局限性。
而UEFI就是与BIOS相对的概念,这种接口用于操作系统自动从预启动的操作环境,加载到一种操作系统上,从而达到开机程序化繁为简节省时间的目的。
传统BIOS技术正在逐步被UEFI取而代之,在最近新出厂的电脑中,很多已经使用UEFI,使用UEFI模式安装操作系统是趋势所在。

UEFI (Unified Extensible Firmware Interface) , 即“统一的可扩展固件接口”, 是一种详细描述全新类型接口的标准, 是由INTEL提出的旨在为下一代BIOS开发而构建的架构。
我们知道每一台普通的电脑都会有一个BIOS, 用于加载电脑最基本的程序代码, 担负着初始化硬件, 检测硬件功能以及引导操作系统的任务。
UEFI可以克服BIOS自检时间长、启动过程多、速度慢的弊病, 这种接口用于操作系统自动从预启动的操作环境, 加载到一种操作系统上, 从而达到加快开机速度的目的。
UEFI有点类似于一个操作系统, 其固化在主板上。

本质上,UEFI就是为了替代BIOS而生的,在功能上,UEFI的扩展性和执行能力,远比简陋的BIOS高级。
最直观的是:你可以在UEFI界面下看到图形界面,可以使用鼠标操作,可以让启动时自检过程大为简化,这就是最基本的区别。
  • UEFI相比BIOS的优势
1、通过保护预启动或预引导进程,抵御bootkit攻击,从而提高安全性。

2、缩短了启动时间和从休眠状态恢复的时间。

3、支持容量超过2.2 TB的驱动器。

4、支持64位的现代固件设备驱动程序,系统在启动过程中可以使用它们来对超过172亿GB的内存进行寻址。

5、UEFI硬件可与BIOS结合使用。

1-7 补充3: 分区(partition) / 卷(volume) 的区别?

partition要挂载到volume上才能被系统————操作系统/文件系统操作。
磁盘上的是分区(partition),装载到卷(volume)才能被操作系统/文件系统使用;
传统的1个分区装载成1~N个,而1个跨区卷带区卷都是使用多个分区

下述观点引述自: 磁盘上的volume和partition和driver有什么区别? - Zhihu

partition是偏【物理】/设备层面的概念,代表整个硬盘/块设备上的某一部分空间;
一个硬盘,就是一个存储数据的载体。在这个载体上分成几大部分,每一部分就是一个分区。磁盘有一个驱动管着。分区又有一个驱动管着。
partition可以不使用Windows的NTFS文件格式(例如双系统用Linux的文件格式格式化),这个时候只有partition没有volume。
如果把硬盘转换为动态磁盘,可把多个硬盘上的多个partition组合起来组成一个跨区/条带/镜像/奇偶卷,这个时候一个volume包括多个partition。

volume是偏【逻辑】层的概念,代表操作系统可以用来存储文件/数据的某个存储空间。一般情况下它们是等效的,但实质上二者并不完全可以等同。
Volume的逻辑概念是什么呢?就是对上层(文件系统)提供了一个可以存储数据的【逻辑载体】。文件系统通过对Volume的读写,来管理自己的数据。
    应用API到内核之后,请求交给了文件系统,文件系统就通过块读写请求,发到volume。
    volume再将请求发向自己的底层。
    底层可能就只有一个分区,那volume将读写动作发到这个分区;底层可能是两个分区,则volume需要计算每个分区需要读写的位置。
    RAID的软件实现,一般就在volume层完成。
Volume是一个逻辑概念,也有一个驱动管着。
1个Volume,可以是只有一个分区,也可以跨好几个分区,甚至跨好几个磁盘的分区。
但因为常见的是1个volume对应1个分区,1个分区对应N个volume;所以,慢慢地习惯了叫XX分区。

1-8 补充4: 硬件设备在Linux中文件名

2 重要命令

命令概览

  • fdisk【磁盘分区命令】
    • fdisk -l:查看磁盘分区情况
    • fdisk /dev/sdc:进入磁盘,分区操作(创建、删除)准备
  • mkfs.xfs【分区格式化命令(文件系统:ext4)】
    • mkfs.ext4 /dev/sda1 将硬盘sda的逻辑分区sda1格式化→Ext4文件系统
    • mkfs.xfs /dev/sda1 将硬盘sda的逻辑分区sda1格式化→xfs
  • mkdir【创建目录命令(挂载之前,必须先格式化)】
    • mkdir /home
  • umount / mount【分区卸载/挂载命令】
    • umount /dev/sdc2 卸载逻辑分区sdc2
  • df【报告文件系统磁盘空间的使用情况】
    • df -alhT:查看所有目录挂载点

部分命令详情

进入磁盘,准备进行(查看、创建、删除等)分区操作

[root@etl143 ~]# fdisk /dev/sda
Command (m for help): m        #查看帮助

Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition              #【删除分区】
   l   list known partition types      #列举已知分区
   m   print this menu                 #【打印菜单/查看帮助】
   n   add a new partition             #【增加分区】
   o   create a new empty DOS partition table
   p   print the partition table       #【显示分区表】
   q   quit without saving changes     #不保存退出分区
   s   create a new empty Sun disklabel
   t   change a partition's system id  #改变分区ID
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit    #【保存分区操作】
   x   extra functionality (experts only)

查看分区及对应挂载点

[root@etl143 ~]# df -lhT 
文件系统       类型      容量  已用  可用 已用% 挂载点
/dev/sda3      xfs        50G  8.3G   42G   17% /
devtmpfs       devtmpfs  5.8G     0  5.8G    0% /dev
tmpfs          tmpfs     5.8G     0  5.8G    0% /dev/shm
tmpfs          tmpfs     5.8G   17M  5.8G    1% /run
tmpfs          tmpfs     5.8G     0  5.8G    0% /sys/fs/cgroup
/dev/sda1      xfs       494M  135M  360M   28% /boot
/dev/sda5      xfs       410G   14G  396G    4% /home
tmpfs          tmpfs     1.2G     0  1.2G    0% /run/user/0
[root@etl143 ~]# df -k
文件系统           1K-块     已用      可用 已用% 挂载点
/dev/sda3       52403200  8665444  43737756   17% /
devtmpfs         5984148        0   5984148    0% /dev
tmpfs            6012116        0   6012116    0% /dev/shm
tmpfs            6012116    17040   5995076    1% /run
tmpfs            6012116        0   6012116    0% /sys/fs/cgroup
/dev/sda1         505580   137832    367748   28% /boot
/dev/sda5      429072696 14136288 414936408    4% /home
tmpfs            1202424        0   1202424    0% /run/user/0
[root@etl143 ~]# parted -l
Model: ATA ST500DM002-1BD14 (scsi)
Disk /dev/sda: 500GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type      File system     标志
 1      1049kB  525MB   524MB   primary   xfs             启动
 2      525MB   6835MB  6309MB  primary   linux-swap(v1)
 3      6835MB  60.5GB  53.7GB  primary   xfs
 4      60.5GB  500GB   440GB   extended
 5      60.5GB  500GB   440GB   logical   xfs

3 分区操作过程

  • mkdir /home_backup
  • cp -avt /home /home_backup :源文件复制至目标文件,或多个源文件复制至目标目录
  • 【X】mv -t /home /home_backup:对原/home目录进行重命名
  • umount -v /home:通过挂载点的方式,卸载/home目录
    • 关键术语: 挂载点(/home、/mnt/mymount)、设备名(/dev/sda1)
  • fdisk /dev/sda :进入原/home所挂载的硬盘sda
    • 假定:原/home对应的其逻辑分区sda3)
    • m :查看帮助
    • p:打印分区表
    • n:新建分区
    • 分区编号:默认,回车就是1 从头开始计算逻辑分区编号
    • 分区大小(100GB):+102400M
    • p:再次打印分区表,确认新建分区成功
    • w:保存分区表到硬盘,并退出
  • mkfs.xfs /dev/sda3 :格式化原/home的逻辑分区sda3
    • df -lhT :可通过此命令,提前查看各目录的文件系统类型
  • mkfs.xfs /dev/sda4 :格式化硬盘sda的新逻辑分区sda4
  • mkdir /home
  • mount /dev/sda3 /home :将原/home目录挂载到逻辑分区sda3上
  • cp -av /home_backup /home : 将备份内容还原到/home中(采取拷贝动作)
    • 重点: 文件系统必须保持一致
  • rm -r /home_bakcup : 删除备份内容,若上述操作无误
  • (结束)

X 参考文献

posted @ 2020-06-28 16:41  千千寰宇  阅读(800)  评论(0编辑  收藏  举报