EC2 增加大小后无法调整卷大小

Posted

技术标签:

【中文标题】EC2 增加大小后无法调整卷大小【英文标题】:EC2 Can't resize volume after increasing size 【发布时间】:2012-06-16 09:26:26 【问题描述】:

我已按照调整 EC2 卷大小的步骤进行操作

    停止实例 拍摄当前卷的快照 在同一区域中从先前的快照创建了一个更大的新卷 从实例中分离旧卷 将新卷附加到实例的同一挂载点

旧卷是 5GB,而我创建的卷是 100GB 现在,当我重新启动实例并运行 df -h I 时仍然看到这个

Filesystem            Size  Used Avail Use% Mounted on
/dev/xvde1            4.7G  3.5G 1021M  78% /
tmpfs                 296M     0  296M   0% /dev/shm

这是我跑步时得到的

sudo resize2fs /dev/xvde1

The filesystem is already 1247037 blocks long.  Nothing to do!

如果我运行cat /proc/partitions 我明白了

 202       64  104857600 xvde
 202       65    4988151 xvde1
 202       66     249007 xvde2

据我了解,如果我遵循了正确的步骤,xvde 应该具有与 xvde1 相同的数据,但我不知道如何使用它

如何使用新卷或 umount xvde1 并改为 mount xvde?​​p>

我不明白我做错了什么

我也试过sudo ifs_growfs /dev/xvde1

xfs_growfs: /dev/xvde1 is not a mounted XFS filesystem

顺便说一句,这是一个装有 centos 6.2 x86_64 的 linux 机器

提前感谢您的帮助

【问题讨论】:

【参考方案1】:

修改 EBS 的大小后,

列出块设备

sudo lsblk

NAME        MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1     259:2    0  10G  0 disk
|-nvme0n1p1 259:3    0   1M  0 part
`-nvme0n1p2 259:4    0  10G  0 part /

扩展分区

假设您要扩展安装在/ 上的第二个分区,

sudo growpart /dev/nvme0n1 2

如果根卷中的所有空间都用完了,并且基本上您无法访问/tmp,即出现错误消息Unable to growpart because no space left

    临时挂载/tmp 卷:sudo mount -o size=10M,rw,nodev,nosuid -t tmpfs tmpfs /tmp 在完全调整大小完成后卸载:sudo umount -l /tmp

验证新尺寸

NAME        MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1     259:2    0  20G  0 disk
|-nvme0n1p1 259:3    0   1M  0 part
`-nvme0n1p2 259:4    0  10G  0 part /

调整文件系统的大小

对于 XFS(使用挂载点作为参数)

sudo xfs_growfs /

对于 EXT4(使用分区名称作为参数)

sudo resize2fs /dev/nvme0n1p2

【讨论】:

【参考方案2】:

不再需要停止实例并分离 EBS 卷来调整它的大小! 2017 年 2 月 13 日亚马逊宣布:“Amazon EBS Update – New Elastic Volumes Change Everything”

即使要扩展的卷是运行实例的根卷,该过程也能正常工作!


假设我们想“即时”将 Ubuntu 的启动驱动器从 8G 增加到 16G。 步骤 1) 登录 AWS Web 控制台 -> EBS -> 右键单击​​要调整大小的那个 -> “修改体积” -> 更改“大小”字段并单击 [修改] 按钮


步骤 2) SSH 进入实例并调整分区大小: 让我们列出连接到我们盒子的块设备:
lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  16G  0 disk
└─xvda1 202:1    0   8G  0 part /

您可以看到 /dev/xvda1 仍然是 16 GiB 设备上的 8 GiB 分区,并且该卷上没有其他分区。 让我们使用“growpart”将 8G 分区调整到 16G:

# install "cloud-guest-utils" if it is not installed already
apt install cloud-guest-utils

# resize partition
growpart /dev/xvda 1

让我们检查一下结果(可以看到 /dev/xvda1 现在是 16G):

lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  16G  0 disk
└─xvda1 202:1    0  16G  0 part /

许多 SO 答案建议使用 fdisk 删除/重新创建分区,这是一个讨厌、有风险、容易出错的过程,尤其是在我们更改启动驱动器时。


step-3) 调整文件系统的大小以一直增长以充分利用新的分区空间
# Check before resizing ("Avail" shows 1.1G):
df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.8G  6.3G  1.1G  86% /

# resize filesystem
resize2fs /dev/xvda1

# Check after resizing ("Avail" now shows 8.7G!-):
df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       16G  6.3G  8.7G  42% /

因此,我们的停机时间为零,并且有大量新空间可供使用。 享受吧!

更新:更新:在 XFS 文件系统时使用 sudo xfs_growfs /dev/xvda1 而不是 resize2fs。

【讨论】:

