Amazon Elastic Compute Cloud
Linux 实例用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

针对修改 EBS 卷大小的限制

对 Amazon EBS 卷大小的修改受制于块数据存储的物理和算术特性,以及操作系统和文件系统设计者的实现决策。AWS 对卷大小施加了额外的限制,以保证其服务的可靠性。

作为一种服务,EBS 将数据中心的大规模分布式存储提取到虚拟硬盘驱动器中。对安装在 EC2 实例上的操作系统而言,附加的 EBS 卷似乎是包含 512 字节磁盘扇区的物理硬盘驱动器。操作系统通过其存储管理实用程序对数据块 (或集群) 分配到这些虚拟扇区进行管理。分配与卷分区方案 (如主启动记录 (MBR) 或 GUID 分区表 (GPT)) 一致,并且属于已安装文件系统 (ext4、NTFS 等) 的功能。

EBS 不知道其虚拟磁盘扇区中包含的数据;它只会确保扇区的完整性。这意味着 AWS 操作和操作系统操作是彼此完全独立的。在修改卷大小时,请注意二者的功能和限制。例如,您可以将 EBS 卷的大小增加到 16 TiB,但操作系统是否能够识别该容量的全部取决于其自身的设计特征以及该卷的分区方式。

此部分描述了限制 EBS 卷的可用大小的最重要因素。

AWS 服务限制

Amazon EBS 当前支持最大卷大小 16 TiB。

Amazon EC2 需要有 Windows 启动卷,才能使用 MBR 分区。如分区方案中所述,这意味着启动卷不能大于 2 TiB。Windows 数据卷不受制于此限制,可以是 GPT 分区的。

Linux 启动卷可以是 MBR 或 GPT,而且 Linux GPT 启动卷不受制于 2-TiB 限制。

分区方案

除其他影响之外,分区方案还确定了可以在单个卷中唯一寻址的逻辑数据块的数量。有关更多信息,请参阅 数据块大小。两种分区方案在 Linux 和 Windows 系统上是常用的:主启动记录 (MBR) 和 GUID 分区表 (GPT)。二者之间的重要差别可归纳如下:

  • MBR

    MBR 使用 32 位数据结构来存储块地址。这意味着,每个数据块会映射到 232 个可能整数之一。卷的最大可寻址大小由以下公式指定:

    (232 - 1) × 块大小 = 可寻址块的数量

    MBR 卷的块大小通常限制为 512 字节。因此:

    (232 - 1) × 512 字节 = 2 TiB - 512 字节

    工程解决办法是提高 MBR 卷的这个 2 TiB 限制,但还没有被行业广泛采用。因此,即使 AWS 显示 MBR 卷的大小大于 2 TiB,Linux 和 Windows 也绝不会检测到它。

  • GPT

    GPT 使用 64 位数据结构来存储块地址。这意味着,每个数据块会映射到 264 个可能整数之一。卷的最大可寻址大小由以下公式指定:

    (264 - 1) × 块大小 = 可寻址块的数量

    GPT 卷的块大小通常限制为 4,096 字节。因此:

    (264 - 1) × 4,096 字节 = 8 ZiB - 4,096 字节 = 8 billion TiB - 4,096 字节

    现实世界中的计算机系统不支持任何接近这个理论最大值的值。实现的文件系统大小目前仅限于 50 TiB (对于 ext4) 和 256 TiB (对于 NTFS),这两个值都超过了 AWS 所施加的 16 TiB 限制。

数据块大小

现代硬盘驱动器上的数据存储是通过逻辑块寻址来管理的,逻辑块寻址是一个抽象层,它允许操作系统在逻辑块中读取和写入数据,而无需详细了解底层硬件。操作系统依赖存储设备将块映射到其物理扇区。EBS 将 512 字节的扇区通告给操作系统,操作系统使用数据块 (是扇区大小的数倍) 将数据读写到磁盘。

逻辑数据块的行业默认大小当前为 4096 字节 (4 KiB)。由于某些工作负载受益于较小或较大的块大小,因此文件系统支持可在格式化期间指定的非默认块大小。应使用非默认块大小的情况不在本主题的范围之内,但块大小的选择会对卷的存储容量产生影响。下表显示了存储容量随不同块大小的变化:

