对于磁盘分区,首先需要了解磁盘的物理结构,才能明白磁盘分区是按照什么逻辑结构来进行的。

    首先来了解下磁盘的物理结构。

wKioL1XcZF2Q_x0AAAEZqbgemck761.jpg

实际的机械式磁盘就是有以下几个部分组成的(固体硬盘除外):

转轴:带动盘片进行旋转的中心轴。

扇区(Sector):以同心圆以放射状的方式分割出的磁盘的最小存储单元,叫做扇区。常见的机械式磁盘的扇区大小是512bytes(有例外)。

磁道(Track):扇区组成的一个圆就称为一个磁道。

柱面(Cylinder):在所有盘面上的同一个磁道组成一个柱面。

读写头(Head):用来读写数据的弹片

硬盘存储量公式:Head*Cylinder*Sector*512bytes.一般制造厂商在显示硬盘容量是大多是以十进制数来编号,因此大部分的实际硬盘容量都会小于厂商标出的容量大小。


注释:对于此前的机械式硬盘,扇区是固定的512bytes,但是后来厂商为了提高容量,扩大了扇区的大小,从而使的单个磁盘的单个分区不在局限于最大2TB,详细可自行查找“GPT”的意思。


   接下来介绍说磁盘分区?

对于MBR分区表的磁盘(就是常见的普通的机械式硬盘,GPT分区表的磁盘除外)来说,MBR(Main Boot Record 主引导记录区) 位于整个硬盘的0磁道0柱面1扇区。不过,在总共512字节的主引导扇区中,MBR只占用了其中的446个字节,另外的64个字节交给了DPT(Disk Partition Table硬盘分区表),记录的是分区的简单信息情况,最后两个字节“55,AA”是分区的结束标志。这个整体构成了硬盘的主引导扇区。而在DPT的64bytes中,每16个bytes记录了一个分区的信息,因此一个机械式硬盘默认只能有4个主分区。但是在某些情况下我们看多于4个分区的情况,那是其中一个主分区该为了扩展分区,在扩展分区的基础上继续划分不同的逻辑分区(但是对于不同分区表的磁盘逻辑分区的个数也是有限制的)。

  一般来说我们的分区标准是按照柱面来分区的(在centos7上是按扇区号来分区的)。


  接下来简单说一下数据在硬盘上是如何进行逻辑存储的。

  但是数据在实际存储的时候是按我们的逻辑结构来存储的。对linux来说一切皆文件。所以文件在硬盘上的存储分为两部分,一部分是文件的元数据(包括文件的一些属性信息),另一部分是文件的实际数据。所以为了安照这种格式存储,我们将磁盘在逻辑上分为inode区和block区。这种存储方式成为索引式存储。

inode区:用来存储文件的属性信息和block编号。

block区:用来存放实际数据的区域。

在进行分区时可以指定inode的个数和block的大小。


对于linux系统来说,可以使用多种分区工具来进行分区。(注释:本人使用学习使用的是centos7和redhat6),相关的分区工具如:fdisk、parted、sfdisk等。这里主要介绍fdisk的一些常用选项。parter和sfdisk命令可自行查看man手册或者网上查看使用帮助。(自我习惯了fdisk)


使用格式: 

fdisk   [options]  device

[options]:

    -l :fdisk -l device 表示打印指定的设备的分区情况,不指定device表示打印系统上所有硬盘的分区情况。

    进行磁盘分区使用 fdisk device,对指定设备名的磁盘进行分区。

    -n :表示新建一个分区。

    -p :打印已有的分区。

    -d :删除指定编号的分区。

    -w :保存分区表并自动写入磁盘。

    -q :不保存分区表退出。

    -m :显示帮助提示。

    -l :列出当前系统支持的分区id号(id好代表相应的分区类型)

    -t :修改以有分区的id号

对于linux系统来说,在进行磁盘分区完成后,内核不一定能自动识别新的磁盘分区情况。(之所以说不一定是对linux系统的版本来说的,具体可使用 cat /proc/partitions 查看文件内容。centos7上分区完成后直接可以在这个文件中查看到的)。需要手动通知内核重读分区表。使用的命令有partx、kpartx和partprobe(具体看使用的系统版本支持哪个)。此处介绍partx命令的常用选项。

使用格式:

partx [options] device

    -a : 添加指定的分区或所有分区。

    -d :删除指定的分区或所有分区。

    -s :列出指定分区或所有分区。

    -u : 更新指定分区或所有分区。

    -b :以字节为单位而非易读的方式来打印size。


接下来就是将磁盘格式化操作。不同的操作系统可识别的文件系统类型是不同的。在进行存储时需要先将磁盘格式化为操作系统可识别的文件系统类型。

    对于文件系统类型,列出以下几种和支持其的操作系统(类型不全,可自行了解文件系统类型)。

linux系统 :ext2、ext3、ext4、xfs、btrfs、reiserfs、jfs、swap

unix系统  :FFS、UFS、JFS2

网络文件系统:NFS、CIFS

集群文件系统:GFS2、OCFS2

分布式文件系统:ceph、moosefe、mogilefs、NTFS


对于linux来说,文件系统可分为两个组成部分:

一:内核中的模块,ext4,xfs,vfat(使用lsmod可查看)。

二:用户空间的管理工具:mkfs.ext4、mkfs.xfs、mkfs.vfat(查看当前系统支持的工具 cat /proc/filesystems)


接下来说几个用于创建文集系统的工具(格式化磁盘)。如mkfs、mke2fs、mkfs.ext2、mkfs.ext3、mkfs.ext4、mkfs.xfs、mkfs.btrfs、mkswap等。


几种格式化方式:

1、mkfs.FS_TYPE /dev/sd#

  FS_TYPE类型:ext4、xfs、btrfs、

2、mkfs -t FS_TYPE /dev/sda#

3、对ext系列的文件系统类型可用专门的格式化工具。

mke2fs:

 -t {ext2|ext3|ext4}

 -b {1024|2048|4096}

 -L ”label“指定卷标

 -j:相当于-t ext3

      mkfs.ext3=mkfs -t ext3 =mke2fs -j = mke2fs -t ext3

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

 -N #:为数据空间指定多少个inode

 -m # :为管理人员预留的空间占据的百分比

 -o FEATURE[,,]:表示启动指定特性

   -o ^FEATURE :关闭指定特性

4、

mkswap:创建交换分区

 mkswap [options]

  注意:前提需要使用fdisk修改分区id为swap

另外介绍一些其他的管理文件系统常用工具:

blkid:块设备属性信息查看

  -U UUID :根据指定的uuid值查找对应的设备

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


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

  e2label device [new_label]

tune2fs:重新设定ext系列的文件系统可调整参数的值

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

 -L 'LABEL' :修改卷标

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

 -j: 打开日志功能,可将ext2升级为ext3

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

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

 -U UUID: 修改uuid

dumpe2fs:

  -h:查看超级块信息