[操作系统/Linux]磁盘分区
0 基本概念1: 盘片/盘面/磁头/扇区/磁道/柱面
本小节摘自: 硬盘基本知识(磁头、磁道、扇区、柱面) - 博客园
一张磁盘并不是拿过来直接用,需要先分区。
磁盘本身有很多sector(扇区)、cylinder(柱面),partion(分区)等。
我们说,cylinder(柱面)通常原先是文件系统的最小单位,也就是分区的最小单位。
为什么说“通常”呢?因为近来有 GPT 这个可达到 64 bit记录功能的分区表。
然而,到现在,我们甚至使用扇区(sector)号码来作为分区单位。
其中,MBR和GPT是目前主流的两种分区方式。
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 参考文献
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!