|
最近我们的服务器做了一次扩容,增加了若干块硬盘,但是硬盘装好后遇到了一个棘手的问题——无法使用。我们服务器是IBM牌子的,之前是做的RAID5磁盘阵列,GPT(GUID Partition Table)分区模式。新的硬盘接入到硬盘插槽后,重组RAID,需要20多个小时。重组好了之后,我用VNCserver登陆服务器的图形界面,可以在Disk Utility工具(操作系统:CentOS 6.5)下看到磁盘阵列有若干T的未分配空间,然后我点击“Create Partition”,无法创建成功。
先说解决方案:
利用fdisk -l 命令查询磁盘状态,会显示一个警告:“WARNING: GPT (GUID Partition Table) detected on '/dev/sda'! The util fdisk doesn't support GPT. Use GNU Parted.”
再利用parted -l 命令查询磁盘状态,会显示一个警告:“Warning: Not all of the space available to /dev/sda appears to be used, you can fix the GPT to use all of the space (an extra xxxxxxxxxx blocks) or continue with the current setting? Fix/Ignore? ”
然后输入Fix,修复分区表
在VNCserver连接的图形界面下查看Disk Utility中的硬盘状态,点击“Create Paritition”,可以成功为为分配的空间创建一个分区——问题解决
对于分区表的原理和内在逻辑,我理解的并不多,一开始的时候,无法创建成功,我以为是“主分区”的问题。一般在Windows操作系统下,硬盘只能有4个主分区,假如想在一块硬盘上分出C盘、D盘、E盘、F盘、G盘……这样做很多个分区,就需要设置逻辑分区。而我们的服务器之前存在sda1, sda2, sda3, sda4, sda5 五个分区,其中sda5 是 swap 分区,除去sda5 我以为是像Windows操作系统下一样,达到了主分区的个数限制,所以创建不了新的分区。但是,从最后的解决方案可以看出,GPT是支持多个分区的,没有4个分区的限制。而之前之所以没有成功创建分区,我推断原因是,一个GPT 分区表是由一个头文件记录磁盘的分区状态的,这个GPT头文件记录了可用磁盘的起始位置,新加硬盘的空间地址在原GPT头文件中记录的结束位置之后,Disk Utility能否创建新的分区是依据GPT头文件的记录的,而之前Disk Utility探测到的GPT头文件中不包含新的磁盘空间地址,因此不能创建新的分区。然后我用 parted 命令修复GPT分区表后,也就是更新了头文件,使得头文件记录的磁盘结束位置向后延伸到新加的硬盘,问题也就解决了。
分区表的问题真的很专业,我们购买硬盘的那家公司的工程师在给我们装好硬盘后,对于我遇到的问题并不知道怎么解决。后来我继续联系他们公司,他们准备派一个人过来给我们解决问题——格式化硬盘、重新做GPT分区,备份系统或重装操作系统。而我又真心不想这样再瞎折腾,那么多软件再重新装一遍(之前已经重装过一次系统),必将花费许多无用的时间。幸好今天无意中发现了这个绝佳的解决方案。
上次重装系统其实主要也是分区表的问题,我们最开始新买服务器的时候硬盘只有1T多,不到2T,用的是MBR分区表,而MBR分区表有一个限制,最大支持2T的硬盘。我们之前也扩容过一次,当时硬盘超过了2T,也就必须重装系统,换了GPT分区表。
总结:GPT分区表至少支持6个分区,上限不明。GPT格式分区的磁盘阵列在新加硬盘后要运行 parted 程序修复分区表,才能正常使用新加的硬盘。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-28 12:45
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社