浏览文章
文章信息
parted解决超大容量磁盘分区 GPT分区表
更多技术文章欢迎访问个人主页http://www.linuxsun.com
请不要惊慌,这主要是因为您的磁盘总容量大于2T导致的,你可能对GPT感到迷惑,下面就谈谈GPT是什么。
your boot partition is on a disk using the GPT partitioning scheme,but this machines cannot boot using GPT. 在了解GPT之前,先回顾下MBR
MBR,主引导记录 (Master Boot Record),也就是我们常见的分区方法,MBR 分区的标准决定了 MBR 只支持在2TB以下 (超过 2TB 的只能管理 2TB) 的硬盘中创建4个分区表项,要获得更多分区,需要次级结构–扩展分区。扩展分区可以再次被分成一个或多个逻辑分区。
GPT ,全局唯一标识磁盘分区表 (GUID Partition Table),GUID,全局唯一标识符 (Globally Unique Identifier) 。GUID 分区表 (GPT) 是作为 Extensible Firmware Interface (EFI) 计划的一部分引入的。当然,你也可以在 BIOS 的PC中使用 GPT 分区,虽然 GPT 来自以 EFI 计划,但并不依赖于 EFI。GPT 相对于以往 PC 普遍使用的主引导记录 (MBR) 分区方案更加灵活。比如可以超过 MBR 分区表项4个的限制,在 GPT 规范里对分区的数量几乎是没有限制的。GPT 对可管理磁盘大小也超过了 MBR 的2TB (1TB = 1024GB) 而达到了 18EB (1EB = 1024TB) 。在 MBR 分区方案中操作系统的引导是通过放在磁盘最开始 (第一扇区) 里的 MBR 。把重要的信息 (如分区信息、目录等) 放在某个扇区里是 MBR 分区方案的方法,而 GPT 把这个信息放到了分区里,这样可以更加明确更加安全。 GPT 分区为了保护自己不受 MBR 方案下磁盘管理软件的危害,在磁盘的最开始位置 (第一个扇区) 建立了一个保护分区(Protective MBR),这种分区的类型标识为 0xEE。苹果系统 (Mac OS X) 下这个保护分区大小为 200MB,这个分区在 Window NT 磁盘管理器里名字叫做GPT 保护分区。这个分区可以让不能识别 GPT 的磁盘管理软件把 GPT 磁盘看成一个未知格式的分区,而不是错误地当成一个未分区的磁盘。
目前随着单块硬盘容量的增大,2TB的磁盘使用将很快会普及,由于传统的MBR方式存储分区表的方式缺陷,将可能导致很多分区工具不能正确地读取大于2TB容量的硬盘而无法正常分区大容量硬盘。其实linux在很早就已经有相关的工具来化解这个困境了,那就是parted。parted是类似fdisk的命令行分区软件,如果您在全新安装linux操作系统的时候遇到这个问题,以下有两种解决方法:
一、利用系统盘进入rescue模式,利用光盘提供的宿主环境,将磁盘转换为GPT分区,过程同下,然后再安装操作系统,这是就不会报错了。
二、最有效的方法,去掉一部分磁盘,只保留一块儿磁盘(该磁盘容量要小于2T,此时你应该懂得为什么了),然后安装操作系统到该磁盘,当安装好操作系统之后将剩下的磁盘装上,然后根据个人需要做好raid,在然后将其转换为GPT分区、格式化、挂载使用,具体操作过程如下:
假设我们在linux系统中有一块未分区的硬盘,下面以实例的方式来讲解如何使用parted:
注意:parted的操作都是实时的,也就是说你执行了一个分区的命令,他就实实在在地分区了,而不是像fdisk那样,需要执行w命令写入所做的修改, 所以进行parted的测试千万注意不能在生产环境中!!
标记:[root@localhost ~]# 表示在shell的root下输入的命令,(parted)表示在parted中输入的命令,其他为自动打印的信息
1、首先类似fdisk一样,先选择要分区的硬盘,此处为/dev/cciss/c0d1:2、现在我们已经选择了/dev/cciss/c0d1作为我们操作的磁盘,接下来需要创建一个分区表(在parted中可以使用help命令打印帮助信息):
[root@localhost ~]# parted /dev/cciss/c0d1
GNU Parted 1.8.1
Using /dev/cciss/c0d1
Welcome to GNU Parted! Type ‘help’ to view a list of commands.
(parted) mklabel
Warning: The existing disk label on /dev/cciss/c0d1 will be destroyed and all data on this disk will be lost. Do you want to continue?Yes/No?(警告用户磁盘上的数据将会被销毁,询问是否继续,我们这里是新的磁盘,输入yes后回车)yes
New disk label type? [gpt]? (我们要正确分区大于2TB的磁盘,应该使用gpt方式的分区表,默认为gpt形式的分区,直接回车或输入gpt)gpt
3、创建好分区表以后,接下来就可以进行分区操作了,执行mkpart命令,分别输入分区名称,文件系统和分区的起止位置
(parted) mkpart primary 0 100 (此命令表示创建一个primary分区,分区的起始位置分别为0和100 默认单位为M,也可以自己指定单位,如G、T等,这里该分区的容量为100M-0M=100M)
同样方法创建其他分区,如:
(parted) mkpart primary 101 2T 该分区的大小为2T-101M
4、分好区后可以使用print命令打印分区信息,下面是一个print的样例
(parted) print
Model: Compaq Smart Array (cpqarray)
Disk /dev/cciss/c0d1: 4501GB
Sector size (logical/physical): 512B/512B
Partition Table: gptNumber Start End Size File system Name Flags
1 17.4kB 4500GB 4500GB ext3 primary
5、如果分区错了,可以使用rm命令删除分区,比如我们要删除上面的分区,然后打印删除后的结果
(parted) rm 1 #rm后面使用分区的号码
(parted) print
6、分好区后就是格式化文件系统,由于parted内建的mkfs还不够完善,所以完成以后我们可以使用quit命令退出parted并使用系统的mkfs或其他命令对分区进行格式化了,此时如果使用fdisk -l命令打印分区表会出现警告信息,这是正常的
[root@localhost ~]# fdisk -l
WARNING: GPT (GUID Partition Table) detected on ‘/dev/cciss/c0d1′! The util fdisk doesn’t support GPT. Use GNU Parted.
WARNING: The size of this disk is 4.5 TB (4500759535616 bytes).
DOS partition table format can not be used on drives for volumes
larger than 2.2 TB (2199023255040 bytes). Use parted(1) and GUID
partition table format (GPT).
Disk /dev/cciss/c0d1: 4500.7 GB, 4500759535616 bytes
255 heads, 63 sectors/track, 547186 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytesDevice Boot Start End Blocks Id System
/dev/cciss/c0d1p1 1 267350 2147483647+ ee EFI GPT
[root@localhost ~]# mke2fs -j /dev/cciss/c0d1p1
由于分区容量较大,因此格式化过程需要很长时间,请耐心等待。。
如果需要自动挂载该分区,可将挂载信息写在配置文件里/etc/fstab
[root@localhost ~]# mount -a
/dev/cciss/c0d0p3 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/cciss/c0d0p1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
/dev/cciss/c0d1p1 on /opt type ext3 (rw) #出现这条就说明挂载成功
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw
此方法已经过实际操作得到验证。