一、MBR分区结构

主引导记录(Master Boot Record,缩写:MBR),又叫做主引导扇区,是目前比较流行的一种分区结构。磁盘的0磁道0扇区称为MBR,它的大小是512字节,这个区域被分为三个部分:

第一部分为boot loader(主引导程序),占446字节;

第二部分为Partition table(分区表),即DPT,占64字节,每个分区项占用16个字节,这16个字节中存有活动状态标志、文件系统标识、起止柱面号、磁头号、扇区号、隐含扇区数目(4个字节)、分区总扇区数目(4个字节)等内容。由于MBR扇区只有64个字节用于分区表,所以只能记录4个分区的信息;

第三部分是分区标识符,固定为55AA,占2字节,这个标识非常重要,如果这个标识被破坏,即便磁盘正常分区也会被认为这块磁盘是一块全新的没有被分区的盘。

因为MBR分区方案采用的4个字节存储分区的总扇区数,最大能表示2的32次方的扇区个数,按每扇区512字节计算,MBR分区表最大可寻址的存储空间只有2TB(2^32×512字节),因此MBR只支持2TB以下的硬盘,超过2TB的硬盘也只能管理2TB。

MBR分区包括主分区和扩展分区,主分区和扩展分区的总数不能超过4个,标识编号为1-4,主分区可以直接使用,但是扩展分区需要划分成逻辑分区后才能使用,逻辑分区的数量不受限制,标识编号从5开始。一般的MBR分区方式为3个主分区加1个扩展分区,扩展分区下面再划分多个逻辑分区。


二、GPT分区结构

GPT磁盘是指使用GUID分区表的磁盘。是源自EFI标准的一种较新的磁盘分区表结构的标准。与普遍使用的主引导记录(MBR)分区方案相比,GPT提供了更加灵活的磁盘分区机制。

在GPT分区表的最开头(LBA0),处于兼容性考虑仍然存储了一份传统的MBR,用来防止不支持GPT的硬盘管理工具错误识别并破坏硬盘中的数据,这个MBR也叫做保护MBR。

GPT分区表分为4个区域:GPT头、分区表、GPT分区、备份区。

  • GPT头:起始于磁盘的 LBA1,通常也只占用这个单一扇区。其作用是定义分区表的位置和大小。GPT头还包含头和分区表的校验和,这样就可以及时发现错误。

  • 分区表:分区表区域包含分区表项。这个区域由GPT头定义,一般占用磁盘LBA2~LBA33扇区。分区表中的每个分区项由起始地址、结束地址、类型值、名字、属性标志、GUID值组成。分区表建立后,128位的GUID对系统来说是唯一的。

  • GPT分区:最大的区域,由分配给分区的扇区组成。这个区域的起始和结束地址由GPT头定义。

  • 备份区:备份区域位于磁盘的尾部,包含GPT头和分区表的备份。它占用GPT结束扇区和EFI结束扇区之间的33个扇区。其中最后一个扇区用来备份1号扇区的EFI信息,其余的32个扇区用来备份LBA2~LBA33扇区的分区表。


三、磁盘分区相关命令

1、在虚拟机中添加几块硬盘,添加完之后正常需要重启虚拟机才能看到新加硬盘,如果不想重启可以使用命令扫描

[root@liang ~]# echo "- - -" > /sys/class/scsi_host/host2/scan

2、查看磁盘命令

lsblk、cat /proc/partitions、ls /dev/sd*     三个命令都可以列出加载到内存中的磁盘设备

fdisk -l:命令看到的是实际硬盘的分区情况

3、创建磁盘分区命令

fdisk:主要用来创建MBR分区,也可以创建GTP分区,但是一般不用该命令创建GPT分区。

fdisk  : 更改磁盘分区

    常用的子命令有:

    n:新建分区

    d:删除分区

    p:打印分区列表

    m:帮助

    t:更改分区类型

    w:保存退出

    q:不保存退出

fdisk -l : 列出磁盘分区

gdisk:创建GPT分区,创建分区时的用法与fdisk基本一样,常用的子命令也基本一样。

parted:该命令也可以创建和删除分区,但是不建议使用,因为该命令是实时对磁盘进行分区修改的,一旦执行立即生效。

parted /dev/DEVICE mklable  gpt|msdos:更改GPT格式分区和MBR格式分区
parted /dev/DEVICE print:打印分区列表
parted /dev/DEVICE mkpart primary NUM SIZE:创建主分区,需要指定分区号和分区大小,默认单位为“M”
parted /dev/DEVICE rm NUM:删除分区,需要制定分区号
parted -l:列出所有块设备的分区列表

4、同步分区表

使用fdisk命令或gdisk命令新建或删除分区后有时内存不能立即识别,这是需要手动同步分区列表。

