• linux 如何使用大于2T的块设备


    http://hi.baidu.com/linux/blog/item/5e2442a70db50694d14358ec.html

    Linux在内核中选择支持Large Block Device时,是可以使用大于2T的块设备的。但是当使用Fdisk来查看这个块设备时,却发现最大只能显示出来2T的空间,而且使用其他的分区工具时也很难使用大于2T的块设备。

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

    MBR的组成

    一个扇区的硬盘主引导记录MBR4个部分组成:

    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—01FF2个字节值为结束标志55AA,如果该标志错误系统就不能启动。

    MBR的组成结构图:

    0000-0088

    Master Boot Record 主引导程序

    主引导程序

    0089-01BD

    出错信息数据区

    数据区

    01BE-01CD

    分区项116字节)

    分区表

    01CE-01DD

    分区项216字节)

    01DE-01ED

    分区项316字节)

    01EE-01FD

    分区项416字节)

    01FE

    55

    结束标志

    01FF

    AA



    MBR
    中的分区信息结构

    占用512个字节的MBR中,偏移地址01BEH--01FDH64个字节,为4个分区项内容(分区信息表)。它是由磁盘介质类型及用户在使用 FDISK定义分区说确定的。在实际应用中,FDISK对一个磁盘划分的主分区可少于4个,但最多不超过4个。每个分区表的项目是16个字节,其内容含义如下所示。

    分区项表(16字节)内容及含义

    存贮字节位

    内容及含义

    1字节

    引导标志。若值为80H表示活动分区,若值为00H表示非活动分区。

    234字节

    本分区的起始磁头号、扇区号、柱面号。其中:

    磁头号——第2字节;

    扇区号——第3字节的低6位;

    柱面号——为第3字节高2+4字节8位。

    5字节

    分区类型符。

    00H——表示该分区未用(即没有指定);

    06H——FAT16基本分区;

    0BH——FAT32基本分区;

    05H——扩展分区;

    07H——NTFS分区;

    0FH——LBA模式)扩展分区(83HLinux分区等)。

    678字节

    本分区的结束磁头号、扇区号、柱面号。其中:

    磁头号——第6字节;

    扇区号——第7字节的低6位;

    柱面号——第7字节的高2+8字节。

    9101112字节

    本分区之前已用了的扇区数。

    13141516字节

    本分区的总扇区数。

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

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

    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的块设备了。

  • 相关阅读:
    day09 小练习 斐波那契数列 文件
    day09三目运算
    day08文件操作
    Nginx 内容缓存及常见参数配置
    阿里开源分布式事务解决方案 Fescar 全解析
    为什么你学不会递归?刷题几个月,告别递归,谈谈我的经验
    JavaScript 复杂判断的更优雅写法
    Java 线程本地 ThreadLocal 的分析和总结
    总结异步编程的六种方式
    JAVA8新特性(吐血整理)
  • 原文地址:https://www.cnblogs.com/cute/p/2032993.html
Copyright © 2020-2023  润新知