块大小和生成的卷容量

块大小 最大卷大小
4 KiB (默认) 16 TiB
8 KiB 32 TiB
16 KiB 64 TiB
32 KiB 128 TiB
64 KiB (最大) 256 TiB

EBS 对卷大小施加的限制目前等于 4 KiB 数据块启用的最大大小。

摘要

下表总结了 Amazon EBS 上的最常用文件系统的理论和实现存储容量。

常用文件系统的 MBR 与 GPT 卷大小 (假定 4096 字节块大小)

分区方案 最大可寻址的块 理论最大大小 (块数 × 数据块大小) Ext4 实现的最大大小* XFS 实现的最大大小** NTFS 实现的最大大小*** 最大(EBS 支持)
MBR 232 2 TiB 2 TiB 2 TiB 2 TiB 2 TiB
GPT 264

8 ZiB = 8 ×

10243 TiB

1 EiB =

10242 TiB

(在 RHEL7 上认证的 50 TiB)

500 TiB

(在 RHEL7 上认证)

256 TiB 16 TiB

* https://ext4.wiki.kernel.org/index.php/Ext4_Howtohttps://access.redhat.com/solutions/1532

** https://access.redhat.com/solutions/1532

*** https://technet.microsoft.com/en-us/library/dn466522(v=ws.11).aspxhttps://technet.microsoft.com/en-us/library/dn466522(v=ws.11).aspx

针对 Linux 卷的建议

Linux AMI 需要将 GUID 分区表 (GPT) 和 GRUB 2 用于 2 TiB (2048 GiB) 或更大的引导卷。现在的许多 Linux AMI 仍使用 MBR 分区方案,此方案仅支持最高 2 TiB 的引导卷大小。如果您的实例不通过 2 TiB 或更大的引导卷启动,您要使用的 AMI 会限制为 2 TiB 引导卷大小。非引导卷对 Linux 实例没有这种限制。

在尝试调整超过 2 TiB 的引导卷大小之前,您可以通过在您的实例上运行以下命令来决定该卷是使用 MBR 分区还是使用 GPT 分区:

[ec2-user ~]$ sudo gdisk -l /dev/xvda

使用 GPT 分区的 Amazon Linux 实例返回以下信息:

GPT fdisk (gdisk) version 0.8.10 Partition table scan: MBR: protective BSD: not present APM: not present GPT: present Found valid GPT with protective MBR; using GPT.

使用 MBR 分区的 SUSE 实例返回以下信息:

GPT fdisk (gdisk) version 0.8.8 Partition table scan: MBR: MBR only BSD: not present APM: not present GPT: not present

针对 Windows 卷的建议

默认情况下,Windows 使用主启动记录 (MBR) 分区表来初始化卷。由于 MBR 只支持小于 2 TiB (2,048 GiB) 的卷,Windows 会阻止您将 MBR 卷大小调整为超过此限制。在这种情况下,Windows Disk Management 实用程序中的 Extend Volume 选项会灰显。如果您使用 AWS 管理控制台 或 AWS CLI 创建超过大小限制的 MBR 分区卷,Windows 将无法检测或使用超出的空间。

要克服此限制,您可以使用 GUID 分区表 (GPT) 创建新的较大的卷并从原始 MBR 卷复制数据。

创建 GPT 卷

  1. 在 EC2 实例的可用区中创建新的具有所需大小的空卷,并将其附加到您的实例上。

    注意

    新卷不能是从快照恢复的卷。

  2. 登录到您的 Windows 系统并打开 Disk Management (diskmgmt.exe)。

  3. 打开新磁盘的上下文 (右键单击) 菜单并选择 Online

  4. Initialize Disk 窗口中,选择新磁盘,并依次选择 GPT (GUID Partition Table)OK

  5. 初始化完成后,使用 robocopy 或 teracopy 等工具将数据从原始卷复制到新卷。

  6. Disk Management 中,将驱动器号更改为适当的值,并使旧卷脱机。

  7. 在 Amazon EC2 控制台中,从实例上分离旧卷,重启实例以验证它是否正常工作,然后删除旧卷。