免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1261 | 回复: 0

如何使用大于2T的块设备 [复制链接]

论坛徽章:
0
发表于 2008-08-26 17:11 |显示全部楼层
        Linux在内核中选择支持Large Block Device时,是可以使用大于2T的块设备的。但是当使用Fdisk来查看这个块设备时,却发现最大只能显示出来2T的空间,而且使用其他的分区工具时也很难使用大于2T的块设备。

Fdisk所使用的分区表为MBR,Master Boot Record,即主引导记录。他是不属于任何一个操作系统,也不能用操作系统提供的磁盘操作命令来读取它。硬盘的0柱面、0磁头、1扇区称为主引导扇区,Fdisk将会写512个字节的记录在此,即MBR记录。启动过程详见How It Works : Master Boot Record (MBR),
http://cang.baidu.com/lis/snap/2a0542a949b8e3b8ba4fb147.html


MBR的组成
一个扇区的硬盘主引导记录MBR由4个部分组成:
1.  主引导程序(偏移地址0000H—0088H),它负责从活动分区中装载,并运行系统引导程序。
2.  出错信息数据区,偏移地址0089H--00E1H为出错信息,00E2H—01BDH全为0字节。
3.  分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH—01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4。
4.  结束标志字,偏移地址01FE—01FF的2个字节值为结束标志55AA,如果该标志错误系统就不能启动。
MBR的组成结构图:
   
        
            
            0000-0088
            
            
            Master Boot Record 主引导程序
            
            
            主引导程序
            
        
        
            
            0089-01BD
            
            
            出错信息数据区
            
            
            数据区
            
        
        
            
            01BE-01CD
            
            
            分区项1(16字节)
            
            
             
            分区表
             
            
        
        
            
            01CE-01DD
            
            
            分区项2(16字节)
            
        
        
            
            01DE-01ED
            
            
            分区项3(16字节)
            
        
        
            
            01EE-01FD
            
            
            分区项4(16字节)
            
        
        
            
            01FE
            
            
            55
            
            
            结束标志
            
        
        
            
            01FF
            
            
            AA
            
        
   

MBR中的分区信息结构

占用512个字节的MBR中,偏移地址01BEH--01FDH的64个字节,为4个分区项内容(分区信息表)。它是由磁盘介质类型及用户在使用 FDISK定义分区说确定的。在实际应用中,FDISK对一个磁盘划分的主分区可少于4个,但最多不超过4个。每个分区表的项目是16个字节,其内容含义如下所示。
分区项表(16字节)内容及含义
   
        
            
            存贮字节位
            
            
            内容及含义
            
        
        
            
            第1字节
            
            
            
引导标志。若值为80H表示活动分区,若值为00H表示非活动分区。
            
        
        
            
            第2、3、4字节
            
            
            
本分区的起始磁头号、扇区号、柱面号。其中:
            
磁头号——第2字节;
            
扇区号——第3字节的低6位;
            
柱面号——为第3字节高2位+第4字节8位。
            
        
        
            
            第5字节
            
            
            
分区类型符。
            
00H——表示该分区未用(即没有指定);
            
06H——FAT16基本分区;
            
0BH——FAT32基本分区;
            
05H——扩展分区;
            
07H——NTFS分区;
            
0FH——(LBA模式)扩展分区(83H为Linux分区等)。
            
        
        
            
            第6、7、8字节
            
            
            
本分区的结束磁头号、扇区号、柱面号。其中:
            
磁头号——第6字节;
            
扇区号——第7字节的低6位;
            
柱面号——第7字节的高2位+第8字节。
            
        
        
            
            第9、10、11、12字节
            
            
            
本分区之前已用了的扇区数。
            
        
        
            
            第13、14、15、16字节
            
            
            
本分区的总扇区数。
            
        
   

从上述来看,在使用MBR时,最大的分区数据为4个。从分区信息表的结构组成可以看到,一个分区的总扇区数是由4个字节来代表的,那么他所包含的最大扇区为2^(4*8)个,每个扇区为512字节,即每个分区包含的最大字节数为(2^32)*2^9=2^41 bytes,即2T。

其实这个限制在Fdisk和Parted等分区工具在定义磁盘的结构体时,也可以非常容易的看到。

   
        
            
            fdisk:
            /*  
             * per partition table entry data  
             *  
             * The four primary partitions have the same   sectorbuffer (MBRbuffer)  
             * and have NULL ext_pointer.  
             * Each logical partition table entry has two   pointers, one for the  
             * partition and one link to the next one.  
             */  
            struct pte {  
             struct partition *part_table; /* points into   sectorbuffer */  
             struct partition *ext_pointer; /* points   into sectorbuffer */  
             char changed; /* boolean */  
             unsigned int offset; /* disk sector number   */ 限制在这里
             char *sectorbuffer; /* disk sector contents   */  
            } ptes[MAXIMUM_PARTS];  
            
            parted:
            /* ripped from Linux source */  
            struct _DosRawPartition {  
             uint8_t boot_ind; /* 00: 0x80 - active */  
             RawCHS chs_start; /* 01: */  
             uint8_t type; /* 04: partition type */  
             RawCHS chs_end; /* 05: */  
             uint32_t start; /* 08: starting sector   counting from 0 */ 限制
             uint32_t length; /* 0c: nr of sectors in   partition */ 限制
            } __attribute__((packed));  
            
        
   

由上可见,如果使用fdisk来分区的话,是不可能使用到大于2T的块设备的。这里,就要引入GPT的概念。
在EFI规范中,一种突破传统MBR磁盘分区结构限制的GUID磁盘分区系统(GPT)被引入。GUID 分区表 (GPT)是一种由基于 Itanium 计算机中的可扩展固件接口 (EFI) 使用的磁盘分区架构。与主启动记录 (MBR) 分区方法相比,GPT 具有更多的优点,因为它允许每个磁盘有多达 128 个分区,支持高达 18 EB字节的卷大小,允许将主磁盘分区表和备份磁盘分区表用于冗余,还支持唯一的磁盘和分区 ID (GUID)。
与支持最大卷为 2 TB (terabytes) 并且每个磁盘最多有 4 个主分区(或 3 个主分区,1 个扩展分区和无限制的逻辑驱动器)的主启动记录 (MBR) 磁盘分区的样式相比,GUID 分区表 (GPT) 磁盘分区样式支持最大卷为 18 EB (exabytes) 并且每磁盘最多有 128 个分区。与 MBR 分区的磁盘不同,至关重要的平台操作数据位于分区,而不是位于非分区或隐藏扇区。另外,GPT 分区磁盘有多余的主要及备份分区表来提高分区数据结构的完整性。
下面说一下如何使用GPT分区表。首先要在内核(需要64位的)中加入对EFI的支持(一般默认都加了),然后使用parted即可。

例:
   
        
            
            
parted   /dev/cciss/c0d1
            

            
mklabel gpt /*使用gpt分区表*/
            
mkpart primary   0 7143487.601
            
quit
            
        
   
这样就把/dev/cciss/c0d1使用gpt分区表,并且建立一个分区,分区大小约为7T。然后使用mkfs对/dev/cciss/c0d1p1进行创建文件系统就可以使用了。
上述是针对Linux操作系统来做的相关操作,其实在其他系统上都是相似的,只要改变块设备的分区表类型为GPT即可使用超过2T的块设备了。
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/708/showart_1149431.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP