1. 磁盘分区信息存储的两种形式
常见磁盘分区存储形式类型有两种:MBR(MSDOS)和GPT。
1.1 什么是MBR
MBR(Master Boot Record,主引导记录)。
MBR是存在于驱动器最开始部分的一个特殊的启动扇区,一般叫它0扇区。它由446B的启动加载器(Windows和Linux的不同),64B的分区表,和2B用来存放区域的有效性标识55AA,共512B。
-
MBR分区最大只支持2T
分区表每16B标识一个分区,包括分区的活动状态标志、文件系统标识、起止柱面号、磁头号、扇区号、隐含扇区数目(4个字节)、分区总扇区数目(4个字节)等信息。
分区总扇区数目决定了这一分区的大小,一个扇区一般512B,所以4个字节,32位所能表示的最大扇区数为2的32次方,也就决定了一个分区的大小最大为2T( 2**32 * 512 / 1024 / 1024 / 1024 /1024)。 -
MBR只支持最多4个主分区
16B标识一个分区,64B就一共只能有4个分区,所以主分区最多只能有4个。一块磁盘如果要分多于4个分区,必须要分一个扩展分区,然后在扩展分区中再去划分逻辑分区。
1.2 什么是GPT
GPT(GUID Partition Table),这是最近几年逐渐流行起来的一种分区形式,如果要将使用GPT分区格式的磁盘作为系统盘,需要UEFI BIOS的支持,它才可以引导系统启动。UEFI一种称为Unified Extensible Firmware Interface(统一的可扩展的固件接口,它最终是为了取代BIOS,目前市面上的BIOS大多已支持UEFI。GPT也是为了最终取代MBR的。
GPT相比MBR的优点:
- 分区容量可以大于2T。
- 可以支持无限个主分区。
- 更为健壮
MBR中分区信息和启动信息保存在一起而且只有一份,GPT在整个磁盘上保存多份这个信息,并为它们提供CRC检验,当有数据损坏时,它能够进行恢复。
2. 小于2T的分区的管理
因为传统的MBR分区,支持的最大分区为2T,也可以一定程度上等同于磁盘大小,必定2T以上的硬盘不是非常普及。在CentOS中可以使用fdisk
指令进行管理。详细过程不在赘述。
3. 超过2T的分区的管理
当CentOS中识别到有磁盘容量超过2T时,如果试图使用fdisk
指令对其分区会有相应的警告提示,大致如下:
WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted.
明确提示需要使用parted
进行管理,如果系统中没有这一指令,使用yum install -y parted
进行安装即可。
-
查看磁盘的分区情况
parted -l
会打印出系统识别到的所有磁盘的分区情况 -
指定分区类型
parted /dev/sdb
先进入那块超过2T的磁盘的管理界面中。
mklabel gpt
parted指令支持的分区类型选项:{aix|amiga|bsd|dvh|gpt|loop|mac|msdos|pc98|sun},这里需要选择gpt,msdos即为传统的MBR分区方式。 -
创建分区
mkpart {primary|extended|logical| [fs-type] start end
GPT分区没有主分区数的限制,这里一般选择primary这一类型。GPT支持的fs-type没有fdisk那么多,它支持的有:ext2、ext3、ext4、fat16、fat32、NTFSReiserFS、JFS、XFS、UFS、HFS、swap这些文件系统格式。
start、end则是指定分区的起始和结束位置,磁盘的第一个分区推荐start用0%或者2048s表示,避免出现分区没有对齐的而出现如下提示信息:
Warning: The resulting partition is not properly aligned for best performance.
4K对齐
在磁盘中的扇区只有排列整齐才有利于发挥磁盘的最佳读写性能。这里的对齐即常听说的4K对齐。可以简单的理解4K对齐的作用:当在磁盘中存取小于4K的数据时,如果没有4K对齐这时候很可能需要将这份数据放到两个4K块中,会出现多次读写不同的块的情况,明显没有4K对齐只在一个块中去存取数据高效。
如果系统进行了磁盘内核参数的调整,可以使用以下公式计算出合适的磁盘第一分区的start值,单位为s,s表示扇区,如果没有调整start可以使用2048s或0%表示。end值可以使用百分比的形式,也可以使用数字加单位的形式,如50%,3T。
cat /proc/partition #查看是否识别到那块大硬盘
cat /sys/block/sdb/queue/optimal_io_size
cat /sys/block/sdb/queue/minimum_io_size
cat /sys/block/sdb/alignment_offset
cat /sys/block/sdb/queue/physical_block_size
然后将optimal_io_size的值加上alignment_offset的值,再除以physical_block_size的值,得到这块盘分区的起始位置扇区编号。
给分区命名
name partition-number partition-name
如:
name 1 test
将第一个分区命名为test。设置分区标志
set partition flag state
可以给分区设置如下标志,即flag的值,仅限:"boot", "root", "swap", "hidden", "raid", "lvm", "lba", "legacy_boot" and "palo"。state的值为on或off。partition为相应的分区编号。打开或关闭分区标志
toggle partition flag
:取消或者开启分区标志。partition为相应的分区编号。检查分区是否对齐
align-check type partition
:检查分区类型是否满足类型的约束;
type 必须是 "minimal" or "optimal".(完整检查和最小化检查),partition为分区编号。
如果检查结果是not align,可以对分区重新进行格式化然后再次check,最好的情况应该是partition align。删除分区
rm partition
,partition为分区编号。
注意:parted指令做的磁盘设置立即生效,不需要和fdisk一样使用w才会生效。
当完成对超过2T的磁盘分区以后,可以查看系统内核(cat /proc/partition
)是否已成功识别到相应分区。如果识别到了,按照常规方式对分区进行格式化,然后挂载即可使用新的磁盘分区了。