调整分区大小很有帮助....!!最美妙的是它甚至适用于根卷。 有人会接受这个作为正确答案吗?只是因为......它是。 很好,非常感谢......我对执行上述答案中提到的步骤持怀疑态度,但这太酷了...... 呵呵,官方文档没有提到growpart,这就是为什么我之前不能让它工作的原因。谢谢! @Shihas,是的。这就是重点。即使是可启动的“根”安装驱动器也可以安全地增加而无需重新启动!【参考方案3】:

姓名和号码之间加空格,例如:

sudo growpart /dev/xvda 1

注意设备名和分区号之间有空格。

要扩展每个卷上的分区,请使用以下 growpart 命令。请注意,设备名称和设备名称之间有一个空格 分区号。

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/recognize-expanded-volume-linux.html

【讨论】:

【参考方案4】:

以防万一有人在这里使用 GCP 谷歌云平台,试试这个:

sudo growpart /dev/sdb 1
sudo resize2fs /dev/sdb1

【讨论】:

你知道如果它不增长为什么会发生吗?我在 2 台机器上执行了此操作,每台机器都有一个辅助磁盘(找到一个包含此信息的帖子),其中 1 个磁盘增长但另一个没有。【参考方案5】:

所以万一有人遇到这个问题,他们在 100% 使用时遇到了这个问题,甚至没有空间来运行 growpart 命令(因为它在 /tmp 中创建了一个文件)

这是我发现的一个命令,即使在使用 EBS 卷时,它也会绕过,如果你的 ec2 上没有剩余空间,并且你处于 100% 状态

/sbin/parted ---pretend-input-tty /dev/xvda resizepart 1 yes 100%

在此处查看此网站:

https://www.elastic.co/blog/autoresize-ebs-root-volume-on-aws-amis

【讨论】:

这个命令后面应该跟sudo resize2fs /dev/xvda1更新/etc/fstab,只有在df -h之后才会显示增长的磁盘空间【参考方案6】:
    sudo growpart /dev/xvda 1 sudo resize2fs /dev/xvda1

以上两个命令为我节省了 AWS ubuntu ec2 实例的时间。

【讨论】:

【参考方案7】:

上面 jperelli 的完美评论。

我今天遇到了同样的问题。 AWS 文档没有明确提到 growpart。我找到了艰难的方法,确实这两个命令在 M4.large 和 M4.xlarge 与 Ubuntu 上完美运行

sudo growpart /dev/xvda 1
sudo resize2fs /dev/xvda1

【讨论】:

附加的第二个答案,这个答案是调整大小 太棒了!在我的 t2.small 实例上工作。唷。以为会比这更血腥。谢谢! 我似乎无法安装包含 growpart 的 cloud-guest-utils。 Linux 版本 3.16.0-4-amd64 我遇到了同样的问题,但运行 sudo resize2fs /dev/xvda1 现在它反映了谢谢【参考方案8】:

    登录 AWS Web 控制台 -> EBS -> 右键单击​​要调整大小的那个 -> “修改音量” -> 更改“大小”字段并单击 [修改] 按钮

    growpart /dev/xvda 1

    resize2fs /dev/xvda1

这是 Dmitry Shevkoplyas 答案的简单版本。 AWS 文档未显示 growpart 命令。这适用于 ubuntu AMI。

【讨论】:

【参考方案9】:

谢谢@Dimitry,它就像一个魅力,只需稍加改动即可匹配我的文件系统。

来源:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-expand-volume.html#recognize-expanded-volume-linux

然后使用以下命令,替换文件系统的挂载点(必须挂载 XFS 文件系统以调整它们的大小):

[ec2-user ~]$ sudo xfs_growfs -d /mnt
meta-data=/dev/xvdf              isize=256    agcount=4, agsize=65536 blks
         =                       sectsz=512   attr=2
data     =                       bsize=4096   blocks=262144, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 262144 to 26214400

注意 如果您收到 xfsctl failed: Cannot allocate memory 错误,您可能需要更新实例上的 Linux 内核。有关详细信息,请参阅您的特定操作系统文档。 如果您收到一个 The filesystem is already nnnnnnn blocks long。没事做!错误,请参阅扩展 Linux 分区。

【讨论】:

【参考方案10】:

感谢 Wilman,您的命令正常运行,如果我们将 EBS 增加到更大的尺寸,则需要考虑一些小的改进

    停止实例 从卷创建快照 根据快照增加大小创建新卷 检查并记住当前的卷挂载点(即/dev/sda1) 分离当前音量 将最近创建的卷附加到实例,设置准确的挂载点 重启实例

    通过 SSH 访问实例并运行 fdisk /dev/xvde

    警告:DOS 兼容模式已弃用。强烈建议 关闭模式(命令'c')并将显示单位更改为 扇区(命令“u”)

    点击 p 显示当前分区

    点击 d 删除当前分区(如果有多个,您必须一次删除一个)注意:不要担心数据不会丢失 点击n创建一个新分区 点击 p 将其设置为主 点击1设置第一个圆柱体 设置所需的新空间(如果为空则保留整个空间) 点击 a 使其可启动 点击 1w 写入更改 重启实例或使用partprobe(来自parted 包)告诉内核有关新分区表的信息 通过 SSH 登录并运行 resize2fs /dev/xvde1 最后检查新空间运行df -h

