首页 > 代码库 > 存储管理之磁盘分区

存储管理之磁盘分区

在使用一块磁盘的之前,我们要对其进行分区处理,为的是优化这块磁盘的I/O性能;为不同的目的分配不同的空间,来实现空间的配额限制,就好像Windows中的C、D盘那样,给其一定的空间;进行高速修复和隔离系统文件与其他文件,还是像Windows中C盘和D盘那样,当我们对D盘无论进行什么样的操作都不会影响到C盘,根据这种特性,我们就可以在一台电脑上安装多个操作系统。

目前的分区大致分为两种,第一种是MBR分区,适合硬盘空间小于2TB的硬盘,全名为Master(Main) Boot Record——主引导记录,这种方式起源于1982年。它的工作原理是在0磁道0扇区使用512Byte来记录分区信息,其中446Byte为boot loader——引导加载程序,64Byte为partition table——分区表,在这64Byte中又按照每16Byte分开,分别对应四个分区,这也是为什么最多只能有四个主分区的原因。四个分区可以都为主分区,也可以有扩展分区,在扩展分区中可以有更多的逻辑分区。但是扩展分区和主分区的数量加在一起不能超过四个。在为分区进行分配编号的时候主分区和扩展分区可以为1、2、3、4中的任意一个,但是逻辑分区必须从5开始,就算1、2、3、4并没有全部被使用,逻辑分区也不能占用。最后还剩下2Byte的容量为结束标记——55AA。第二种是GPT分区,这种分区方式适用于空间大于2TB的硬盘。全名为:GUID Partition Table——GUID分区表。能够支持128个分区。


当我们为Centos操作系统插上了一块新的硬盘,系统是无法自动读取的,必须由我们来告诉系统去读取这块磁盘,方法有两种,第一种是重启系统,第二种是使用命令:

~]# echo ‘- - -‘ > /sys/class/scsi_host/host2/scan


系统会将读到的硬盘进行命名,如果是IDE类型的硬盘命名方式为hd[a-d],SCSI或SATA或SAS或USB类型的硬盘命名方式为sd[a-z],并将命名后的设备保存在“/dev/”目录下。在这个目录中保存的都是设备文件,设备类型分为块设备(用于随机访问的设备,数据存储和交换的单位是块)和字符设备(用于线性访问的设备,数据的交换单位一般是字符)。我们可以使用“mknod”命令来创建这种设备文件。


在系统能够读取到这块硬盘之后就可以对其进行分区了,分区的命令有fdisk和gdisk两个,fdisk用于创建和管理MBR分区,gdisk用于创建和管理GPT分区,但是值得注意的是使用这两种命令对磁盘进行分区的时候如果磁盘中已经存在分区,则再次分区的时候分区的信息即便是保存了,也不会被内核重新读取。如果要让内核识别此类分区,要么重启计算机,要么使用partprobe命令或者partx命令,强制内核重读分区表,不过不同版本的系统上使用的命令有所不同,比如说在CentOS5或CentOS7上使用“partprobe -a [device]”命令,在CentOS6或CentOS7上使用“partx -a [device]”或“kpartx -af [device]”命令。


接下来具体的说一说fdisk这个命令

fdisk - Partition table manipulator for Linux

fdisk -l [device...]

fdisk device——对于指定设备进行分区管理

在使用这个命令后会进入fdisk的界面,如下图:

************************************

技术分享

图1:先使用“fdisk -l”命令查看当前系统中能够读取到的磁盘

技术分享

图2:使用“fdisk 磁盘名(绝对路径)”命令进入一个磁盘的分区界面

************************************

在进入fdisk命令界面后就可以使用以下子命令:

d   delete a partition(删除一个分区)

l   list known partition types(显示分区类型)

m   print this menu(打印帮助菜单)

n   add a new partition(添加新的分区)

e   extended(添加扩展分区)

p   primary partition (1-4)(添加主分区)

l logical (添加逻辑分区)

p   print the partition table(打印分区表)

q   quit without saving changes(只退出,不保存)

t   change a partition‘s system id(改变磁盘ID,从而改变磁盘类型)

w   write table to disk and exit(保存并退出)

在使用这个命令的时候,有些参数是默认的,直接回车就可以,默认的参数会在提示的那句话的最后给出(就是括号中的),这样就避免了我们自己计算出错的事情。下面举一个例子,对我系统中的“/dev/sdb”进行分区:

************************************

技术分享

图3:在这里使用n命令进入添加分区的子界面

技术分享

图4:接着上面,在这几步中直接回车即可,使用的默认值分别为p(建立主分区)、1(分配磁盘号为1)、2048(此分区从2048单元开始)

技术分享

图5:接下来会出现这个界面,在这里就需要注意了,默认值是将所有的空间分配给这个分区,但是我们要分配多个分区,所以不能使用默认值。我们可以输入的方法有多种,第一种是直接输入扇区值,也就是上一步的开始空间加上你想要分配的空间大小。相比于第一种,第二种要相对简单,只要我们清楚的知道我们想分配的大小,然后使用“+空间”即可,单位分别为K,M,G。在这里,我想给分区分配3个G的大小,就直接写上“+3G”即可

技术分享

图6:之后又会跳回之前的命令界面,如果想分配的分区已经分配完成,那么直接输入“w”命令保存退出即可,出现如图的回显,表示分区成功。如果分区不对,不想保存,那么输入“q”命令即可不保存直接退出。

************************************

由于“fdisk”命令的先操作后执行的模式,所以这个命令更为安全,给与我们更大的容错率,与此相对的“parted”则是实时生效,也就是说每做一步操作都会实时的作用于当前的磁盘,这样我们如果操作有误,那么后悔的代价就十分大了。这个命令暂时不做介绍,大致的使用方法如下:

parted - a partition manipulation program

parted [options] [device [command [options...]...]]

parted /dev/sdb mklabel gpt|msdos

parted /dev/sdb print

parted /dev/sdb mkpart primary 1 200

parted /dev/sdb rm 1


存储管理之磁盘分区