在CentOS5和CentOS7中一般使用 partprobe 命令同步,但在CentOS6中使用该命令后无效,需要使用partx命令。

partprobe的用法:partprobe [/dev/DEVICE] ,如果不跟硬盘默认为全部硬盘

partx的用法:

新增分区后同步需要使用-a选项:partx -a /dev/DEVICE

删除分区后同步需要使用-d选项和-n选项:partx -d -n M:N /dev/DEVICE

5、创建文件系统(格式化分区)

 cat /proc/filesystems :可以查看系统支持的文件系统类型

mkfs命令的用法有两种:

mkfs.FS_TYPE /dev/DEVICE 和 mkfs -t FS_TYPE /dev/DEVICE

FS_TYPE包括:ext系列、vfat、xfs(CentOS7)、msdos、btrfs等

mkfs -L 'LABEL' :设置分区LABER

mke2fs:ext系列文件系统专用管理工具

    常用选项:

    -t:指定文件系统类型(ext2、ext3、ext4)

    -b:设置默认block大小(1023|2014|4096)

    -L 'LABEL':设置分区LABER

    -j:相当于 -t ext3,格式化成带有记录日志功能的ext2文件系统

    -i #:为数据空间中每多少个字节创建一个inode,次大小不应该小于block的大小

    -N #:为数据空间创建多少个inode

    -I:一个indoe记录大小128--4096

    -m:默认为5%,为管理员预留空间占分区总空间的百分比

    -o FEATURE:启用指定特性

    -o ^FEATURE:关闭指定特性

6、查看文件系统信息

blkid:查看块设备属性信息

用法:blkid[OPTION]... [DEVICE]

    -U "UUID":根据指定的UUID来查找对应的设备

    -L "LABEL":根据指定的LABEL来查找对应的设备

e2label:管理ext系列文件系统的LABEL

    用法:  e2label device [ new-label ]

findfs:查找分区,可以指定根据label查看或根据uuid查看

用法:findfs LABEL=

tune2fs 命令可查看或重新设定ext系列文件系统的参数值

    -l:查看指定文件系统超级块信息

    -L 'LABEL':修改卷标

    -m #:修改预留给管理员的空间百分比

    -j:将ext2升级为ext3

    -O:文件系统属性启用或禁用

    -o:调整文件系统的默认挂载选项

    -U ‘UUID’:修改UUID号

dumpe2fs -h  DEVICE:查看超级块信息(分组信息)

7、文件系统检测和修复

常用于死机或者非正常关机之后,挂载的文件系统标记为“dirty”。

fsck命令的用法:

fsck.FS_TYPE 或 fsck -t FS_TYPE

    -a:自动修复错误

    -r:交互式修复错误

e2fsck:ext系列文件系统专用检测修复工具

    -y:自动回答为yes

    -f:强制修复  


四、创建SWAP文件系统

第一步:创建一个主分区,并修改System ID为“82”,或使用dd命令创建一个文件充当分区,创建文件的命令如下:

例:创建一个2G大小,名为swapfile的文件充当分区

]# dd if=/dev/zero of=/test/swapfile bs=1M count=2048

第二步:使用mkswap命令创建swap文件系统,其常用参数有:

    -L LABEL:指明卷标

    -f:强制

例:将/dev/sdb1创建成swap分区

]# mkswap -L "sdbswap" /dev/sdb1 

例:将swapfile文件创建成swap分区

]# mkswap -L "fileswap" swapfile

第三步:在/etc/fstab文件中添加swap分区的挂载项,如果有多个swap分区的话可以使用“pri=NUM”指明优先级,默认优先级为“-1”,数字越大,优先级越高,挂载时最好使用UUID

例:将/dev/sdb1和/test/swapfile 都写入/etc/fstab文件中

/test/swapfile    swap    swap    defaults,pri=1    0 0

/dev/sdb1    swap    swap    defaults,pri=2    0 0

第四步:使用swapon命令启用新建的swap分区,常用选项有:

    -a:启用/etc/fstab文件下所有未启用的swap分区

    -s:查看已启用的swap分区

例:加载/etc/fstab文件中未启用的swap分区,并查看已启用的swap分区

[root@localhost test]# swapon -a
[root@localhost test]# swapon -s
Filename                Type        Size    Used    Priority
/dev/sda3                               partition    2097148    0    -1
/dev/sdb1                               partition    2104476    0    2
/test/swapfile                          file        2097148    0    1

最后,可以使用free查看swap分区的大小,如果要删除swap分区,需要先使用swapoff -a 命令禁用所有swap分区,然后再去/etc/fstab文件中删除相应的行,最后再使用swapon -a 命令启用swap分区即可。