【讨论】:

"警告:DOS 兼容模式已弃用。强烈建议关闭模式(命令'c')并将显示单位更改为扇区(命令'u')" i> 这对我来说不是必需的(Ubuntu 13.04)。它已经关闭了 DOS 兼容性并默认使用扇区。按cu 实际上切换到不推荐使用的模式。 该解决方案运行良好,但实例卡在“1/2 检查通过”并带有感叹号(ReadHat 6.5)。为了解决这个问题,我将 "first cylinder" 设置为 16(就像以前一样)。之后,实例以“2/2 检查通过”正常启动。希望这可以帮助某人... 我也必须更改第一个柱面,但我必须将其更改为 2048。我建议在删除之前检查您当前的分区设置。 重启实例后,我无法通过 SSH 连接。连接超时并且 aws 控制台显示它无法启动其状态检查。我认为它已经死了。知道该怎么做吗? 这个答案现在已被弃用,因为 AWS 支持 EBS 卷的在线调整大小。【参考方案11】:

没有足够的代表在上面发表评论;但还要注意,根据上面的 cmets,如果从 1 开始,您可能会损坏您的实例;如果您在启动 fdisk 之后在使用“p”列出分区之前点击“u”,这实际上会为您提供正确的开始编号,这样您就不会损坏您的卷。对于 centos 6.5 AMI,同样如上所述 2048 对我来说是正确的。

【讨论】:

【参考方案12】:

可引导标志 (a) 在我的情况下不起作用(EC2、centos6.5),所以我不得不从快照重新创建卷。 重复所有步骤后,除了可启动标志 - 一切都完美无缺,所以我能够在之后 resize2fs。 谢谢!

【讨论】:

【参考方案13】:

[已解决]

这是必须要做的事情

    停止实例 从卷创建快照 根据快照增加大小创建新卷 检查并记住当前的卷挂载点(即 /dev/sda1) 分离当前音量 将最近创建的卷附加到实例,设置准确的挂载点 重启实例 通过 SSH 访问实例并运行 fdisk /dev/xvde 点击 p 显示当前分区 点击 d 删除当前分区(如果有多个,您必须一次删除一个)注意:不要担心数据不会丢失 点击n创建一个新分区 点击 p 将其设置为主 点击1设置第一个圆柱体 设置所需的新空间(如果为空则保留整个空间) 点击 a 使其可启动 点击 1w 写入更改 重启实例 通过 SSH 登录并运行 resize2fs /dev/xvde1 最后检查新空间运行df -h

就是这样

祝你好运!

【讨论】:

在 Amazon EBS 卷中,在 resize2fs 中使用与 fdisk 相同的挂载点似乎很重要。 df 显示 /dev/xvda1 之类的东西作为附加的 EBS 卷,但是 resize2fs 命令仅在我使用 /dev/sdf1 标识符时才对我有用,我在 fdisk 中创建新分区时使用了该标识符。 这在 AWS 文档中。糟糕的是,经过 3 年的时间,他们的程序仍然不完整。如果你有一个图像,你可以回退,当然。总是可以从运行桌面的实例中临时挂起新磁盘,但是如果您正在考虑使用 gparted,则需要挂载它以调整大小可能是个问题。 gcloud 即时调整大小。 我的存储设备 (/dev/xvda1) 从扇区 16065 开始,而不是扇区 1。所以在我的情况下,第 13 步(点击 1 设置第一个柱面)必须是 16065。 不要使用这些解决方案,您可能会丢失数据。实际上,如果在分区表中显示分区列表值,我发现不要选择删除分区选项,因为如果列表在那里,那么它实际上会删除分区,所以即使答案说“它不会删除”。有一种方法可以扩展分区大小,在底部检查是否有其他实用程序可以帮助您顺利扩展分区大小。【参考方案14】:

这将适用于 xfs 文件系统只需运行此命令

xfs_growfs /

【讨论】:

让我的一天...myWEEK! 也保存了我的“WEEK”【参考方案15】:

您是否在此卷上进行了分区?如果你这样做了,你需要先扩大分区。

【讨论】:

不,我没有。我应该吗?我该怎么做?请记住,我附加的这个新卷应该包含以前的所有数据,因为它是原始卷的快照 没有。但是,如果附加了分区,我会收到该错误。去仔细检查你是否使卷大小正确,并仔细检查你安装了新卷。 另外,您不必停止实例来执行此操作。如果您对该卷进行写入是安全的,但您可以在实例运行时对其进行快照。

以上是关于EC2 增加大小后无法调整卷大小的主要内容,如果未能解决你的问题,请参考以下文章

实例上未列出增加的 ec2 卷

怎么调整磁盘分区的大小

Linux 使用LVM动态调整磁盘大小/扩容

怎么调整system分区大小

RHCSA-B3. 调整逻辑卷的大小

调整Linux逻辑卷大小